use tracing::{subscriber::with_default, Id, Level}; use tracing_attributes::instrument; use tracing_mock::*; #[instrument] fn with_default_parent() {} #[instrument(parent = parent_span, skip(parent_span))] fn with_explicit_parent

(parent_span: P) where P: Into>, { } #[test] fn default_parent_test() { let contextual_parent = expect::span().named("contextual_parent"); let child = expect::span().named("with_default_parent"); let (subscriber, handle) = subscriber::mock() .new_span( contextual_parent .clone() .with_contextual_parent(None) .with_explicit_parent(None), ) .new_span( child .clone() .with_contextual_parent(Some("contextual_parent")) .with_explicit_parent(None), ) .enter(child.clone()) .exit(child.clone()) .enter(contextual_parent.clone()) .new_span( child .clone() .with_contextual_parent(Some("contextual_parent")) .with_explicit_parent(None), ) .enter(child.clone()) .exit(child) .exit(contextual_parent) .only() .run_with_handle(); with_default(subscriber, || { let contextual_parent = tracing::span!(Level::TRACE, "contextual_parent"); with_default_parent(); contextual_parent.in_scope(|| { with_default_parent(); }); }); handle.assert_finished(); } #[test] fn explicit_parent_test() { let contextual_parent = expect::span().named("contextual_parent"); let explicit_parent = expect::span().named("explicit_parent"); let child = expect::span().named("with_explicit_parent"); let (subscriber, handle) = subscriber::mock() .new_span( contextual_parent .clone() .with_contextual_parent(None) .with_explicit_parent(None), ) .new_span( explicit_parent .with_contextual_parent(None) .with_explicit_parent(None), ) .enter(contextual_parent.clone()) .new_span( child .clone() .with_contextual_parent(Some("contextual_parent")) .with_explicit_parent(Some("explicit_parent")), ) .enter(child.clone()) .exit(child) .exit(contextual_parent) .only() .run_with_handle(); with_default(subscriber, || { let contextual_parent = tracing::span!(Level::INFO, "contextual_parent"); let explicit_parent = tracing::span!(Level::INFO, "explicit_parent"); contextual_parent.in_scope(|| { with_explicit_parent(&explicit_parent); }); }); handle.assert_finished(); }