use std::sync::{Mutex, OnceLock};
static LINES: OnceLock<Mutex<Vec<(log::Level, String)>>> = OnceLock::new();
fn captured() -> &'static Mutex<Vec<(log::Level, String)>> {
LINES.get_or_init(|| Mutex::new(Vec::new()))
}
fn sink(level: log::Level, line: &str) {
captured().lock().unwrap().push((level, line.to_string()));
}
#[test]
fn default_logger_formats_routes_and_filters() {
day_core::set_log_sink(sink);
day_core::init_logging();
day_core::set_log_level(log::LevelFilter::Info);
log::warn!("bundled font {} is unreadable", "Inter.ttf");
log::info!("hello");
log::debug!("filtered out at Info");
let lines = captured().lock().unwrap().clone();
let rendered: Vec<&str> = lines.iter().map(|(_, l)| l.as_str()).collect();
assert!(
rendered.contains(&"WARN logging_smoke: bundled font Inter.ttf is unreadable"),
"unexpected lines: {rendered:?}"
);
assert!(rendered.contains(&"INFO logging_smoke: hello"));
assert!(
!rendered.iter().any(|l| l.contains("filtered out")),
"{rendered:?}"
);
assert!(lines.iter().any(|(lv, _)| *lv == log::Level::Warn));
}