|  | 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<P>(parent_span: P) | 
|  | where | 
|  | P: Into<Option<Id>>, | 
|  | { | 
|  | } | 
|  |  | 
|  | #[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(); | 
|  | } |