summaryrefslogtreecommitdiffstats
path: root/vendor/tracing-subscriber/tests/layer_filters/vec.rs
blob: 87244e4ab54dc6dd4fd52d8c85d708efa304679d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
use super::*;
use tracing::Subscriber;

#[test]
fn with_filters_unboxed() {
    let (trace_layer, trace_handle) = layer::named("trace")
        .event(event::mock().at_level(Level::TRACE))
        .event(event::mock().at_level(Level::DEBUG))
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let trace_layer = trace_layer.with_filter(LevelFilter::TRACE);

    let (debug_layer, debug_handle) = layer::named("debug")
        .event(event::mock().at_level(Level::DEBUG))
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let debug_layer = debug_layer.with_filter(LevelFilter::DEBUG);

    let (info_layer, info_handle) = layer::named("info")
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let info_layer = info_layer.with_filter(LevelFilter::INFO);

    let _subscriber = tracing_subscriber::registry()
        .with(vec![trace_layer, debug_layer, info_layer])
        .set_default();

    tracing::trace!("hello trace");
    tracing::debug!("hello debug");
    tracing::info!("hello info");

    trace_handle.assert_finished();
    debug_handle.assert_finished();
    info_handle.assert_finished();
}

#[test]
fn with_filters_boxed() {
    let (unfiltered_layer, unfiltered_handle) = layer::named("unfiltered")
        .event(event::mock().at_level(Level::TRACE))
        .event(event::mock().at_level(Level::DEBUG))
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let unfiltered_layer = unfiltered_layer.boxed();

    let (debug_layer, debug_handle) = layer::named("debug")
        .event(event::mock().at_level(Level::DEBUG))
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let debug_layer = debug_layer.with_filter(LevelFilter::DEBUG).boxed();

    let (target_layer, target_handle) = layer::named("target")
        .event(event::mock().at_level(Level::INFO))
        .done()
        .run_with_handle();
    let target_layer = target_layer
        .with_filter(filter::filter_fn(|meta| meta.target() == "my_target"))
        .boxed();

    let _subscriber = tracing_subscriber::registry()
        .with(vec![unfiltered_layer, debug_layer, target_layer])
        .set_default();

    tracing::trace!("hello trace");
    tracing::debug!("hello debug");
    tracing::info!(target: "my_target", "hello my target");

    unfiltered_handle.assert_finished();
    debug_handle.assert_finished();
    target_handle.assert_finished();
}

#[test]
fn mixed_max_level_hint() {
    let unfiltered = layer::named("unfiltered").run().boxed();
    let info = layer::named("info")
        .run()
        .with_filter(LevelFilter::INFO)
        .boxed();
    let debug = layer::named("debug")
        .run()
        .with_filter(LevelFilter::DEBUG)
        .boxed();

    let subscriber = tracing_subscriber::registry().with(vec![unfiltered, info, debug]);

    assert_eq!(subscriber.max_level_hint(), None);
}

#[test]
fn all_filtered_max_level_hint() {
    let warn = layer::named("warn")
        .run()
        .with_filter(LevelFilter::WARN)
        .boxed();
    let info = layer::named("info")
        .run()
        .with_filter(LevelFilter::INFO)
        .boxed();
    let debug = layer::named("debug")
        .run()
        .with_filter(LevelFilter::DEBUG)
        .boxed();

    let subscriber = tracing_subscriber::registry().with(vec![warn, info, debug]);

    assert_eq!(subscriber.max_level_hint(), Some(LevelFilter::DEBUG));
}

#[test]
fn empty_vec() {
    // Just a None means everything is off
    let subscriber = tracing_subscriber::registry().with(Vec::<ExpectLayer>::new());
    assert_eq!(subscriber.max_level_hint(), Some(LevelFilter::OFF));
}