#[cfg(feature = "config-management")]
use xqpath::config::{ConfigManager, DebugConfig, XQPathConfig};
#[cfg(feature = "interactive-debug")]
use xqpath::debugger::{DebugCommand, XQPathDebugger};
#[cfg(feature = "config-management")]
#[test]
fn test_config_manager_basic() {
let manager = ConfigManager::new().unwrap();
let config = manager.get_config();
assert_eq!(config.debug.level, "info");
assert_eq!(config.debug.output, "stderr");
let result = manager.save_config();
assert!(result.is_ok());
}
#[cfg(feature = "config-management")]
#[test]
fn test_config_persistence() {
let default_config = XQPathConfig::default();
let serialized = serde_yaml::to_string(&default_config).unwrap();
let deserialized: XQPathConfig = serde_yaml::from_str(&serialized).unwrap();
assert_eq!(deserialized.debug.level, "info");
assert_eq!(deserialized.debug.output, "stderr");
assert!(deserialized.debug.file.is_none());
let manager = ConfigManager::new().unwrap();
let config = manager.get_config();
assert_eq!(config.debug.level, "info");
}
#[cfg(feature = "config-management")]
#[test]
fn test_config_profiles() {
let mut dev_config = XQPathConfig::default();
dev_config.debug.level = "trace".to_string();
dev_config.debug.timing = true;
let serialized = serde_yaml::to_string(&dev_config).unwrap();
let loaded_config: XQPathConfig =
serde_yaml::from_str(&serialized).unwrap();
assert_eq!(loaded_config.debug.level, "trace");
assert!(loaded_config.debug.timing);
}
#[cfg(feature = "config-management")]
#[test]
fn test_config_validation() {
use std::path::PathBuf;
let config = XQPathConfig {
debug: DebugConfig {
level: "custom_level".to_string(),
output: "file".to_string(),
file: Some(PathBuf::from("/tmp/debug.log")),
timing: true,
},
..Default::default()
};
assert_eq!(config.debug.level, "custom_level");
assert_eq!(config.debug.output, "file");
assert!(config.debug.timing);
}
#[cfg(feature = "interactive-debug")]
#[test]
fn test_debugger_creation() {
let _debugger = XQPathDebugger::new();
}
#[cfg(feature = "interactive-debug")]
#[test]
fn test_debug_command_parsing() {
let help_cmd = DebugCommand::Help;
match help_cmd {
DebugCommand::Help => assert!(true),
_ => assert!(false, "Expected Help command"),
}
let query_cmd = DebugCommand::Run {
query: ".test.path".to_string(),
};
match query_cmd {
DebugCommand::Run { query } => {
assert_eq!(query, ".test.path");
}
_ => assert!(false, "Expected Run command"),
}
let quit_cmd = DebugCommand::Quit;
match quit_cmd {
DebugCommand::Quit => assert!(true),
_ => assert!(false, "Expected Quit command"),
}
}
#[cfg(all(feature = "config-management", feature = "interactive-debug"))]
#[test]
fn test_config_debugger_integration() {
let config_manager = ConfigManager::new().unwrap();
let _debugger = XQPathDebugger::new();
let config = config_manager.get_config();
assert!(!config.debug.level.is_empty());
}
#[cfg(feature = "config-management")]
#[test]
fn test_config_error_handling() {
let manager = ConfigManager::new();
assert!(manager.is_ok());
let manager = manager.unwrap();
let config = manager.get_config();
assert!(!config.debug.level.is_empty());
}
#[cfg(feature = "config-management")]
#[test]
fn test_config_performance() {
use std::time::Instant;
let manager = ConfigManager::new().unwrap();
let start = Instant::now();
for _ in 0..100 {
let _ = manager.get_config();
}
let duration = start.elapsed();
assert!(duration.as_secs() < 1, "配置访问性能过慢: {duration:?}");
}