123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #![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(event::mock().at_level(Level::INFO))
- .event(event::mock().at_level(Level::WARN))
- .event(event::mock().at_level(Level::ERROR))
- .done()
- .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(event::mock().at_level(Level::INFO))
- .event(event::mock().at_level(Level::DEBUG))
- .event(event::mock().at_level(Level::WARN))
- .event(event::mock().at_level(Level::ERROR))
- .done()
- .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();
- }
|