mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-17 00:53:04 +00:00
60 lines
1.8 KiB
Rust
60 lines
1.8 KiB
Rust
// These tests require the thread-local scoped dispatcher, which only works when
|
|
// we have a standard library. The behaviour being tested should be the same
|
|
// with the standard lib disabled.
|
|
#![cfg(feature = "std")]
|
|
|
|
use std::{future::Future, pin::Pin, task};
|
|
|
|
use futures::FutureExt as _;
|
|
use tracing::{subscriber::with_default, Instrument as _, Level};
|
|
use tracing_mock::*;
|
|
|
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
|
|
#[test]
|
|
fn span_on_drop() {
|
|
#[derive(Clone, Debug)]
|
|
struct AssertSpanOnDrop;
|
|
|
|
impl Drop for AssertSpanOnDrop {
|
|
fn drop(&mut self) {
|
|
tracing::info!("Drop");
|
|
}
|
|
}
|
|
|
|
struct Fut(Option<AssertSpanOnDrop>);
|
|
|
|
impl Future for Fut {
|
|
type Output = ();
|
|
|
|
fn poll(mut self: Pin<&mut Self>, _: &mut task::Context<'_>) -> task::Poll<Self::Output> {
|
|
self.set(Fut(None));
|
|
task::Poll::Ready(())
|
|
}
|
|
}
|
|
|
|
let subscriber = subscriber::mock()
|
|
.enter(expect::span().named("foo"))
|
|
.event(expect::event().at_level(Level::INFO))
|
|
.exit(expect::span().named("foo"))
|
|
.enter(expect::span().named("foo"))
|
|
.exit(expect::span().named("foo"))
|
|
.drop_span(expect::span().named("foo"))
|
|
.enter(expect::span().named("bar"))
|
|
.event(expect::event().at_level(Level::INFO))
|
|
.exit(expect::span().named("bar"))
|
|
.drop_span(expect::span().named("bar"))
|
|
.only()
|
|
.run();
|
|
|
|
with_default(subscriber, || {
|
|
// polled once
|
|
Fut(Some(AssertSpanOnDrop))
|
|
.instrument(tracing::span!(Level::TRACE, "foo"))
|
|
.now_or_never()
|
|
.unwrap();
|
|
|
|
// never polled
|
|
drop(Fut(Some(AssertSpanOnDrop)).instrument(tracing::span!(Level::TRACE, "bar")));
|
|
});
|
|
}
|