katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use super::*;

#[test]
fn fixture_matrix_covers_required_categories() {
    let matrix = EvaluationFixtureMatrix::v0_1();

    for category in [
        FixtureCategory::CommonMark,
        FixtureCategory::Gfm,
        FixtureCategory::Math,
        FixtureCategory::GitHubAlert,
        FixtureCategory::KatanaCompatibility,
        FixtureCategory::ExternalRendering,
    ] {
        assert!(matrix.contains_category(category));
    }
}

#[test]
fn fixture_matrix_records_current_coverage_gaps() {
    let matrix = EvaluationFixtureMatrix::v0_1();

    assert!(matrix.status_count(CoverageStatus::MissingImplementation) > 0);
    assert_eq!(
        matrix.status_count(CoverageStatus::ExternalBackendRequired),
        0
    );
}

#[test]
fn fixture_matrix_paths_exist() {
    let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR"));
    for fixture in EvaluationFixtureMatrix::v0_1().fixtures {
        assert!(root.join(fixture.path).exists());
    }
}

#[test]
fn backend_matrix_keeps_krr_and_kdv_export_roles_separate() {
    let matrix = BackendCapabilityMatrix::v0_1();

    assert!(matrix.capabilities.iter().any(|entry| {
        entry.feature == "mermaid" && entry.capability == BackendCapability::KrrDirect
    }));
    assert!(matrix.capabilities.iter().any(|entry| {
        entry.feature == "html-export" && entry.capability == BackendCapability::KdvManifestExport
    }));
    assert!(matrix.capabilities.iter().any(|entry| {
        entry.feature == "plantuml" && entry.capability == BackendCapability::KrrDirect
    }));
    assert!(matrix.capabilities.iter().any(|entry| {
        entry.feature == "math" && entry.capability == BackendCapability::KdvManifestExport
    }));
}

#[test]
fn coverage_matrix_marks_krr_adoption_as_complete() {
    let matrix = EvaluationCoverageMatrix::v0_1();

    assert!(matrix.is_complete());
    assert!(matrix.contains_feature("commonmark-emphasis", CoverageStatus::KmmDto));
    assert!(matrix.contains_feature("github-alert-note", CoverageStatus::KmmDto));
    assert!(matrix.contains_feature(
        "zenuml-mermaid-compat",
        CoverageStatus::KrrMermaidCompatibility
    ));
    assert!(matrix.contains_feature("plantuml-render", CoverageStatus::KrrDirect));
}

#[test]
fn v0_1_release_gate_rejects_remaining_markdown_coverage_gaps() {
    let matrix = EvaluationCoverageMatrix::v0_1();

    assert!(
        matrix.is_kdv_owned_complete(),
        "v0.1.0 must not leave KDV-owned coverage gaps while KRR intake remains pending: {:?}",
        kdv_owned_incomplete_features(&matrix)
    );
}

fn kdv_owned_incomplete_features(matrix: &EvaluationCoverageMatrix) -> Vec<String> {
    matrix
        .features
        .iter()
        .filter(|feature| feature.status == CoverageStatus::MissingImplementation)
        .map(|feature| feature.id.clone())
        .collect()
}