harn-hostlib 0.10.166

Opt-in code-intelligence and deterministic-tool host builtins for the Harn VM
use super::*;

fn complete() -> ConformanceReport {
    ConformanceReport {
        backend: "fixture".to_string(),
        filesystem_mechanism: "fixture".to_string(),
        enforcing: true,
        cases: ConformanceCase::ALL
            .iter()
            .map(|case| CaseReport {
                case: case.id(),
                route: case.route(),
                expected: Some(Observation::Admitted),
                observed: Some(Observation::Admitted),
                target: "fixture".to_string(),
                verdict: Verdict::Conforms,
                detail: String::new(),
            })
            .collect(),
    }
}

#[test]
fn holds_requires_the_complete_case_census_and_measured_verdicts() {
    let mut report = complete();
    assert!(report.holds());
    report.cases.clear();
    assert!(!report.holds(), "an empty report is not a measurement");
    report = complete();
    report.cases.pop();
    assert!(!report.holds(), "a partial report cannot pass");
    report = complete();
    report.cases[1] = report.cases[0].clone();
    assert!(!report.holds(), "a duplicate cannot replace a missing case");
    for verdict in [
        Verdict::Escaped {
            target: "fixture".to_string(),
        },
        Verdict::NotMeasured {
            reason: "fixture".to_string(),
        },
        Verdict::NotEnforced {
            target: "fixture".to_string(),
        },
    ] {
        report = complete();
        report.cases[0].verdict = verdict;
        assert!(!report.holds());
    }
    report = complete();
    for case in &mut report.cases {
        case.verdict = Verdict::NotApplicable {
            reason: "fixture".to_string(),
        };
    }
    assert!(!report.holds(), "no case was measured");
}