feat: Add new system for multi-selections.
This commit is contained in:
@@ -31,6 +31,7 @@ pub struct Fixtures {
|
||||
pub items: Option<Vec<String>>,
|
||||
pub label_key: Option<String>,
|
||||
pub viewport: Option<(usize, usize)>, // (height, count)
|
||||
pub multi: Option<bool>,
|
||||
}
|
||||
|
||||
pub struct TestCase {
|
||||
@@ -44,6 +45,7 @@ pub struct TestCase {
|
||||
pub cursor: Option<usize>,
|
||||
pub offset: Option<usize>,
|
||||
pub selected: Option<String>,
|
||||
pub selected_items: Option<Vec<String>>,
|
||||
pub cancelled: bool,
|
||||
}
|
||||
|
||||
@@ -89,6 +91,7 @@ impl Parse for TestModule {
|
||||
items: None,
|
||||
label_key: None,
|
||||
viewport: None,
|
||||
multi: None,
|
||||
};
|
||||
let mut tests = Vec::new();
|
||||
|
||||
@@ -120,11 +123,18 @@ impl Parse for TestModule {
|
||||
fixtures.viewport = Some(parse_viewport_def(&content)?);
|
||||
eat_semi(&content);
|
||||
}
|
||||
"multi" => {
|
||||
consume_ident_or_keyword(&content)?;
|
||||
content.parse::<Token![:]>()?;
|
||||
let val: syn::LitBool = content.parse()?;
|
||||
fixtures.multi = Some(val.value);
|
||||
eat_semi(&content);
|
||||
}
|
||||
_ => {
|
||||
return Err(syn::Error::new(
|
||||
content.span(),
|
||||
format!(
|
||||
"unexpected field '{ident_str}', expected test, items, label_key, or viewport"
|
||||
"unexpected field '{ident_str}', expected test, items, label_key, viewport, or multi"
|
||||
),
|
||||
));
|
||||
}
|
||||
@@ -163,6 +173,7 @@ fn parse_test_case(input: ParseStream) -> syn::Result<TestCase> {
|
||||
cursor: None,
|
||||
offset: None,
|
||||
selected: None,
|
||||
selected_items: None,
|
||||
cancelled: false,
|
||||
};
|
||||
|
||||
@@ -224,6 +235,10 @@ fn parse_test_case(input: ParseStream) -> syn::Result<TestCase> {
|
||||
let val: LitStr = content.parse()?;
|
||||
case.selected = Some(val.value());
|
||||
}
|
||||
"selected_items" => {
|
||||
content.parse::<Token![:]>()?;
|
||||
case.selected_items = Some(parse_string_list(&content)?);
|
||||
}
|
||||
"cancelled" => {
|
||||
// Just the keyword presence means true. Optionally parse `: true`.
|
||||
if content.peek(Token![:]) {
|
||||
|
||||
Reference in New Issue
Block a user