Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

facett-pop/tests/a11y.rs

//! **FC-4 + FC-8** interaction proof for `ProgressView`. Each progress row is now
//! a uniquely-identified AccessKit ProgressIndicator carrying its label + fraction,
//! and the view exposes a typed `idle` quiescence flag (FC-8).

use egui_kittest::Harness;
use egui_kittest::kittest::{NodeT, Queryable};

use facett_core::Facet;
use facett_pop::{ProgressItem, ProgressView};

fn sample() -> ProgressView {
    let mut v = ProgressView::new("Ingest");
    v.phase = "loading".into();
    v.items = vec![
        ProgressItem { label: "Person".into(), done: 50, total: 100 },
        ProgressItem { label: "Company".into(), done: 10, total: 10 },
    ];
    v
}

#[test]
fn each_row_is_a_labelled_progress_node_with_its_fraction() {
    let mut view = sample();
    let mut harness = Harness::builder().with_size(egui::vec2(400.0, 300.0)).build_ui(move |ui| view.ui(ui));
    harness.run();

    let person = harness.get_by_label("Person").accesskit_node();
    assert_eq!(person.role(), egui::accesskit::Role::ProgressIndicator);
    assert_eq!(person.numeric_value(), Some(0.5), "Person row carries its 50/100 fraction");

    let company = harness.get_by_label("Company").accesskit_node();
    assert_eq!(company.numeric_value(), Some(1.0), "Company row carries its 10/10 fraction");
    // Feed the matrix: ok iff each row's a11y ProgressIndicator carries its fraction.
    #[cfg(feature = "testmatrix")]
    facett_core::testmatrix::emit(
        "ProgressView",
        "fc4_row_fractions",
        person.numeric_value() == Some(0.5) && company.numeric_value() == Some(1.0),
        "Person=0.5, Company=1.0 progress a11y values",
    );
}

#[test]
fn idle_flag_reflects_completion() {
    // Not all rows complete ⇒ not idle.
    let busy = sample();
    assert!(!busy.is_idle());
    assert_eq!(busy.state_json()["idle"], false);

    // Every row complete ⇒ idle, readable without a sleep.
    let mut done = ProgressView::new("Ingest");
    done.items = vec![ProgressItem { label: "Person".into(), done: 100, total: 100 }];
    assert!(done.is_idle());
    assert_eq!(done.state_json()["idle"], true);
    // Feed the matrix: ok iff the idle flag flips with completion (FC-8).
    #[cfg(feature = "testmatrix")]
    facett_core::testmatrix::emit(
        "ProgressView",
        "fc8_idle_flag",
        !busy.is_idle() && done.is_idle(),
        "busy=not-idle, all-complete=idle",
    );
}