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