cranpose-ui 0.1.141

UI primitives for Cranpose
Documentation
use super::*;

#[test]
fn controls_and_containers_define_merge_boundaries() {
    let mut node = SemanticsNode::default();
    assert!(!node.merges_accessibility_descendants());
    assert!(!node.is_accessibility_boundary());
    node.widget_role = Some(SemanticsWidgetRole::List);
    assert!(node.is_accessibility_boundary());
    assert!(!node.merges_accessibility_descendants());
    node.focusable = true;
    assert!(node.merges_accessibility_descendants());
}

#[test]
fn invalid_and_signed_zero_indices_keep_stable_order() {
    let node = SemanticsNode {
        children: [f32::NAN, -0.0, f32::INFINITY, 0.0, -1.0]
            .into_iter()
            .enumerate()
            .map(|(node_id, traversal_index)| SemanticsNode {
                node_id,
                traversal_index,
                ..SemanticsNode::default()
            })
            .collect(),
        ..SemanticsNode::default()
    };
    assert_eq!(
        node.accessibility_children()
            .iter()
            .map(|child| child.node_id)
            .collect::<Vec<_>>(),
        [4, 0, 1, 2, 3]
    );
}

#[test]
fn accessible_labels_hide_secrets_and_preserve_an_empty_field() {
    let mut node = SemanticsNode {
        editable_text: true,
        ..SemanticsNode::default()
    };
    assert_eq!(node.accessibility_label().as_deref(), Some(""));
    node.password = true;
    node.description = Some("secret".into());
    node.text = node.description.clone();
    assert_eq!(node.accessibility_label().as_deref(), Some("password"));
    node.description = Some("Passphrase".into());
    assert_eq!(node.accessibility_label().as_deref(), Some("Passphrase"));
    node.hidden = true;
    assert_eq!(node.accessibility_label(), None);
}

#[test]
fn password_semantics_never_use_the_displayed_text_as_a_name() {
    let node = SemanticsNode {
        password: true,
        role: SemanticsRole::Text {
            value: "secret".into(),
        },
        ..SemanticsNode::default()
    };
    assert_eq!(node.accessibility_label().as_deref(), Some("password"));
}