facett-brokkrview/tests/a11y_priority.rs
use egui_kittest::{
Harness,
kittest::{NodeT, Queryable},
};
use facett_core::{Elm, Facet};
const COUNT: usize = 2_100;
fn name(i: usize) -> String {
format!("late-node-{i:04}")
}
use facett_brokkrview::{BrokkrView, BrokkrViewMsg, DagNode, DagView, TreeView, ViewMode};
#[test]
fn selected_and_focused_late_node_remains_named_within_budget() {
let mut view = BrokkrView::new(
"crowded",
vec![],
TreeView::default(),
DagView {
nodes: (0..COUNT)
.map(|i| DagNode {
step: name(i),
stage: "stage".into(),
status: "passed".into(),
disposition: None,
})
.collect(),
edges: vec![],
},
);
view.update(BrokkrViewMsg::SetView(ViewMode::Dag));
view.update(BrokkrViewMsg::SelectStep(name(COUNT - 1)));
let mut h = Harness::builder()
.with_size(egui::vec2(900.0, 30_000.0))
.build_ui_state(|ui, view: &mut BrokkrView| Facet::ui(view, ui), view);
h.run();
let late = format!("{} · stage · passed", name(COUNT - 1));
assert_eq!(
h.get_by_label(&late).accesskit_node().toggled(),
Some(egui::accesskit::Toggled::True)
);
let count = |h: &Harness<'_, BrokkrView>| {
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(BrokkrViewMsg::SelectStep(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);
}