From e6f1d48fc3ca72af8cc1ff2e2b9c5921f59dec60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Antonsson?= Date: Mon, 24 Nov 2025 13:50:31 +0100 Subject: [PATCH] chore(mock): test case for layer not calling on_register_dispatch --- tracing-mock/tests/on_register_dispatch.rs | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tracing-mock/tests/on_register_dispatch.rs b/tracing-mock/tests/on_register_dispatch.rs index 02b1c15cc..33cf03520 100644 --- a/tracing-mock/tests/on_register_dispatch.rs +++ b/tracing-mock/tests/on_register_dispatch.rs @@ -61,3 +61,49 @@ fn layer_multiple_expectations() { drop(_subscriber); handle.assert_finished(); } + +#[cfg(feature = "tracing-subscriber")] +#[test] +#[should_panic(expected = "expected on_register_dispatch to be called")] +fn layer_on_register_dispatch_not_propagated() { + use tracing::error; + use tracing_mock::layer; + use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, Layer}; + + /// A layer that wraps another layer but does NOT propagate on_register_dispatch + struct BadLayer { + inner: L, + } + + impl Layer for BadLayer + where + S: tracing_core::Subscriber, + L: Layer, + { + // Intentionally NOT implementing on_register_dispatch to test the failure case + // The default implementation does nothing, so the inner layer won't receive the call + + fn on_event( + &self, + event: &tracing_core::Event<'_>, + ctx: tracing_subscriber::layer::Context<'_, S>, + ) { + self.inner.on_event(event, ctx); + } + } + + let (mock_layer, handle) = layer::named("inner") + .on_register_dispatch() + .run_with_handle(); + + let bad_layer = BadLayer { inner: mock_layer }; + + let _subscriber = tracing_subscriber::registry().with(bad_layer).set_default(); + + // This event will be sent to the mock layer, which expects on_register_dispatch first + error!("send an event"); + + drop(_subscriber); + + handle.assert_finished(); +}