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
extern crate env_logger;

use std::sync::{Once, ONCE_INIT};

static LOGGER_INIT: Once = ONCE_INIT;

#[macro_export]
macro_rules! test {
    (should_panic, $name:ident, $test:block) => {
        test!(#[should_panic], $name, $test);
    };
    ($(#[$attr:meta])*, $name:ident, $test:block) => {
        #[test]
        $( #[$attr] )*
        fn $name() {
            test_logger::ensure_env_logger_initialized();
            $test
        }
    };
    ($name:ident, $test:block) => {
        test!(, $name, $test);
    };
}

pub fn ensure_env_logger_initialized() {
    LOGGER_INIT.call_once(|| env_logger::init().unwrap());
}