Skip to content

Commit a1857e6

Browse files
committed
system testing: add a unit test to verify that the manual AccessibilityRole mapping is always complete
The enum is non-exhaustive, but we can do an additional run-time check.
1 parent 142b1eb commit a1857e6

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

internal/backends/testing/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,4 @@ pb-rs = { version = "0.10.0", optional = true, default-features = false }
3939
[dev-dependencies]
4040
slint = { workspace = true, default-features = false, features = ["std", "compat-1-2"] }
4141
i-slint-core-macros = { workspace = true }
42+
strum = { workspace = true }

internal/backends/testing/systest.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@ impl TestingClient {
213213
accessible_checkable: element.accessible_checkable().unwrap_or_default(),
214214
size: send_logical_size(element.size()).into(),
215215
absolute_position: send_logical_position(element.absolute_position()).into(),
216-
accessible_role: convert_accessible_role(element.accessible_role().unwrap()),
216+
accessible_role: convert_accessible_role(element.accessible_role().unwrap())
217+
.unwrap_or_default(),
217218
})
218219
}
219220

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

343-
fn convert_accessible_role(role: i_slint_core::items::AccessibleRole) -> proto::AccessibleRole {
344-
match role {
344+
fn convert_accessible_role(
345+
role: i_slint_core::items::AccessibleRole,
346+
) -> Option<proto::AccessibleRole> {
347+
Some(match role {
345348
i_slint_core::items::AccessibleRole::None => proto::AccessibleRole::Unknown,
346349
i_slint_core::items::AccessibleRole::Button => proto::AccessibleRole::Button,
347350
i_slint_core::items::AccessibleRole::Checkbox => proto::AccessibleRole::Checkbox,
@@ -359,6 +362,14 @@ fn convert_accessible_role(role: i_slint_core::items::AccessibleRole) -> proto::
359362
}
360363
i_slint_core::items::AccessibleRole::TextInput => proto::AccessibleRole::TextInput,
361364
i_slint_core::items::AccessibleRole::Switch => proto::AccessibleRole::Switch,
362-
_ => proto::AccessibleRole::Unknown,
365+
_ => return None,
366+
})
367+
}
368+
369+
#[test]
370+
fn test_accessibility_role_mapping_complete() {
371+
use strum::IntoEnumIterator;
372+
for role in i_slint_core::items::AccessibleRole::iter() {
373+
assert!(convert_accessible_role(role).is_some());
363374
}
364375
}

internal/core/items.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,7 @@ declare_item_vtable! {
14671467
macro_rules! declare_enums {
14681468
($( $(#[$enum_doc:meta])* enum $Name:ident { $( $(#[$value_doc:meta])* $Value:ident,)* })*) => {
14691469
$(
1470-
#[derive(Copy, Clone, Debug, PartialEq, Eq, strum::EnumString, strum::Display, Hash)]
1470+
#[derive(Copy, Clone, Debug, PartialEq, Eq, strum::EnumString, strum::Display, strum::EnumIter, Hash)]
14711471
#[repr(u32)]
14721472
#[strum(serialize_all = "kebab-case")]
14731473
$(#[$enum_doc])*

0 commit comments

Comments
 (0)