1 mod test_basic {
2     struct Struct;
3 
4     paste::item! {
5         impl Struct {
6             fn [<a b c>]() {}
7         }
8     }
9 
10     #[test]
test()11     fn test() {
12         Struct::abc();
13     }
14 }
15 
16 mod test_in_impl {
17     struct Struct;
18 
19     impl Struct {
20         paste::item! {
21             fn [<a b c>]() {}
22         }
23     }
24 
25     #[test]
test()26     fn test() {
27         Struct::abc();
28     }
29 }
30 
31 #[test]
test_shared_hygiene()32 fn test_shared_hygiene() {
33     paste::expr! {
34         let [<a a>] = 1;
35         assert_eq!([<a a>], 1);
36     }
37 }
38 
39 #[test]
test_repeat()40 fn test_repeat() {
41     const ROCKET_A: &'static str = "/a";
42     const ROCKET_B: &'static str = "/b";
43 
44     macro_rules! routes {
45         ($($route:ident),*) => {{
46             paste::expr! {
47                 vec![$( [<ROCKET_ $route>] ),*]
48             }
49         }}
50     }
51 
52     let routes = routes!(A, B);
53     assert_eq!(routes, vec!["/a", "/b"]);
54 }
55 
56 #[test]
test_integer()57 fn test_integer() {
58     const CONST0: &'static str = "const0";
59 
60     let pasted = paste::expr!([<CONST 0>]);
61     assert_eq!(pasted, CONST0);
62 }
63 
64 #[test]
test_underscore()65 fn test_underscore() {
66     paste::expr! {
67         const A_B: usize = 0;
68         assert_eq!([<A _ B>], 0);
69     }
70 }
71 
72 #[test]
test_lifetime()73 fn test_lifetime() {
74     paste::expr! {
75         #[allow(dead_code)]
76         struct S<[<'d e>]> {
77             q: &[<'d e>] str,
78         }
79     }
80 }
81 
82 #[test]
test_keyword()83 fn test_keyword() {
84     paste::expr! {
85         struct [<F move>];
86 
87         let _ = Fmove;
88     }
89 }
90 
91 #[test]
test_literal_str()92 fn test_literal_str() {
93     paste::expr! {
94         struct [<Foo "Bar-Baz">];
95 
96         let _ = FooBar_Baz;
97     }
98 }
99 
100 #[test]
test_env_literal()101 fn test_env_literal() {
102     paste::expr! {
103         struct [<Lib env bar>];
104 
105         let _ = Libenvbar;
106     }
107 }
108 
109 #[test]
test_env_present()110 fn test_env_present() {
111     paste::expr! {
112         struct [<Lib env!("CARGO_PKG_NAME")>];
113 
114         let _ = Libpaste;
115     }
116 }
117 
118 #[test]
test_raw_identifier()119 fn test_raw_identifier() {
120     paste::expr! {
121         struct [<F r#move>];
122 
123         let _ = Fmove;
124     }
125 }
126 
127 #[test]
test_false_start()128 fn test_false_start() {
129     trait Trait {
130         fn f() -> usize;
131     }
132 
133     struct S;
134 
135     impl Trait for S {
136         fn f() -> usize {
137             0
138         }
139     }
140 
141     paste::expr! {
142         let x = [<S as Trait>::f()];
143         assert_eq!(x[0], 0);
144     }
145 }
146 
147 #[test]
test_local_variable()148 fn test_local_variable() {
149     let yy = 0;
150 
151     paste::expr! {
152         assert_eq!([<y y>], 0);
153     }
154 }
155 
156 mod test_none_delimited_single_ident {
157     macro_rules! m {
158         ($id:ident) => {
159             paste::item! {
160                 fn f() -> &'static str {
161                     stringify!($id)
162                 }
163             }
164         };
165     }
166 
167     m!(i32x4);
168 
169     #[test]
test()170     fn test() {
171         assert_eq!(f(), "i32x4");
172     }
173 }
174