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