]> git.proxmox.com Git - rustc.git/blame - vendor/tracing-subscriber/tests/unhinted_layer_filters_dont_break_other_layers.rs
New upstream version 1.65.0+dfsg1
[rustc.git] / vendor / tracing-subscriber / tests / unhinted_layer_filters_dont_break_other_layers.rs
CommitLineData
c295e0f8
XL
1#![cfg(feature = "registry")]
2mod support;
3use self::support::*;
4use tracing::Level;
5use tracing_subscriber::{filter::DynFilterFn, prelude::*};
6
7#[test]
8fn layer_filters() {
9 let (unfiltered, unfiltered_handle) = unfiltered("unfiltered");
10 let (filtered, filtered_handle) = filtered("filtered");
11
12 let _subscriber = tracing_subscriber::registry()
13 .with(unfiltered)
14 .with(filtered.with_filter(filter()))
15 .set_default();
16
17 events();
18
19 unfiltered_handle.assert_finished();
20 filtered_handle.assert_finished();
21}
22
23#[test]
24fn layered_layer_filters() {
25 let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1");
26 let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2");
27 let unfiltered = unfiltered1.and_then(unfiltered2);
28
29 let (filtered1, filtered1_handle) = filtered("filtered_1");
30 let (filtered2, filtered2_handle) = filtered("filtered_2");
31 let filtered = filtered1
32 .with_filter(filter())
33 .and_then(filtered2.with_filter(filter()));
34
35 let _subscriber = tracing_subscriber::registry()
36 .with(unfiltered)
37 .with(filtered)
38 .set_default();
39
40 events();
41
42 unfiltered1_handle.assert_finished();
43 unfiltered2_handle.assert_finished();
44 filtered1_handle.assert_finished();
45 filtered2_handle.assert_finished();
46}
47
48#[test]
49fn out_of_order() {
50 let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1");
51 let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2");
52
53 let (filtered1, filtered1_handle) = filtered("filtered_1");
54 let (filtered2, filtered2_handle) = filtered("filtered_2");
55
56 let _subscriber = tracing_subscriber::registry()
57 .with(unfiltered1)
58 .with(filtered1.with_filter(filter()))
59 .with(unfiltered2)
60 .with(filtered2.with_filter(filter()))
61 .set_default();
62 events();
63
64 unfiltered1_handle.assert_finished();
65 unfiltered2_handle.assert_finished();
66 filtered1_handle.assert_finished();
67 filtered2_handle.assert_finished();
68}
69
70#[test]
71fn mixed_layered() {
72 let (unfiltered1, unfiltered1_handle) = unfiltered("unfiltered_1");
73 let (unfiltered2, unfiltered2_handle) = unfiltered("unfiltered_2");
74 let (filtered1, filtered1_handle) = filtered("filtered_1");
75 let (filtered2, filtered2_handle) = filtered("filtered_2");
76
77 let layered1 = filtered1.with_filter(filter()).and_then(unfiltered1);
78 let layered2 = unfiltered2.and_then(filtered2.with_filter(filter()));
79
80 let _subscriber = tracing_subscriber::registry()
81 .with(layered1)
82 .with(layered2)
83 .set_default();
84
85 events();
86
87 unfiltered1_handle.assert_finished();
88 unfiltered2_handle.assert_finished();
89 filtered1_handle.assert_finished();
90 filtered2_handle.assert_finished();
91}
92
93fn events() {
94 tracing::trace!("hello trace");
95 tracing::debug!("hello debug");
96 tracing::info!("hello info");
97 tracing::warn!("hello warn");
98 tracing::error!("hello error");
99}
100
101fn filter<S>() -> DynFilterFn<S> {
102 DynFilterFn::new(|metadata, _| metadata.level() <= &Level::INFO)
103}
104
105fn unfiltered(name: &str) -> (ExpectLayer, subscriber::MockHandle) {
106 layer::named(name)
107 .event(event::mock().at_level(Level::TRACE))
108 .event(event::mock().at_level(Level::DEBUG))
109 .event(event::mock().at_level(Level::INFO))
110 .event(event::mock().at_level(Level::WARN))
111 .event(event::mock().at_level(Level::ERROR))
112 .done()
113 .run_with_handle()
114}
115
116fn filtered(name: &str) -> (ExpectLayer, subscriber::MockHandle) {
117 layer::named(name)
118 .event(event::mock().at_level(Level::INFO))
119 .event(event::mock().at_level(Level::WARN))
120 .event(event::mock().at_level(Level::ERROR))
121 .done()
122 .run_with_handle()
123}