| #![cfg(feature = "std")] |
| |
| use tracing::Level; |
| use tracing_mock::*; |
| |
| #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)] |
| #[test] |
| fn multiple_max_level_hints() { |
| // This test ensures that when multiple subscribers are active, their max |
| // level hints are handled correctly. The global max level should be the |
| // maximum of the level filters returned by the two `Subscriber`'s |
| // `max_level_hint` method. |
| // |
| // In this test, we create a subscriber whose max level is `INFO`, and |
| // another whose max level is `DEBUG`. We then add an assertion to both of |
| // those subscribers' `enabled` method that no metadata for `TRACE` spans or |
| // events are filtered, since they are disabled by the global max filter. |
| |
| fn do_events() { |
| tracing::info!("doing a thing that you might care about"); |
| tracing::debug!("charging turboencabulator with interocitor"); |
| tracing::warn!("extremely serious warning, pay attention"); |
| tracing::trace!("interocitor charge level is 10%"); |
| tracing::error!("everything is on fire"); |
| } |
| |
| let (subscriber1, handle1) = subscriber::mock() |
| .named("subscriber1") |
| .with_max_level_hint(Level::INFO) |
| .with_filter(|meta| { |
| let level = dbg!(meta.level()); |
| assert!( |
| level <= &Level::DEBUG, |
| "a TRACE event was dynamically filtered by subscriber1" |
| ); |
| level <= &Level::INFO |
| }) |
| .event(expect::event().at_level(Level::INFO)) |
| .event(expect::event().at_level(Level::WARN)) |
| .event(expect::event().at_level(Level::ERROR)) |
| .only() |
| .run_with_handle(); |
| let (subscriber2, handle2) = subscriber::mock() |
| .named("subscriber2") |
| .with_max_level_hint(Level::DEBUG) |
| .with_filter(|meta| { |
| let level = dbg!(meta.level()); |
| assert!( |
| level <= &Level::DEBUG, |
| "a TRACE event was dynamically filtered by subscriber2" |
| ); |
| level <= &Level::DEBUG |
| }) |
| .event(expect::event().at_level(Level::INFO)) |
| .event(expect::event().at_level(Level::DEBUG)) |
| .event(expect::event().at_level(Level::WARN)) |
| .event(expect::event().at_level(Level::ERROR)) |
| .only() |
| .run_with_handle(); |
| |
| let dispatch1 = tracing::Dispatch::new(subscriber1); |
| |
| tracing::dispatcher::with_default(&dispatch1, do_events); |
| handle1.assert_finished(); |
| |
| let dispatch2 = tracing::Dispatch::new(subscriber2); |
| tracing::dispatcher::with_default(&dispatch2, do_events); |
| handle2.assert_finished(); |
| } |