use hypen_engine::logger::{LogConfig, LogLevel, LogScope};
#[test]
fn test_log_config_default() {
let config = LogConfig::default();
assert_eq!(config.min_level, LogLevel::Info);
assert_eq!(config.enabled_scopes.len(), 0); assert!(!config.timestamps);
}
#[test]
fn test_log_config_with_level() {
let config = LogConfig::default();
let config = config.with_level(LogLevel::Debug);
assert_eq!(config.min_level, LogLevel::Debug);
}
#[test]
fn test_log_config_enable_all() {
let config = LogConfig::default();
let config = config.enable_all();
assert_eq!(config.min_level, LogLevel::Trace);
}
#[test]
fn test_log_config_with_scopes() {
let config = LogConfig::default();
let config = config.with_scopes(vec![LogScope::Engine, LogScope::Reconciler]);
assert_eq!(config.enabled_scopes.len(), 2);
assert!(config.enabled_scopes.contains(&LogScope::Engine));
assert!(config.enabled_scopes.contains(&LogScope::Reconciler));
}
#[test]
fn test_log_config_with_timestamps() {
let config = LogConfig::default();
assert!(!config.timestamps);
let config = config.with_timestamps();
assert!(config.timestamps);
}
#[test]
fn test_should_log_filters_by_level() {
let config = LogConfig::default().with_level(LogLevel::Info);
assert!(!config.should_log(LogScope::Engine, LogLevel::Trace)); assert!(!config.should_log(LogScope::Engine, LogLevel::Debug)); assert!(config.should_log(LogScope::Engine, LogLevel::Info)); assert!(config.should_log(LogScope::Engine, LogLevel::Warn)); assert!(config.should_log(LogScope::Engine, LogLevel::Error)); }
#[test]
fn test_should_log_allows_all_scopes_when_empty() {
let config = LogConfig::default().with_level(LogLevel::Debug);
assert!(config.should_log(LogScope::Parser, LogLevel::Info));
assert!(config.should_log(LogScope::Engine, LogLevel::Info));
assert!(config.should_log(LogScope::Reconciler, LogLevel::Info));
assert!(config.should_log(LogScope::State, LogLevel::Info));
}
#[test]
fn test_should_log_filters_by_scope() {
let config = LogConfig::default()
.with_level(LogLevel::Info)
.with_scopes(vec![LogScope::Engine, LogScope::State]);
assert!(config.should_log(LogScope::Engine, LogLevel::Info)); assert!(config.should_log(LogScope::State, LogLevel::Info)); assert!(!config.should_log(LogScope::Parser, LogLevel::Info)); assert!(!config.should_log(LogScope::Reconciler, LogLevel::Info)); }
#[test]
fn test_should_log_combines_level_and_scope_filters() {
let config = LogConfig::default()
.with_level(LogLevel::Warn)
.with_scopes(vec![LogScope::Engine]);
assert!(!config.should_log(LogScope::Engine, LogLevel::Info)); assert!(config.should_log(LogScope::Engine, LogLevel::Warn)); assert!(config.should_log(LogScope::Engine, LogLevel::Error)); assert!(!config.should_log(LogScope::Parser, LogLevel::Warn)); assert!(!config.should_log(LogScope::Parser, LogLevel::Info)); }
#[test]
fn test_should_log_enable_all_allows_trace() {
let config = LogConfig::default().enable_all();
assert!(config.should_log(LogScope::Engine, LogLevel::Trace));
assert!(config.should_log(LogScope::Parser, LogLevel::Trace));
}
#[test]
fn test_log_level_ordering() {
assert!(LogLevel::Trace < LogLevel::Debug);
assert!(LogLevel::Debug < LogLevel::Info);
assert!(LogLevel::Info < LogLevel::Warn);
assert!(LogLevel::Warn < LogLevel::Error);
}
#[test]
fn test_log_level_display() {
assert_eq!(format!("{}", LogLevel::Trace), "trace");
assert_eq!(format!("{}", LogLevel::Debug), "debug");
assert_eq!(format!("{}", LogLevel::Info), "info");
assert_eq!(format!("{}", LogLevel::Warn), "warn");
assert_eq!(format!("{}", LogLevel::Error), "error");
}
#[test]
fn test_log_scope_display() {
assert_eq!(format!("{}", LogScope::Parser), "parser");
assert_eq!(format!("{}", LogScope::Engine), "engine");
assert_eq!(format!("{}", LogScope::Reconciler), "reconciler");
assert_eq!(format!("{}", LogScope::Renderer), "renderer");
assert_eq!(format!("{}", LogScope::Router), "router");
assert_eq!(format!("{}", LogScope::Lifecycle), "lifecycle");
assert_eq!(format!("{}", LogScope::State), "state");
assert_eq!(format!("{}", LogScope::Component), "component");
assert_eq!(format!("{}", LogScope::Wasm), "wasm");
}
#[test]
fn test_log_config_builder_chaining() {
let config = LogConfig::default()
.with_level(LogLevel::Debug)
.with_scopes(vec![LogScope::Engine])
.with_timestamps();
assert_eq!(config.min_level, LogLevel::Debug);
assert_eq!(config.enabled_scopes.len(), 1);
assert!(config.timestamps);
}
#[test]
fn test_log_level_equality() {
let level1 = LogLevel::Info;
let level2 = LogLevel::Info;
let level3 = LogLevel::Warn;
assert_eq!(level1, level2);
assert_ne!(level1, level3);
}
#[test]
fn test_log_scope_equality() {
let scope1 = LogScope::Engine;
let scope2 = LogScope::Engine;
let scope3 = LogScope::Parser;
assert_eq!(scope1, scope2);
assert_ne!(scope1, scope3);
}
#[test]
fn test_log_config_serialization() {
let config = LogConfig::default()
.with_level(LogLevel::Warn)
.with_scopes(vec![LogScope::Engine, LogScope::State]);
let json = serde_json::to_value(&config).unwrap();
assert_eq!(json["min_level"], "warn");
assert!(json["enabled_scopes"].is_array());
assert_eq!(json["timestamps"], false);
}
#[test]
fn test_log_config_deserialization() {
let json = serde_json::json!({
"min_level": "error",
"enabled_scopes": ["parser", "engine"],
"timestamps": true
});
let config: LogConfig = serde_json::from_value(json).unwrap();
assert_eq!(config.min_level, LogLevel::Error);
assert_eq!(config.enabled_scopes.len(), 2);
assert!(config.enabled_scopes.contains(&LogScope::Parser));
assert!(config.enabled_scopes.contains(&LogScope::Engine));
assert!(config.timestamps);
}
#[test]
fn test_log_level_clone_copy() {
let level = LogLevel::Info;
let copied = level;
assert_eq!(level, copied);
assert_eq!(level, LogLevel::Info);
}
#[test]
fn test_log_scope_clone_copy() {
let scope = LogScope::Engine;
let copied = scope;
assert_eq!(scope, copied);
assert_eq!(scope, LogScope::Engine);
}