facett-pipeline/tests/a11y_priority.rs
use egui_kittest::{
Harness,
kittest::{NodeT, Queryable},
};
use facett_core::Facet;
const COUNT: usize = 2_100;
fn name(i: usize) -> String {
format!("late-node-{i:04}")
}
use facett_pipeline::{Msg, PipelineView, Status};
#[test]
fn selected_and_focused_late_node_remains_named_within_budget() {
let mut view = PipelineView::new(
"crowded",
(0..COUNT).map(|i| (name(i), Status::Idle)).collect(),
vec![],
)
.with_clock(0.0)
.with_selected(&name(COUNT - 1));
view.set_camera(
facett_core::nav::Navigable {
scale: 0.1,
offset: [100.0, 100.0],
..Default::default()
},
true,
);
let mut h = Harness::builder()
.with_size(egui::vec2(900.0, 30_000.0))
.build_ui_state(|ui, view: &mut PipelineView| Facet::ui(view, ui), view);
h.run();
let late = format!("{} · idle", name(COUNT - 1));
assert_eq!(
h.get_by_label(&late).accesskit_node().toggled(),
Some(egui::accesskit::Toggled::True)
);
let count = |h: &Harness<'_, PipelineView>| {
h.get_all_by_role(egui::accesskit::Role::Button)
.filter(|node| {
node.accesskit_node()
.label()
.unwrap_or_default()
.starts_with("late-node-")
})
.count()
};
assert_eq!(
count(&h),
2_000,
"all nodes visible; semantic budget remains bounded"
);
h.get_by_label(&late).focus();
h.run();
h.state_mut().update(Msg::SelectNode(name(0)));
h.run();
assert!(
h.get_by_label(&late).accesskit_node().label().is_some(),
"focus retains late node after selection moves away"
);
assert_eq!(count(&h), 2_000);
}