1fad3a1d3Sopenharmony_ci#[macro_use] 2fad3a1d3Sopenharmony_cimod macros; 3fad3a1d3Sopenharmony_ci 4fad3a1d3Sopenharmony_ciuse syn::punctuated::Punctuated; 5fad3a1d3Sopenharmony_ciuse syn::{parse_quote, Attribute, Field, Lit, Pat, Stmt, Token}; 6fad3a1d3Sopenharmony_ci 7fad3a1d3Sopenharmony_ci#[test] 8fad3a1d3Sopenharmony_cifn test_attribute() { 9fad3a1d3Sopenharmony_ci let attr: Attribute = parse_quote!(#[test]); 10fad3a1d3Sopenharmony_ci snapshot!(attr, @r###" 11fad3a1d3Sopenharmony_ci Attribute { 12fad3a1d3Sopenharmony_ci style: AttrStyle::Outer, 13fad3a1d3Sopenharmony_ci meta: Meta::Path { 14fad3a1d3Sopenharmony_ci segments: [ 15fad3a1d3Sopenharmony_ci PathSegment { 16fad3a1d3Sopenharmony_ci ident: "test", 17fad3a1d3Sopenharmony_ci }, 18fad3a1d3Sopenharmony_ci ], 19fad3a1d3Sopenharmony_ci }, 20fad3a1d3Sopenharmony_ci } 21fad3a1d3Sopenharmony_ci "###); 22fad3a1d3Sopenharmony_ci 23fad3a1d3Sopenharmony_ci let attr: Attribute = parse_quote!(#![no_std]); 24fad3a1d3Sopenharmony_ci snapshot!(attr, @r###" 25fad3a1d3Sopenharmony_ci Attribute { 26fad3a1d3Sopenharmony_ci style: AttrStyle::Inner, 27fad3a1d3Sopenharmony_ci meta: Meta::Path { 28fad3a1d3Sopenharmony_ci segments: [ 29fad3a1d3Sopenharmony_ci PathSegment { 30fad3a1d3Sopenharmony_ci ident: "no_std", 31fad3a1d3Sopenharmony_ci }, 32fad3a1d3Sopenharmony_ci ], 33fad3a1d3Sopenharmony_ci }, 34fad3a1d3Sopenharmony_ci } 35fad3a1d3Sopenharmony_ci "###); 36fad3a1d3Sopenharmony_ci} 37fad3a1d3Sopenharmony_ci 38fad3a1d3Sopenharmony_ci#[test] 39fad3a1d3Sopenharmony_cifn test_field() { 40fad3a1d3Sopenharmony_ci let field: Field = parse_quote!(pub enabled: bool); 41fad3a1d3Sopenharmony_ci snapshot!(field, @r###" 42fad3a1d3Sopenharmony_ci Field { 43fad3a1d3Sopenharmony_ci vis: Visibility::Public, 44fad3a1d3Sopenharmony_ci ident: Some("enabled"), 45fad3a1d3Sopenharmony_ci colon_token: Some, 46fad3a1d3Sopenharmony_ci ty: Type::Path { 47fad3a1d3Sopenharmony_ci path: Path { 48fad3a1d3Sopenharmony_ci segments: [ 49fad3a1d3Sopenharmony_ci PathSegment { 50fad3a1d3Sopenharmony_ci ident: "bool", 51fad3a1d3Sopenharmony_ci }, 52fad3a1d3Sopenharmony_ci ], 53fad3a1d3Sopenharmony_ci }, 54fad3a1d3Sopenharmony_ci }, 55fad3a1d3Sopenharmony_ci } 56fad3a1d3Sopenharmony_ci "###); 57fad3a1d3Sopenharmony_ci 58fad3a1d3Sopenharmony_ci let field: Field = parse_quote!(primitive::bool); 59fad3a1d3Sopenharmony_ci snapshot!(field, @r###" 60fad3a1d3Sopenharmony_ci Field { 61fad3a1d3Sopenharmony_ci vis: Visibility::Inherited, 62fad3a1d3Sopenharmony_ci ty: Type::Path { 63fad3a1d3Sopenharmony_ci path: Path { 64fad3a1d3Sopenharmony_ci segments: [ 65fad3a1d3Sopenharmony_ci PathSegment { 66fad3a1d3Sopenharmony_ci ident: "primitive", 67fad3a1d3Sopenharmony_ci }, 68fad3a1d3Sopenharmony_ci Token![::], 69fad3a1d3Sopenharmony_ci PathSegment { 70fad3a1d3Sopenharmony_ci ident: "bool", 71fad3a1d3Sopenharmony_ci }, 72fad3a1d3Sopenharmony_ci ], 73fad3a1d3Sopenharmony_ci }, 74fad3a1d3Sopenharmony_ci }, 75fad3a1d3Sopenharmony_ci } 76fad3a1d3Sopenharmony_ci "###); 77fad3a1d3Sopenharmony_ci} 78fad3a1d3Sopenharmony_ci 79fad3a1d3Sopenharmony_ci#[test] 80fad3a1d3Sopenharmony_cifn test_pat() { 81fad3a1d3Sopenharmony_ci let pat: Pat = parse_quote!(Some(false) | None); 82fad3a1d3Sopenharmony_ci snapshot!(&pat, @r###" 83fad3a1d3Sopenharmony_ci Pat::Or { 84fad3a1d3Sopenharmony_ci cases: [ 85fad3a1d3Sopenharmony_ci Pat::TupleStruct { 86fad3a1d3Sopenharmony_ci path: Path { 87fad3a1d3Sopenharmony_ci segments: [ 88fad3a1d3Sopenharmony_ci PathSegment { 89fad3a1d3Sopenharmony_ci ident: "Some", 90fad3a1d3Sopenharmony_ci }, 91fad3a1d3Sopenharmony_ci ], 92fad3a1d3Sopenharmony_ci }, 93fad3a1d3Sopenharmony_ci elems: [ 94fad3a1d3Sopenharmony_ci Pat::Lit(ExprLit { 95fad3a1d3Sopenharmony_ci lit: Lit::Bool { 96fad3a1d3Sopenharmony_ci value: false, 97fad3a1d3Sopenharmony_ci }, 98fad3a1d3Sopenharmony_ci }), 99fad3a1d3Sopenharmony_ci ], 100fad3a1d3Sopenharmony_ci }, 101fad3a1d3Sopenharmony_ci Token![|], 102fad3a1d3Sopenharmony_ci Pat::Ident { 103fad3a1d3Sopenharmony_ci ident: "None", 104fad3a1d3Sopenharmony_ci }, 105fad3a1d3Sopenharmony_ci ], 106fad3a1d3Sopenharmony_ci } 107fad3a1d3Sopenharmony_ci "###); 108fad3a1d3Sopenharmony_ci 109fad3a1d3Sopenharmony_ci let boxed_pat: Box<Pat> = parse_quote!(Some(false) | None); 110fad3a1d3Sopenharmony_ci assert_eq!(*boxed_pat, pat); 111fad3a1d3Sopenharmony_ci} 112fad3a1d3Sopenharmony_ci 113fad3a1d3Sopenharmony_ci#[test] 114fad3a1d3Sopenharmony_cifn test_punctuated() { 115fad3a1d3Sopenharmony_ci let punctuated: Punctuated<Lit, Token![|]> = parse_quote!(true | true); 116fad3a1d3Sopenharmony_ci snapshot!(punctuated, @r###" 117fad3a1d3Sopenharmony_ci [ 118fad3a1d3Sopenharmony_ci Lit::Bool { 119fad3a1d3Sopenharmony_ci value: true, 120fad3a1d3Sopenharmony_ci }, 121fad3a1d3Sopenharmony_ci Token![|], 122fad3a1d3Sopenharmony_ci Lit::Bool { 123fad3a1d3Sopenharmony_ci value: true, 124fad3a1d3Sopenharmony_ci }, 125fad3a1d3Sopenharmony_ci ] 126fad3a1d3Sopenharmony_ci "###); 127fad3a1d3Sopenharmony_ci 128fad3a1d3Sopenharmony_ci let punctuated: Punctuated<Lit, Token![|]> = parse_quote!(true | true |); 129fad3a1d3Sopenharmony_ci snapshot!(punctuated, @r###" 130fad3a1d3Sopenharmony_ci [ 131fad3a1d3Sopenharmony_ci Lit::Bool { 132fad3a1d3Sopenharmony_ci value: true, 133fad3a1d3Sopenharmony_ci }, 134fad3a1d3Sopenharmony_ci Token![|], 135fad3a1d3Sopenharmony_ci Lit::Bool { 136fad3a1d3Sopenharmony_ci value: true, 137fad3a1d3Sopenharmony_ci }, 138fad3a1d3Sopenharmony_ci Token![|], 139fad3a1d3Sopenharmony_ci ] 140fad3a1d3Sopenharmony_ci "###); 141fad3a1d3Sopenharmony_ci} 142fad3a1d3Sopenharmony_ci 143fad3a1d3Sopenharmony_ci#[test] 144fad3a1d3Sopenharmony_cifn test_vec_stmt() { 145fad3a1d3Sopenharmony_ci let stmts: Vec<Stmt> = parse_quote! { 146fad3a1d3Sopenharmony_ci let _; 147fad3a1d3Sopenharmony_ci true 148fad3a1d3Sopenharmony_ci }; 149fad3a1d3Sopenharmony_ci snapshot!(stmts, @r###" 150fad3a1d3Sopenharmony_ci [ 151fad3a1d3Sopenharmony_ci Stmt::Local { 152fad3a1d3Sopenharmony_ci pat: Pat::Wild, 153fad3a1d3Sopenharmony_ci }, 154fad3a1d3Sopenharmony_ci Stmt::Expr( 155fad3a1d3Sopenharmony_ci Expr::Lit { 156fad3a1d3Sopenharmony_ci lit: Lit::Bool { 157fad3a1d3Sopenharmony_ci value: true, 158fad3a1d3Sopenharmony_ci }, 159fad3a1d3Sopenharmony_ci }, 160fad3a1d3Sopenharmony_ci None, 161fad3a1d3Sopenharmony_ci ), 162fad3a1d3Sopenharmony_ci ] 163fad3a1d3Sopenharmony_ci "###); 164fad3a1d3Sopenharmony_ci} 165