blob: 71b67f851f435c0fc4e9c8fb1cb5508111c412d3 [file] [log] [blame]
mod common;
use common::*;
use tracing_core::{
dispatcher::{self, Dispatch},
subscriber::NoSubscriber,
};
/// This test reproduces the following issues:
/// - https://github.com/tokio-rs/tracing/issues/2587
/// - https://github.com/tokio-rs/tracing/issues/2411
/// - https://github.com/tokio-rs/tracing/issues/2436
#[test]
fn local_dispatch_before_init() {
dispatcher::get_default(|current| assert!(dbg!(current).is::<NoSubscriber>()));
// Temporarily override the default dispatcher with a scoped dispatcher.
// Using a scoped dispatcher makes the thread local state attempt to cache
// the scoped default.
#[cfg(feature = "std")]
{
dispatcher::with_default(&Dispatch::new(TestSubscriberB), || {
dispatcher::get_default(|current| {
assert!(
dbg!(current).is::<TestSubscriberB>(),
"overriden subscriber not set",
);
})
})
}
dispatcher::get_default(|current| assert!(current.is::<NoSubscriber>()));
dispatcher::set_global_default(Dispatch::new(TestSubscriberA))
.expect("set global dispatch failed");
dispatcher::get_default(|current| {
assert!(
dbg!(current).is::<TestSubscriberA>(),
"default subscriber not set"
);
});
}