use designguard::prelude::*;
use designguard::analyzer::rules::RulesEngine;
use designguard::parse_schematic;
use std::path::PathBuf;
fn fixture_path(name: &str) -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join(name)
}
#[test]
fn test_decoupling_rule() {
let schematic = parse_schematic(&fixture_path("missing_decap.kicad_sch"))
.expect("Should parse schematic");
let rules = RulesEngine::with_default_rules();
let issues = rules.analyze(&schematic);
let decap_issues: Vec<_> = issues
.iter()
.filter(|i| {
i.rule_id.contains("decoupling")
|| i.message.to_lowercase().contains("decoupling")
})
.collect();
assert!(!decap_issues.is_empty(), "Should detect decoupling issues");
}
#[test]
fn test_i2c_pullup_rule() {
let schematic = parse_schematic(&fixture_path("missing_i2c_pullups.kicad_sch"))
.expect("Should parse schematic");
let rules = RulesEngine::with_default_rules();
let issues = rules.analyze(&schematic);
let pullup_issues: Vec<_> = issues
.iter()
.filter(|i| {
i.message.to_lowercase().contains("pull")
&& (i.message.contains("SDA") || i.message.contains("SCL"))
})
.collect();
assert!(
!pullup_issues.is_empty(),
"Should detect missing I2C pull-ups"
);
}
#[test]
fn test_severity_levels() {
let options = ValidationOptions::default();
let result = DesignGuardCore::validate_schematic(
&fixture_path("missing_decap.kicad_sch"),
options,
)
.expect("Should parse");
for issue in &result.issues {
match issue.severity {
Severity::Error | Severity::Warning | Severity::Suggestion | Severity::Info => {
}
}
}
}
#[test]
fn test_issue_structure() {
let options = ValidationOptions::default();
let result = DesignGuardCore::validate_schematic(
&fixture_path("missing_decap.kicad_sch"),
options,
)
.expect("Should parse");
for issue in &result.issues {
assert!(!issue.message.is_empty(), "Issue should have message");
assert!(!issue.rule_id.is_empty(), "Issue should have rule_id");
if let Some(ref suggestion) = issue.suggestion {
assert!(!suggestion.is_empty(), "Suggestion should not be empty");
}
}
}