cranpose-ui 0.19.0

Composable widgets, text, layouts and input for Cranpose apps
Documentation
use super::*;

#[test]
fn key_event_creation() {
    let event = KeyEvent::key_down(Key::A, "a");
    assert_eq!(event.key(), Key::A);
    assert_eq!(event.text(), "a");
    assert!(event.is_key_down());
    assert!(event.has_text());
}

#[test]
fn key_event_with_modifiers() {
    let modifiers = Modifiers {
        shift: true,
        ctrl: false,
        alt: false,
        meta: false,
    };
    let event = KeyEvent::key_down_with_modifiers(Key::A, "A", modifiers);
    assert_eq!(event.text(), "A");
    assert!(event.modifiers().shift);
}

#[test]
fn backspace_has_no_text() {
    let event = KeyEvent::key_down(Key::Backspace, "");
    assert!(!event.has_text());
}

#[test]
fn dom_codes_name_their_physical_keys() {
    assert_eq!(Key::from_dom_code("KeyA"), Key::A);
    assert_eq!(Key::from_dom_code("Digit7"), Key::Seven);
    assert_eq!(Key::from_dom_code("F12"), Key::F12);
    assert_eq!(Key::from_dom_code("ArrowLeft"), Key::DirectionLeft);
    assert_eq!(Key::from_dom_code("PageDown"), Key::PageDown);
    assert_eq!(Key::from_dom_code("ShiftRight"), Key::ShiftRight);
    assert_eq!(Key::from_dom_code("MetaLeft"), Key::MetaLeft);
    assert_eq!(Key::from_dom_code("Backquote"), Key::Grave);
}

#[test]
fn media_codes_name_remote_keys() {
    assert_eq!(Key::from_dom_code("MediaPlayPause"), Key::MediaPlayPause);
    assert_eq!(Key::from_dom_code("MediaTrackNext"), Key::MediaNext);
    assert_eq!(Key::from_dom_code("ContextMenu"), Key::Menu);
}

#[test]
fn numpad_enter_is_its_own_key_and_unmapped_codes_are_unknown() {
    assert_eq!(Key::from_dom_code("NumpadEnter"), Key::NumPadEnter);
    assert_eq!(Key::from_dom_code("Numpad5"), Key::Unknown);
    assert_eq!(Key::from_dom_code("keya"), Key::Unknown);
    assert_eq!(Key::from_dom_code(""), Key::Unknown);
}

#[test]
fn a_tv_browser_remote_reads_by_code_then_key_value_then_back_key_code() {
    assert_eq!(
        Key::from_dom_event("ArrowUp", "ArrowUp", 38),
        Key::DirectionUp
    );
    assert_eq!(Key::from_dom_event("", "GoBack", 0), Key::Back);
    assert_eq!(Key::from_dom_event("", "XF86Back", 10009), Key::Back);
    assert_eq!(
        Key::from_dom_event("", "", 461),
        Key::Back,
        "webOS sends only the code"
    );
    assert_eq!(
        Key::from_dom_event("", "MediaPlayPause", 0),
        Key::MediaPlayPause
    );
    assert_eq!(Key::from_dom_event("", "ColorF0Red", 0), Key::ProgramRed);
    assert_eq!(Key::from_dom_event("", "Unidentified", 0), Key::Unknown);
}