rktk-keymanager 0.2.0

Keymap/state manager for self-made keyboard firmware
Documentation
use super::prelude::*;
use pretty_assertions::assert_eq;

#[test]
fn layer_change_during_press() {
    let mut keymap = EMPTY_KEYMAP;
    keymap.layers[0].keymap[0][0] = KeyAction::Normal(KeyCode::Key(Key::A));
    keymap.layers[1].keymap[0][0] = KeyAction::Normal(KeyCode::Mouse(Mouse::MLeft));

    let mut state = new_state(keymap);
    let _ = update!(state, time(0));

    let report = update!(state, time(0), (0, 0, true));
    assert_eq!(
        report,
        report_with_keycodes([0x04, 0, 0, 0, 0, 0]),
        "Key 'A' at layer 0 is pressed"
    );

    let _report = state.update(InputEvent::Mouse((20, 10)), time(50));
    assert_eq!(
        state.inner().shared.layer_active,
        [false, true, false, false, false],
        "Aml activated"
    );

    let report = update!(state, time(200), (0, 0, false));
    assert_eq!(
        report.keyboard_report.unwrap().keycodes,
        [0, 0, 0, 0, 0, 0],
        "Key released"
    );

    let _report = state.update(InputEvent::None, time(1000));
    assert_eq!(
        state.inner().shared.layer_active,
        [false, false, false, false, false],
        "Aml deactivated"
    );
}