Add basic test for egui accesskit output. (#4716)
For a project I am currently attempting to use the acceskit output of egui to preform end-to-end integration tests of my application. However, the output is currently quite basic (buttons for example don't report that they are disabled). Before adding new features to the acceskit integration, I thought it would be a good idea to add some testing to egui's accesskit output. I have started with a simple test for button texts, to get feedback on whether this is the correct direction to go in. --------- Co-authored-by: Wybe Westra <w.westra@kwantcontrols.nl>
This commit is contained in:
parent
254dfc1ebc
commit
779312ac0c
|
@ -0,0 +1,95 @@
|
|||
//! Tests the accesskit accessibility output of egui.
|
||||
|
||||
use accesskit::Role;
|
||||
use egui::{Context, RawInput};
|
||||
|
||||
/// Baseline test that asserts there are no spurious nodes in the
|
||||
/// accesskit output when the ui is empty.
|
||||
///
|
||||
/// This gives reasonable certainty that any nodes appearing in the other accesskit outputs
|
||||
/// are put there because of the widgets rendered.
|
||||
#[test]
|
||||
fn empty_ui_should_return_tree_with_only_root_window() {
|
||||
let ctx = Context::default();
|
||||
ctx.enable_accesskit();
|
||||
|
||||
let output = ctx.run(RawInput::default(), |ctx| {
|
||||
egui::CentralPanel::default().show(ctx, |_| {});
|
||||
});
|
||||
|
||||
let tree_update = output
|
||||
.platform_output
|
||||
.accesskit_update
|
||||
.expect("Missing accesskit update");
|
||||
|
||||
let tree = tree_update.tree.unwrap();
|
||||
|
||||
assert_eq!(
|
||||
tree_update.nodes.len(),
|
||||
1,
|
||||
"Empty ui should produce only the root window."
|
||||
);
|
||||
let (id, root) = &tree_update.nodes[0];
|
||||
|
||||
assert_eq!(*id, tree.root);
|
||||
assert_eq!(root.role(), Role::Window);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn button_text() {
|
||||
let button_text = "This is a test button!";
|
||||
|
||||
let ctx = Context::default();
|
||||
ctx.enable_accesskit();
|
||||
|
||||
let output = ctx.run(RawInput::default(), |ctx| {
|
||||
egui::CentralPanel::default().show(ctx, |ui| ui.button(button_text));
|
||||
});
|
||||
|
||||
let nodes = output
|
||||
.platform_output
|
||||
.accesskit_update
|
||||
.expect("Missing accesskit update")
|
||||
.nodes;
|
||||
|
||||
assert_eq!(
|
||||
nodes.len(),
|
||||
2,
|
||||
"Expected only the root node and the button."
|
||||
);
|
||||
|
||||
nodes
|
||||
.iter()
|
||||
.find(|(_, node)| node.role() == Role::Button && node.name() == Some(button_text))
|
||||
.expect("Button should exist in the accesskit output");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn toggle_button_text() {
|
||||
let button_text = "A toggle button";
|
||||
|
||||
let ctx = Context::default();
|
||||
ctx.enable_accesskit();
|
||||
|
||||
let mut selected = false;
|
||||
let output = ctx.run(RawInput::default(), |ctx| {
|
||||
egui::CentralPanel::default().show(ctx, |ui| ui.toggle_value(&mut selected, button_text));
|
||||
});
|
||||
|
||||
let nodes = output
|
||||
.platform_output
|
||||
.accesskit_update
|
||||
.expect("Missing accesskit update")
|
||||
.nodes;
|
||||
|
||||
assert_eq!(
|
||||
nodes.len(),
|
||||
2,
|
||||
"Expected only the root node and the button."
|
||||
);
|
||||
|
||||
nodes
|
||||
.iter()
|
||||
.find(|(_, node)| node.role() == Role::ToggleButton && node.name() == Some(button_text))
|
||||
.expect("Toggle button should exist in the accesskit output");
|
||||
}
|
Loading…
Reference in New Issue