Skip to content

Commit f18105d

Browse files
committed
More readable logging macros unit test syntax_and_records
1 parent 015899f commit f18105d

File tree

2 files changed

+120
-152
lines changed

2 files changed

+120
-152
lines changed

spdlog/src/log_macros.rs

+116-152
Original file line numberDiff line numberDiff line change
@@ -244,161 +244,125 @@ mod tests {
244244
write!(f, "display")
245245
}
246246
}
247+
let (int, mod1, mod2) = (114514, Mods, Mods);
248+
249+
const LEVEL_ARG: Level = Level::Info;
250+
251+
let assert_records = |kv: &[(&'static str, &str)], payload| {
252+
let records = test_sink.records();
253+
assert_eq!(records.len(), Level::count() + 1);
254+
test_sink.clear();
255+
256+
records
257+
.into_iter()
258+
.zip([
259+
LEVEL_ARG,
260+
Level::Trace,
261+
Level::Debug,
262+
Level::Info,
263+
Level::Warn,
264+
Level::Error,
265+
Level::Critical,
266+
])
267+
.for_each(|(record, expected_level)| {
268+
assert_eq!(record.level(), expected_level);
269+
assert_eq!(
270+
record
271+
.key_values()
272+
.into_iter()
273+
.map(|(k, v)| (k.inner(), v.to_string()))
274+
.collect::<Vec<_>>(),
275+
kv.into_iter()
276+
.map(|(k, v)| (KeyInner::StaticStr(k), v.to_string()))
277+
.collect::<Vec<_>>()
278+
);
279+
assert_eq!(record.payload(), payload);
280+
});
281+
};
247282

248-
let mut check = vec![
249-
(vec![], Level::Info, "logger".to_string()),
250-
(vec![], Level::Error, "logger, kv(0)".to_string()),
251-
(
252-
vec![(KeyInner::StaticStr("kn"), "114514".to_string())],
253-
Level::Warn,
254-
"logger, kv(1)".to_string(),
255-
),
256-
(
257-
vec![
258-
(KeyInner::StaticStr("kn"), "114514".to_string()),
259-
(KeyInner::StaticStr("kdi"), "display".to_string()),
260-
(KeyInner::StaticStr("kde"), "debug".to_string()),
261-
],
262-
Level::Critical,
263-
"logger, kv(2)".to_string(),
264-
),
265-
(
266-
vec![(KeyInner::StaticStr("n"), "114514".to_string())],
267-
Level::Trace,
268-
"logger, kv(1,vref)".to_string(),
269-
),
270-
(
271-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
272-
Level::Debug,
273-
"logger, kv(mod,vref)".to_string(),
274-
),
275-
(
276-
vec![
277-
(KeyInner::StaticStr("n"), "114514".to_string()),
278-
(KeyInner::StaticStr("mod_di"), "display".to_string()),
279-
(KeyInner::StaticStr("mod_de"), "debug".to_string()),
280-
],
281-
Level::Info,
282-
"logger, kv(s,mod,vref)".to_string(),
283-
),
284-
(
285-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
286-
Level::Debug,
287-
"arbitrary order = logger, fmt, kv".to_string(),
288-
),
289-
(
290-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
291-
Level::Debug,
292-
"arbitrary order = fmt, logger, kv".to_string(),
293-
),
294-
];
295-
296-
log!(logger: test, Level::Info, "logger");
297-
log!(logger: test, kv: {}, Level::Error, "logger, kv(0)");
298-
log!(logger: test, kv: { kn = 114514 }, Level::Warn, "logger, kv(1)");
299-
log!(logger: test, kv: { kn = 114514, kdi: = Mods, kde:? = Mods }, Level::Critical, "logger, kv(2)");
300-
301-
let (n, mod_di, mod_de) = (114514, Mods, Mods);
302-
log!(logger: test, kv: { n }, Level::Trace, "logger, kv(1,vref)");
303-
log!(logger: test, kv: { mod_di: }, Level::Debug, "logger, kv(mod,vref)");
304-
log!(logger: test, kv: { n, mod_di:, mod_de:? }, Level::Info, "logger, kv(s,mod,vref)");
305-
log!(logger: test, Level::Debug, "arbitrary order = logger, fmt, kv", kv: { mod_di: });
306-
log!(Level::Debug, "arbitrary order = fmt, logger, kv", logger: test, kv: { mod_di: });
307-
308-
macro_rules! add_records {
309-
( $($level:ident => $variant:ident),+ ) => {
310-
$(
311-
$level!(logger: test, "{}: logger", stringify!($level));
312-
check.push((vec![], Level::$variant, format!("{}: logger", stringify!($level))));
313-
314-
$level!(logger: test, kv: {}, "{}: logger, kv(0)", stringify!($level));
315-
check.push((vec![], Level::$variant, format!("{}: logger, kv(0)", stringify!($level))));
316-
317-
$level!(logger: test, kv: { kn = 114514 }, "{}: logger, kv(1)", stringify!($level));
318-
check.push((
319-
vec![(KeyInner::StaticStr("kn"), "114514".to_string())],
320-
Level::$variant,
321-
format!("{}: logger, kv(1)", stringify!($level))
322-
));
323-
324-
$level!(logger: test, kv: { kn = 114514, kdi: = Mods, kde:? = Mods }, "{}: logger, kv(s,mod)", stringify!($level));
325-
check.push((
326-
vec![
327-
(KeyInner::StaticStr("kn"), "114514".to_string()),
328-
(KeyInner::StaticStr("kdi"), "display".to_string()),
329-
(KeyInner::StaticStr("kde"), "debug".to_string()),
330-
],
331-
Level::$variant,
332-
format!("{}: logger, kv(s,mod)", stringify!($level))
333-
));
334-
335-
$level!(logger: test, kv: { n }, "{}: logger, kv(1,vref)", stringify!($level));
336-
check.push((
337-
vec![(KeyInner::StaticStr("n"), "114514".to_string())],
338-
Level::$variant,
339-
format!("{}: logger, kv(1,vref)", stringify!($level))
340-
));
341-
342-
$level!(logger: test, kv: { mod_di: }, "{}: logger, kv(mod,vref)", stringify!($level));
343-
check.push((
344-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
345-
Level::$variant,
346-
format!("{}: logger, kv(mod,vref)", stringify!($level))
347-
));
348-
349-
$level!(logger: test, kv: { n, mod_di:, mod_de:? }, "{}: logger, kv(s,mod,vref)", stringify!($level));
350-
check.push((
351-
vec![
352-
(KeyInner::StaticStr("n"), "114514".to_string()),
353-
(KeyInner::StaticStr("mod_di"), "display".to_string()),
354-
(KeyInner::StaticStr("mod_de"), "debug".to_string()),
355-
],
356-
Level::$variant,
357-
format!("{}: logger, kv(s,mod,vref)", stringify!($level))
358-
));
359-
360-
$level!(logger: test, "{}: arbitrary order = logger, fmt, kv", stringify!($level), kv: { mod_di: });
361-
check.push((
362-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
363-
Level::$variant,
364-
format!("{}: arbitrary order = logger, fmt, kv", stringify!($level))
365-
));
366-
367-
$level!("{}: arbitrary order = fmt, logger, kv", stringify!($level), logger: test, kv: { mod_di: });
368-
check.push((
369-
vec![(KeyInner::StaticStr("mod_di"), "display".to_string())],
370-
Level::$variant,
371-
format!("{}: arbitrary order = fmt, logger, kv", stringify!($level))
372-
));
373-
)+
374-
};
375-
}
376-
add_records!(
377-
critical => Critical,
378-
error => Error,
379-
warn => Warn,
380-
info => Info,
381-
debug => Debug,
382-
trace => Trace
283+
log!(logger: test, LEVEL_ARG, "logger param only");
284+
trace!(logger: test, "logger param only");
285+
debug!(logger: test, "logger param only");
286+
info!(logger: test, "logger param only");
287+
warn!(logger: test, "logger param only");
288+
error!(logger: test, "logger param only");
289+
critical!(logger: test, "logger param only");
290+
assert_records(&[], "logger param only");
291+
292+
log!(logger: test, kv: {}, LEVEL_ARG, "empty kv param");
293+
trace!(logger: test, kv: {}, "empty kv param");
294+
debug!(logger: test, kv: {}, "empty kv param");
295+
info!(logger: test, kv: {}, "empty kv param");
296+
warn!(logger: test, kv: {}, "empty kv param");
297+
error!(logger: test, kv: {}, "empty kv param");
298+
critical!(logger: test, kv: {}, "empty kv param");
299+
assert_records(&[], "empty kv param");
300+
301+
log!(logger: test, kv: { int = 114514 }, LEVEL_ARG, "kv capture value directly");
302+
trace!(logger: test, kv: { int = 114514 }, "kv capture value directly");
303+
debug!(logger: test, kv: { int = 114514 }, "kv capture value directly");
304+
info!(logger: test, kv: { int = 114514 }, "kv capture value directly");
305+
warn!(logger: test, kv: { int = 114514 }, "kv capture value directly");
306+
error!(logger: test, kv: { int = 114514 }, "kv capture value directly");
307+
critical!(logger: test, kv: { int = 114514 }, "kv capture value directly");
308+
assert_records(&[("int", "114514")], "kv capture value directly");
309+
310+
log!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, LEVEL_ARG, "kv capture value using modifiers");
311+
trace!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
312+
debug!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
313+
info!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
314+
warn!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
315+
error!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
316+
critical!(logger: test, kv: { int = 114514, mod1: = Mods, mod2:? = Mods }, "kv capture value using modifiers");
317+
assert_records(
318+
&[("int", "114514"), ("mod1", "display"), ("mod2", "debug")],
319+
"kv capture value using modifiers",
320+
);
321+
322+
log!(logger: test, kv: { int }, LEVEL_ARG, "kv shorthand");
323+
trace!(logger: test, kv: { int }, "kv shorthand");
324+
debug!(logger: test, kv: { int }, "kv shorthand");
325+
info!(logger: test, kv: { int }, "kv shorthand");
326+
warn!(logger: test, kv: { int }, "kv shorthand");
327+
error!(logger: test, kv: { int }, "kv shorthand");
328+
critical!(logger: test, kv: { int }, "kv shorthand");
329+
assert_records(&[("int", "114514")], "kv shorthand");
330+
331+
log!(logger: test, kv: { int, mod1:, mod2:? }, LEVEL_ARG, "kv shorthand modifiers");
332+
trace!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
333+
debug!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
334+
info!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
335+
warn!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
336+
error!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
337+
critical!(logger: test, kv: { int, mod1:, mod2:? }, "kv shorthand modifiers");
338+
assert_records(
339+
&[("int", "114514"), ("mod1", "display"), ("mod2", "debug")],
340+
"kv shorthand modifiers",
383341
);
384342

385-
let records = test_sink.records();
386-
let from_sink = records
387-
.iter()
388-
.map(|record| {
389-
(
390-
record
391-
.key_values()
392-
.into_iter()
393-
.map(|(k, v)| (k.inner(), v.to_string()))
394-
.collect::<Vec<_>>(),
395-
record.level(),
396-
record.payload().to_string(),
397-
)
398-
})
399-
.collect::<Vec<_>>();
400-
401-
assert_eq!(check, from_sink);
343+
log!(logger: test, LEVEL_ARG, "params arbitrary order: logger, format, kv", kv: { mod1: });
344+
trace!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
345+
debug!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
346+
info!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
347+
warn!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
348+
error!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
349+
critical!(logger: test, "params arbitrary order: logger, format, kv", kv: { mod1: });
350+
assert_records(
351+
&[("mod1", "display")],
352+
"params arbitrary order: logger, format, kv",
353+
);
354+
355+
log!(LEVEL_ARG, "params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
356+
trace!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
357+
debug!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
358+
info!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
359+
warn!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
360+
error!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
361+
critical!("params arbitrary order = format, kv, logger", kv: { mod1:? }, logger: test);
362+
assert_records(
363+
&[("mod1", "debug")],
364+
"params arbitrary order = format, kv, logger",
365+
);
402366
}
403367

404368
#[test]

spdlog/src/test_utils/common.rs

+4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ impl TestSink {
6464
self.records.lock().unwrap().clone()
6565
}
6666

67+
pub fn clear(&self) {
68+
self.records.lock().unwrap().clear();
69+
}
70+
6771
#[must_use]
6872
pub fn payloads(&self) -> Vec<String> {
6973
self.records

0 commit comments

Comments
 (0)