generated from PlexSheep/baserepo
74 lines
2.4 KiB
Rust
74 lines
2.4 KiB
Rust
//! # Tests for pt::logger::Logger
|
|
//!
|
|
//! Note: the module uses a global variable to store if the thread has
|
|
//// IMPORTS ///////////////////////////////////////////////////////////////////////////////////////
|
|
/// ## Tests for basic logging functionality
|
|
use pt::logger::*;
|
|
use pt::common::macros::get_stdout_for;
|
|
|
|
use regex::Regex;
|
|
|
|
//// HELPERS ///////////////////////////////////////////////////////////////////////////////////////
|
|
// only initialize once
|
|
/// ## setup that's needed before testing the logger struct
|
|
fn setup() {
|
|
// we don't want to log messages during our tests!
|
|
std::env::set_var(LOGGER_ENV_KEY, "Trace");
|
|
Logger::init_specialized(true, false, false, None);
|
|
println!()
|
|
}
|
|
|
|
//// IMPLEMENTATION ////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/// ## Tests for basic logging
|
|
///
|
|
/// This test tests if the loggers basic logging functionality works, that is it's methods:
|
|
///
|
|
/// - [`Logger::trace`]
|
|
/// - [`Logger::debug`]
|
|
/// - [`Logger::info`]
|
|
/// - [`Logger::warn`]
|
|
/// - [`Logger::error`]
|
|
///
|
|
/// After those methods have Successfully been executed, their outputs gets stored in a single
|
|
/// [`String`] and a [`Regex`] checks if we have five correctly formatted messages.
|
|
#[test]
|
|
fn test_log_basic() {
|
|
setup();
|
|
let l = Logger::new();
|
|
let trace_out = get_stdout_for!(l.trace("MSG"));
|
|
let debug_out = get_stdout_for!(l.debug("MSG"));
|
|
let info_out = get_stdout_for!(l.info("MSG"));
|
|
let warn_out = get_stdout_for!(l.warn("MSG"));
|
|
let error_out = get_stdout_for!(l.error("MSG"));
|
|
let combined = format!(
|
|
"{}{}{}{}{}",
|
|
trace_out, debug_out, info_out, warn_out, error_out
|
|
);
|
|
print!("{}", combined);
|
|
|
|
// too long, so i split into two lines.
|
|
// this matches the format of the env_logger perfectly, but make sure that color is off,
|
|
// else the ANSI escape sequences break this test
|
|
let regex = Regex::new(concat!(
|
|
r"(?m)\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z ",
|
|
r"(TRACE|DEBUG|INFO|WARN|ERROR) +pt::logger\] MSG"
|
|
))
|
|
.unwrap();
|
|
|
|
// we have 5 log levels, therefore we should have 5 captures
|
|
assert_eq!(regex.captures_iter(&combined).count(), 5);
|
|
}
|
|
|
|
#[test]
|
|
fn test_multi_initialize() {
|
|
setup();
|
|
let l = Logger::new();
|
|
// these should be ignored due to the global flag
|
|
Logger::init();
|
|
Logger::init();
|
|
Logger::init();
|
|
Logger::init();
|
|
l.info("Successfully ignored extra init");
|
|
}
|