| 1 | mod common; |
| 2 | |
| 3 | use common::*; |
| 4 | use tracing_core::{ |
| 5 | dispatcher::{self, Dispatch}, |
| 6 | subscriber::NoSubscriber, |
| 7 | }; |
| 8 | |
| 9 | /// This test reproduces the following issues: |
| 10 | /// - https://github.com/tokio-rs/tracing/issues/2587 |
| 11 | /// - https://github.com/tokio-rs/tracing/issues/2411 |
| 12 | /// - https://github.com/tokio-rs/tracing/issues/2436 |
| 13 | #[test] |
| 14 | fn local_dispatch_before_init() { |
| 15 | dispatcher::get_default(|current| assert!(dbg!(current).is::<NoSubscriber>())); |
| 16 | |
| 17 | // Temporarily override the default dispatcher with a scoped dispatcher. |
| 18 | // Using a scoped dispatcher makes the thread local state attempt to cache |
| 19 | // the scoped default. |
| 20 | #[cfg (feature = "std" )] |
| 21 | { |
| 22 | dispatcher::with_default(&Dispatch::new(TestSubscriberB), || { |
| 23 | dispatcher::get_default(|current| { |
| 24 | assert!( |
| 25 | dbg!(current).is::<TestSubscriberB>(), |
| 26 | "overriden subscriber not set" , |
| 27 | ); |
| 28 | }) |
| 29 | }) |
| 30 | } |
| 31 | |
| 32 | dispatcher::get_default(|current| assert!(current.is::<NoSubscriber>())); |
| 33 | |
| 34 | dispatcher::set_global_default(Dispatch::new(TestSubscriberA)) |
| 35 | .expect("set global dispatch failed" ); |
| 36 | |
| 37 | dispatcher::get_default(|current| { |
| 38 | assert!( |
| 39 | dbg!(current).is::<TestSubscriberA>(), |
| 40 | "default subscriber not set" |
| 41 | ); |
| 42 | }); |
| 43 | } |
| 44 | |