]> git.proxmox.com Git - rustc.git/blame - src/vendor/log/tests/filters.rs
New upstream version 1.31.0+dfsg1
[rustc.git] / src / vendor / log / tests / filters.rs
CommitLineData
ff7c6d11
XL
1#[macro_use]
2extern crate log;
476ff2be
SL
3
4use std::sync::{Arc, Mutex};
ff7c6d11 5use log::{Level, LevelFilter, Log, Record, Metadata};
476ff2be 6
ff7c6d11
XL
7#[cfg(feature = "std")]
8use log::set_boxed_logger;
9
10#[cfg(not(feature = "std"))]
11fn set_boxed_logger(logger: Box<Log>) -> Result<(), log::SetLoggerError> {
12 log::set_logger(unsafe { &*Box::into_raw(logger) })
476ff2be
SL
13}
14
15struct State {
ff7c6d11 16 last_log: Mutex<Option<Level>>,
476ff2be
SL
17}
18
19struct Logger(Arc<State>);
20
21impl Log for Logger {
ff7c6d11 22 fn enabled(&self, _: &Metadata) -> bool {
476ff2be
SL
23 true
24 }
25
ff7c6d11 26 fn log(&self, record: &Record) {
476ff2be
SL
27 *self.0.last_log.lock().unwrap() = Some(record.level());
28 }
ff7c6d11 29 fn flush(&self) {}
476ff2be
SL
30}
31
32fn main() {
ff7c6d11
XL
33 let me = Arc::new(State { last_log: Mutex::new(None) });
34 let a = me.clone();
35 set_boxed_logger(Box::new(Logger(me))).unwrap();
476ff2be 36
ff7c6d11
XL
37 test(&a, LevelFilter::Off);
38 test(&a, LevelFilter::Error);
39 test(&a, LevelFilter::Warn);
40 test(&a, LevelFilter::Info);
41 test(&a, LevelFilter::Debug);
42 test(&a, LevelFilter::Trace);
476ff2be
SL
43}
44
ff7c6d11
XL
45fn test(a: &State, filter: LevelFilter) {
46 log::set_max_level(filter);
476ff2be 47 error!("");
ff7c6d11 48 last(&a, t(Level::Error, filter));
476ff2be 49 warn!("");
ff7c6d11 50 last(&a, t(Level::Warn, filter));
476ff2be 51 info!("");
ff7c6d11 52 last(&a, t(Level::Info, filter));
476ff2be 53 debug!("");
ff7c6d11 54 last(&a, t(Level::Debug, filter));
476ff2be 55 trace!("");
ff7c6d11 56 last(&a, t(Level::Trace, filter));
476ff2be 57
ff7c6d11
XL
58 fn t(lvl: Level, filter: LevelFilter) -> Option<Level> {
59 if lvl <= filter { Some(lvl) } else { None }
476ff2be
SL
60 }
61}
62
ff7c6d11
XL
63fn last(state: &State, expected: Option<Level>) {
64 let lvl = state.last_log.lock().unwrap().take();
65 assert_eq!(lvl, expected);
476ff2be 66}