1 #![allow(
2     clippy::shadow_unrelated,
3     clippy::too_many_lines,
4     clippy::uninlined_format_args
5 )]
6 
7 #[macro_use]
8 mod macros;
9 
10 use syn::{Meta, MetaList, MetaNameValue};
11 
12 #[test]
test_parse_meta_item_word()13 fn test_parse_meta_item_word() {
14     let input = "hello";
15 
16     snapshot!(input as Meta, @r###"
17     Meta::Path {
18         segments: [
19             PathSegment {
20                 ident: "hello",
21             },
22         ],
23     }
24     "###);
25 }
26 
27 #[test]
test_parse_meta_name_value()28 fn test_parse_meta_name_value() {
29     let input = "foo = 5";
30     let (inner, meta) = (input, input);
31 
32     snapshot!(inner as MetaNameValue, @r###"
33     MetaNameValue {
34         path: Path {
35             segments: [
36                 PathSegment {
37                     ident: "foo",
38                 },
39             ],
40         },
41         value: Expr::Lit {
42             lit: 5,
43         },
44     }
45     "###);
46 
47     snapshot!(meta as Meta, @r###"
48     Meta::NameValue {
49         path: Path {
50             segments: [
51                 PathSegment {
52                     ident: "foo",
53                 },
54             ],
55         },
56         value: Expr::Lit {
57             lit: 5,
58         },
59     }
60     "###);
61 
62     assert_eq!(meta, inner.into());
63 }
64 
65 #[test]
test_parse_meta_item_list_lit()66 fn test_parse_meta_item_list_lit() {
67     let input = "foo(5)";
68     let (inner, meta) = (input, input);
69 
70     snapshot!(inner as MetaList, @r###"
71     MetaList {
72         path: Path {
73             segments: [
74                 PathSegment {
75                     ident: "foo",
76                 },
77             ],
78         },
79         delimiter: MacroDelimiter::Paren,
80         tokens: TokenStream(`5`),
81     }
82     "###);
83 
84     snapshot!(meta as Meta, @r###"
85     Meta::List {
86         path: Path {
87             segments: [
88                 PathSegment {
89                     ident: "foo",
90                 },
91             ],
92         },
93         delimiter: MacroDelimiter::Paren,
94         tokens: TokenStream(`5`),
95     }
96     "###);
97 
98     assert_eq!(meta, inner.into());
99 }
100 
101 #[test]
test_parse_meta_item_multiple()102 fn test_parse_meta_item_multiple() {
103     let input = "foo(word, name = 5, list(name2 = 6), word2)";
104     let (inner, meta) = (input, input);
105 
106     snapshot!(inner as MetaList, @r###"
107     MetaList {
108         path: Path {
109             segments: [
110                 PathSegment {
111                     ident: "foo",
112                 },
113             ],
114         },
115         delimiter: MacroDelimiter::Paren,
116         tokens: TokenStream(`word , name = 5 , list (name2 = 6) , word2`),
117     }
118     "###);
119 
120     snapshot!(meta as Meta, @r###"
121     Meta::List {
122         path: Path {
123             segments: [
124                 PathSegment {
125                     ident: "foo",
126                 },
127             ],
128         },
129         delimiter: MacroDelimiter::Paren,
130         tokens: TokenStream(`word , name = 5 , list (name2 = 6) , word2`),
131     }
132     "###);
133 
134     assert_eq!(meta, inner.into());
135 }
136 
137 #[test]
test_parse_path()138 fn test_parse_path() {
139     let input = "::serde::Serialize";
140     snapshot!(input as Meta, @r###"
141     Meta::Path {
142         leading_colon: Some,
143         segments: [
144             PathSegment {
145                 ident: "serde",
146             },
147             Token![::],
148             PathSegment {
149                 ident: "Serialize",
150             },
151         ],
152     }
153     "###);
154 }
155