Skip to content

Commit 51bcabb

Browse files
committed
Add testcase
1 parent 2baef14 commit 51bcabb

1 file changed

Lines changed: 52 additions & 2 deletions

File tree

crates/vespera_macro/src/parse_utils.rs

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
99
#![allow(dead_code)]
1010

11+
use proc_macro2::Delimiter;
12+
use syn::parse::discouraged::AnyDelimiter;
1113
use syn::{Ident, LitStr, Token, parse::ParseStream};
1214

1315
/// Parse a comma-separated list with optional trailing comma.
@@ -52,8 +54,10 @@ pub fn parse_bracketed_list<T, F>(input: ParseStream, parser: F) -> syn::Result<
5254
where
5355
F: Fn(ParseStream) -> syn::Result<T>,
5456
{
55-
let content;
56-
syn::bracketed!(content in input);
57+
let (delim, _span, content) = input.parse_any_delimiter()?;
58+
if delim != Delimiter::Bracket {
59+
return Err(content.error("expected brackets"));
60+
}
5761
parse_comma_list(&content, parser)
5862
}
5963

@@ -420,4 +424,50 @@ mod tests {
420424
let items: Vec<i32> = result.unwrap();
421425
assert_eq!(items, vec![1, 2, 3]);
422426
}
427+
428+
#[test]
429+
fn test_parse_bracketed_list_wrong_delimiter_parens() {
430+
// Test parse_bracketed_list with parentheses instead of brackets - should error
431+
let parser = |input: ParseStream| {
432+
parse_bracketed_list(input, |input| {
433+
input.parse::<LitStr>().map(|lit| lit.value())
434+
})
435+
};
436+
437+
let tokens = quote::quote!(("a", "b"));
438+
let result = parser.parse2(tokens);
439+
assert!(result.is_err());
440+
let err = result.unwrap_err();
441+
assert!(err.to_string().contains("expected brackets"));
442+
}
443+
444+
#[test]
445+
fn test_parse_bracketed_list_wrong_delimiter_braces() {
446+
// Test parse_bracketed_list with braces instead of brackets - should error
447+
let parser = |input: ParseStream| {
448+
parse_bracketed_list(input, |input| {
449+
input.parse::<LitStr>().map(|lit| lit.value())
450+
})
451+
};
452+
453+
let tokens = quote::quote!({"a", "b"});
454+
let result = parser.parse2(tokens);
455+
assert!(result.is_err());
456+
let err = result.unwrap_err();
457+
assert!(err.to_string().contains("expected brackets"));
458+
}
459+
460+
#[test]
461+
fn test_parse_bracketed_list_no_delimiter() {
462+
// Test parse_bracketed_list with no delimiter at all - should error
463+
let parser = |input: ParseStream| {
464+
parse_bracketed_list(input, |input| {
465+
input.parse::<LitStr>().map(|lit| lit.value())
466+
})
467+
};
468+
469+
let tokens = quote::quote!("just_a_string");
470+
let result = parser.parse2(tokens);
471+
assert!(result.is_err());
472+
}
423473
}

0 commit comments

Comments
 (0)