1 #[path = "../../tracing-futures/tests/support.rs"]
2 // we don't use some of the test support functions, but `tracing-futures` does.
7 use tracing
::subscriber
::with_default
;
9 use tracing_attributes
::instrument
;
11 use std
::convert
::TryFrom
;
12 use std
::num
::TryFromIntError
;
15 fn err() -> Result
<u8, TryFromIntError
> {
21 let span
= span
::mock().named("err");
22 let (subscriber
, handle
) = subscriber
::mock()
23 .new_span(span
.clone())
25 .event(event
::mock().at_level(Level
::ERROR
))
30 with_default(subscriber
, || err().ok());
31 handle
.assert_finished();
35 async
fn err_async(polls
: usize) -> Result
<u8, TryFromIntError
> {
36 let future
= PollN
::new_ok(polls
);
37 tracing
::trace
!(awaiting
= true);
44 let span
= span
::mock().named("err_async");
45 let (subscriber
, handle
) = subscriber
::mock()
46 .new_span(span
.clone())
50 .with_fields(field
::mock("awaiting").with_value(&true))
51 .at_level(Level
::TRACE
),
55 .event(event
::mock().at_level(Level
::ERROR
))
60 with_default(subscriber
, || {
61 block_on_future(async { err_async(2).await }
).ok();
63 handle
.assert_finished();
67 fn err_mut(out
: &mut u8) -> Result
<(), TryFromIntError
> {
68 *out
= u8::try_from(1234)?
;
74 let span
= span
::mock().named("err_mut");
75 let (subscriber
, handle
) = subscriber
::mock()
76 .new_span(span
.clone())
78 .event(event
::mock().at_level(Level
::ERROR
))
83 with_default(subscriber
, || err_mut(&mut 0).ok());
84 handle
.assert_finished();
88 async
fn err_mut_async(polls
: usize, out
: &mut u8) -> Result
<(), TryFromIntError
> {
89 let future
= PollN
::new_ok(polls
);
90 tracing
::trace
!(awaiting
= true);
92 *out
= u8::try_from(1234)?
;
98 let span
= span
::mock().named("err_mut_async");
99 let (subscriber
, handle
) = subscriber
::mock()
100 .new_span(span
.clone())
104 .with_fields(field
::mock("awaiting").with_value(&true))
105 .at_level(Level
::TRACE
),
109 .event(event
::mock().at_level(Level
::ERROR
))
114 with_default(subscriber
, || {
115 block_on_future(async { err_mut_async(2, &mut 0).await }
).ok();
117 handle
.assert_finished();
121 fn impl_trait_return_type() {
122 // Reproduces https://github.com/tokio-rs/tracing/issues/1227
125 fn returns_impl_trait(x
: usize) -> Result
<impl Iterator
<Item
= usize>, String
> {
129 let span
= span
::mock().named("returns_impl_trait");
131 let (subscriber
, handle
) = subscriber
::mock()
134 .with_field(field
::mock("x").with_value(&format_args
!("10")).only()),
142 with_default(subscriber
, || {
143 for _
in returns_impl_trait(10).unwrap() {
148 handle
.assert_finished();