cha-core 0.5.0

Core analysis engine for Cha — pluggable code smell detection
mod common;

use cha_core::plugins::*;
use cha_core::*;
use common::*;

#[test]
fn coupling_warning() {
    let imports: Vec<_> = (0..16)
        .map(|i| import(&format!("mod_{i}"), i + 1))
        .collect();
    let model = make_model(vec![], vec![], imports, 20);
    let findings = analyze(&CouplingAnalyzer::default(), &model);
    assert_eq!(findings.len(), 1);
    assert_eq!(findings[0].severity, Severity::Warning);
}

#[test]
fn coupling_error_double() {
    let imports: Vec<_> = (0..31)
        .map(|i| import(&format!("mod_{i}"), i + 1))
        .collect();
    let model = make_model(vec![], vec![], imports, 40);
    let findings = analyze(&CouplingAnalyzer::default(), &model);
    assert_eq!(findings[0].severity, Severity::Error);
}

#[test]
fn coupling_at_threshold_no_trigger() {
    let imports: Vec<_> = (0..15)
        .map(|i| import(&format!("mod_{i}"), i + 1))
        .collect();
    let model = make_model(vec![], vec![], imports, 20);
    let findings = analyze(&CouplingAnalyzer::default(), &model);
    assert!(findings.is_empty());
}