Skip to content

Commit

Permalink
system testing: add a unit test to verify that the manual Accessibili…
Browse files Browse the repository at this point in the history
…tyRole mapping is always complete

The enum is non-exhaustive, but we can do an additional run-time check.
  • Loading branch information
tronical committed Jun 14, 2024
1 parent 142b1eb commit a1857e6
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
1 change: 1 addition & 0 deletions internal/backends/testing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,4 @@ pb-rs = { version = "0.10.0", optional = true, default-features = false }
[dev-dependencies]
slint = { workspace = true, default-features = false, features = ["std", "compat-1-2"] }
i-slint-core-macros = { workspace = true }
strum = { workspace = true }
19 changes: 15 additions & 4 deletions internal/backends/testing/systest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ impl TestingClient {
accessible_checkable: element.accessible_checkable().unwrap_or_default(),
size: send_logical_size(element.size()).into(),
absolute_position: send_logical_position(element.absolute_position()).into(),
accessible_role: convert_accessible_role(element.accessible_role().unwrap()),
accessible_role: convert_accessible_role(element.accessible_role().unwrap())
.unwrap_or_default(),
})
}

Expand Down Expand Up @@ -340,8 +341,10 @@ fn send_logical_position(pos: i_slint_core::api::LogicalPosition) -> proto::Logi
proto::LogicalPosition { x: pos.x, y: pos.y }
}

fn convert_accessible_role(role: i_slint_core::items::AccessibleRole) -> proto::AccessibleRole {
match role {
fn convert_accessible_role(
role: i_slint_core::items::AccessibleRole,
) -> Option<proto::AccessibleRole> {
Some(match role {
i_slint_core::items::AccessibleRole::None => proto::AccessibleRole::Unknown,
i_slint_core::items::AccessibleRole::Button => proto::AccessibleRole::Button,
i_slint_core::items::AccessibleRole::Checkbox => proto::AccessibleRole::Checkbox,
Expand All @@ -359,6 +362,14 @@ fn convert_accessible_role(role: i_slint_core::items::AccessibleRole) -> proto::
}
i_slint_core::items::AccessibleRole::TextInput => proto::AccessibleRole::TextInput,
i_slint_core::items::AccessibleRole::Switch => proto::AccessibleRole::Switch,
_ => proto::AccessibleRole::Unknown,
_ => return None,
})
}

#[test]
fn test_accessibility_role_mapping_complete() {
use strum::IntoEnumIterator;
for role in i_slint_core::items::AccessibleRole::iter() {
assert!(convert_accessible_role(role).is_some());
}
}
2 changes: 1 addition & 1 deletion internal/core/items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1467,7 +1467,7 @@ declare_item_vtable! {
macro_rules! declare_enums {
($( $(#[$enum_doc:meta])* enum $Name:ident { $( $(#[$value_doc:meta])* $Value:ident,)* })*) => {
$(
#[derive(Copy, Clone, Debug, PartialEq, Eq, strum::EnumString, strum::Display, Hash)]
#[derive(Copy, Clone, Debug, PartialEq, Eq, strum::EnumString, strum::Display, strum::EnumIter, Hash)]
#[repr(u32)]
#[strum(serialize_all = "kebab-case")]
$(#[$enum_doc])*
Expand Down

0 comments on commit a1857e6

Please sign in to comment.