1 #[cfg(not(lib_build))]
2 #[macro_use]
3 extern crate log;
4
5 macro_rules! all_log_macros {
6 ($($arg:tt)*) => ({
7 trace!($($arg)*);
8 debug!($($arg)*);
9 info!($($arg)*);
10 warn!($($arg)*);
11 error!($($arg)*);
12 });
13 }
14
15 #[test]
no_args()16 fn no_args() {
17 for lvl in log::Level::iter() {
18 log!(lvl, "hello");
19 log!(lvl, "hello",);
20
21 log!(target: "my_target", lvl, "hello");
22 log!(target: "my_target", lvl, "hello",);
23
24 log!(lvl, "hello");
25 log!(lvl, "hello",);
26 }
27
28 all_log_macros!("hello");
29 all_log_macros!("hello",);
30
31 all_log_macros!(target: "my_target", "hello");
32 all_log_macros!(target: "my_target", "hello",);
33 }
34
35 #[test]
anonymous_args()36 fn anonymous_args() {
37 for lvl in log::Level::iter() {
38 log!(lvl, "hello {}", "world");
39 log!(lvl, "hello {}", "world",);
40
41 log!(target: "my_target", lvl, "hello {}", "world");
42 log!(target: "my_target", lvl, "hello {}", "world",);
43
44 log!(lvl, "hello {}", "world");
45 log!(lvl, "hello {}", "world",);
46 }
47
48 all_log_macros!("hello {}", "world");
49 all_log_macros!("hello {}", "world",);
50
51 all_log_macros!(target: "my_target", "hello {}", "world");
52 all_log_macros!(target: "my_target", "hello {}", "world",);
53 }
54
55 #[test]
named_args()56 fn named_args() {
57 for lvl in log::Level::iter() {
58 log!(lvl, "hello {world}", world = "world");
59 log!(lvl, "hello {world}", world = "world",);
60
61 log!(target: "my_target", lvl, "hello {world}", world = "world");
62 log!(target: "my_target", lvl, "hello {world}", world = "world",);
63
64 log!(lvl, "hello {world}", world = "world");
65 log!(lvl, "hello {world}", world = "world",);
66 }
67
68 all_log_macros!("hello {world}", world = "world");
69 all_log_macros!("hello {world}", world = "world",);
70
71 all_log_macros!(target: "my_target", "hello {world}", world = "world");
72 all_log_macros!(target: "my_target", "hello {world}", world = "world",);
73 }
74
75 #[test]
enabled()76 fn enabled() {
77 for lvl in log::Level::iter() {
78 let _enabled = if log_enabled!(target: "my_target", lvl) {
79 true
80 } else {
81 false
82 };
83 }
84 }
85
86 #[test]
expr()87 fn expr() {
88 for lvl in log::Level::iter() {
89 let _ = log!(lvl, "hello");
90 }
91 }
92
93 #[test]
94 #[cfg(feature = "kv_unstable")]
kv_no_args()95 fn kv_no_args() {
96 for lvl in log::Level::iter() {
97 log!(target: "my_target", lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello");
98
99 log!(lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello");
100 }
101
102 all_log_macros!(target: "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello");
103 all_log_macros!(target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello");
104 all_log_macros!(cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello");
105 }
106
107 #[test]
108 #[cfg(feature = "kv_unstable")]
kv_expr_args()109 fn kv_expr_args() {
110 for lvl in log::Level::iter() {
111 log!(target: "my_target", lvl, cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
112
113 log!(lvl, target = "my_target", cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
114 log!(lvl, cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
115 }
116
117 all_log_macros!(target: "my_target", cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
118 all_log_macros!(target = "my_target", cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
119 all_log_macros!(cat_math = { let mut x = 0; x += 1; x + 1 }; "hello");
120 }
121
122 #[test]
123 #[cfg(feature = "kv_unstable")]
kv_anonymous_args()124 fn kv_anonymous_args() {
125 for lvl in log::Level::iter() {
126 log!(target: "my_target", lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
127 log!(lvl, target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
128
129 log!(lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
130 }
131
132 all_log_macros!(target: "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
133 all_log_macros!(target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
134 all_log_macros!(cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {}", "world");
135 }
136
137 #[test]
138 #[cfg(feature = "kv_unstable")]
kv_named_args()139 fn kv_named_args() {
140 for lvl in log::Level::iter() {
141 log!(target: "my_target", lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
142 log!(lvl, target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
143
144 log!(lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
145 }
146
147 all_log_macros!(target: "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
148 all_log_macros!(target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
149 all_log_macros!(cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}", world = "world");
150 }
151
152 #[test]
153 #[cfg(feature = "kv_unstable")]
kv_expr_context()154 fn kv_expr_context() {
155 match "chashu" {
156 cat_1 => {
157 info!(target: "target", cat_1 = cat_1, cat_2 = "nori"; "hello {}", "cats")
158 }
159 };
160 }
161
162 #[test]
implicit_named_args()163 fn implicit_named_args() {
164 #[rustversion::since(1.58)]
165 fn _check() {
166 let world = "world";
167
168 for lvl in log::Level::iter() {
169 log!(lvl, "hello {world}");
170 log!(lvl, "hello {world}",);
171
172 log!(target: "my_target", lvl, "hello {world}");
173 log!(target: "my_target", lvl, "hello {world}",);
174
175 log!(lvl, "hello {world}");
176 log!(lvl, "hello {world}",);
177 }
178
179 all_log_macros!("hello {world}");
180 all_log_macros!("hello {world}",);
181
182 all_log_macros!(target: "my_target", "hello {world}");
183 all_log_macros!(target: "my_target", "hello {world}",);
184
185 all_log_macros!(target = "my_target"; "hello {world}");
186 all_log_macros!(target = "my_target"; "hello {world}",);
187 }
188 }
189
190 #[test]
191 #[cfg(feature = "kv_unstable")]
kv_implicit_named_args()192 fn kv_implicit_named_args() {
193 #[rustversion::since(1.58)]
194 fn _check() {
195 let world = "world";
196
197 for lvl in log::Level::iter() {
198 log!(target: "my_target", lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}");
199
200 log!(lvl, cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}");
201 }
202
203 all_log_macros!(target: "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}");
204 all_log_macros!(target = "my_target", cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}");
205 all_log_macros!(cat_1 = "chashu", cat_2 = "nori", cat_count = 2; "hello {world}");
206 }
207 }
208
209 #[test]
210 #[cfg(feature = "kv_unstable")]
kv_string_keys()211 fn kv_string_keys() {
212 for lvl in log::Level::iter() {
213 log!(target: "my_target", lvl, "also dogs" = "Fílos", "key/that-can't/be/an/ident" = "hi"; "hello {world}", world = "world");
214 }
215
216 all_log_macros!(target: "my_target", "also dogs" = "Fílos", "key/that-can't/be/an/ident" = "hi"; "hello {world}", world = "world");
217 }
218
219 #[test]
220 #[cfg(feature = "kv_unstable")]
kv_common_value_types()221 fn kv_common_value_types() {
222 all_log_macros!(
223 u8 = 42u8,
224 u16 = 42u16,
225 u32 = 42u32,
226 u64 = 42u64,
227 u128 = 42u128,
228 i8 = -42i8,
229 i16 = -42i16,
230 i32 = -42i32,
231 i64 = -42i64,
232 i128 = -42i128,
233 f32 = 4.2f32,
234 f64 = -4.2f64,
235 bool = true,
236 str = "string";
237 "hello world"
238 );
239 }
240
241 /// Some and None (from Option) are used in the macros.
242 #[derive(Debug)]
243 enum Type {
244 Some,
245 None,
246 }
247
248 #[test]
regression_issue_494()249 fn regression_issue_494() {
250 use self::Type::*;
251 all_log_macros!("some message: {:?}, {:?}", None, Some);
252 }
253