#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_comprehensive_handler_params() {
assert_eq!(
ComprehensiveOutputFormat::Json as i32,
ComprehensiveOutputFormat::Json as i32
);
}
#[test]
fn test_find_project_root() {
use std::fs;
use tempfile::TempDir;
let temp_dir = TempDir::new().unwrap();
let project_root = temp_dir.path();
let src_dir = project_root.join("src");
let sub_dir = src_dir.join("module");
fs::create_dir_all(&sub_dir).unwrap();
fs::write(
project_root.join("Cargo.toml"),
"[package]\nname = \"test\"",
)
.unwrap();
let test_file = sub_dir.join("test.rs");
fs::write(&test_file, "// test file").unwrap();
let found_root = find_project_root(&test_file).unwrap();
assert_eq!(found_root, project_root);
let found_root = find_project_root(&sub_dir).unwrap();
assert_eq!(found_root, project_root);
let isolated_dir = TempDir::new().unwrap();
let isolated_file = isolated_dir.path().join("isolated.rs");
fs::write(&isolated_file, "// isolated file").unwrap();
let found_root = find_project_root(&isolated_file).unwrap();
assert_eq!(found_root, isolated_dir.path());
}
#[tokio::test]
async fn test_comprehensive_single_file_filter() {
use crate::models::defect_report::{Defect, DefectCategory, Severity};
use std::collections::HashMap;
let defects = [
Defect {
id: "1".to_string(),
category: DefectCategory::Complexity,
severity: Severity::High,
file_path: PathBuf::from("src/main.rs"),
line_start: 10,
line_end: Some(20),
column_start: Some(5),
column_end: Some(10),
message: "High complexity in main".to_string(),
rule_id: "complexity".to_string(),
fix_suggestion: Some("Refactor".to_string()),
metrics: HashMap::from([("confidence".to_string(), 0.8)]),
},
Defect {
id: "2".to_string(),
category: DefectCategory::Complexity,
severity: Severity::Medium,
file_path: PathBuf::from("src/lib.rs"),
line_start: 15,
line_end: Some(25),
column_start: Some(3),
column_end: Some(8),
message: "Medium complexity in lib".to_string(),
rule_id: "complexity".to_string(),
fix_suggestion: Some("Consider refactoring".to_string()),
metrics: HashMap::from([("confidence".to_string(), 0.7)]),
},
];
let target_file = Some(PathBuf::from("src/main.rs"));
let filtered: Vec<_> = defects
.iter()
.filter(|d| {
if let Some(ref tf) = target_file {
d.file_path == *tf
} else {
true
}
})
.collect();
assert_eq!(filtered.len(), 1);
assert_eq!(filtered[0].id, "1");
assert_eq!(filtered[0].file_path, PathBuf::from("src/main.rs"));
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod property_tests {
use proptest::prelude::*;
proptest! {
#[test]
fn basic_property_stability(_input in ".*") {
prop_assert!(true);
}
#[test]
fn module_consistency_check(_x in 0u32..1000) {
prop_assert!(_x < 1001);
}
}
}