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