+ #[test]
+ fn expand_to_item_list() {
+ let rules = create_rules(
+ "
+ macro_rules! structs {
+ ($($i:ident),*) => {
+ $(struct $i { field: u32 } )*
+ }
+ }
+ ",
+ );
+ let expansion = expand(&rules, "structs!(Foo, Bar)");
+ let tree = token_tree_to_ast_item_list(&expansion);
+ assert_eq!(
+ tree.syntax().debug_dump().trim(),
+ r#"
+SOURCE_FILE@[0; 40)
+ STRUCT_DEF@[0; 20)
+ STRUCT_KW@[0; 6)
+ NAME@[6; 9)
+ IDENT@[6; 9) "Foo"
+ NAMED_FIELD_DEF_LIST@[9; 20)
+ L_CURLY@[9; 10)
+ NAMED_FIELD_DEF@[10; 19)
+ NAME@[10; 15)
+ IDENT@[10; 15) "field"
+ COLON@[15; 16)
+ PATH_TYPE@[16; 19)
+ PATH@[16; 19)
+ PATH_SEGMENT@[16; 19)
+ NAME_REF@[16; 19)
+ IDENT@[16; 19) "u32"
+ R_CURLY@[19; 20)
+ STRUCT_DEF@[20; 40)
+ STRUCT_KW@[20; 26)
+ NAME@[26; 29)
+ IDENT@[26; 29) "Bar"
+ NAMED_FIELD_DEF_LIST@[29; 40)
+ L_CURLY@[29; 30)
+ NAMED_FIELD_DEF@[30; 39)
+ NAME@[30; 35)
+ IDENT@[30; 35) "field"
+ COLON@[35; 36)
+ PATH_TYPE@[36; 39)
+ PATH@[36; 39)
+ PATH_SEGMENT@[36; 39)
+ NAME_REF@[36; 39)
+ IDENT@[36; 39) "u32"
+ R_CURLY@[39; 40)"#
+ .trim()
+ );
+ }
+