1 #[macro_use]
2 mod macros;
3
4 use syn::punctuated::Punctuated;
5 use syn::{parse_quote, Attribute, Field, Lit, Pat, Stmt, Token};
6
7 #[test]
test_attribute()8 fn 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]
test_field()39 fn 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 Token![::],
69 PathSegment {
70 ident: "bool",
71 },
72 ],
73 },
74 },
75 }
76 "###);
77 }
78
79 #[test]
test_pat()80 fn test_pat() {
81 let pat: Pat = parse_quote!(Some(false) | None);
82 snapshot!(&pat, @r###"
83 Pat::Or {
84 cases: [
85 Pat::TupleStruct {
86 path: Path {
87 segments: [
88 PathSegment {
89 ident: "Some",
90 },
91 ],
92 },
93 elems: [
94 Pat::Lit(ExprLit {
95 lit: Lit::Bool {
96 value: false,
97 },
98 }),
99 ],
100 },
101 Token![|],
102 Pat::Ident {
103 ident: "None",
104 },
105 ],
106 }
107 "###);
108
109 let boxed_pat: Box<Pat> = parse_quote!(Some(false) | None);
110 assert_eq!(*boxed_pat, pat);
111 }
112
113 #[test]
test_punctuated()114 fn test_punctuated() {
115 let punctuated: Punctuated<Lit, Token![|]> = parse_quote!(true | true);
116 snapshot!(punctuated, @r###"
117 [
118 Lit::Bool {
119 value: true,
120 },
121 Token![|],
122 Lit::Bool {
123 value: true,
124 },
125 ]
126 "###);
127
128 let punctuated: Punctuated<Lit, Token![|]> = parse_quote!(true | true |);
129 snapshot!(punctuated, @r###"
130 [
131 Lit::Bool {
132 value: true,
133 },
134 Token![|],
135 Lit::Bool {
136 value: true,
137 },
138 Token![|],
139 ]
140 "###);
141 }
142
143 #[test]
test_vec_stmt()144 fn test_vec_stmt() {
145 let stmts: Vec<Stmt> = parse_quote! {
146 let _;
147 true
148 };
149 snapshot!(stmts, @r###"
150 [
151 Stmt::Local {
152 pat: Pat::Wild,
153 },
154 Stmt::Expr(
155 Expr::Lit {
156 lit: Lit::Bool {
157 value: true,
158 },
159 },
160 None,
161 ),
162 ]
163 "###);
164 }
165