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",
);
}