rktk-keymanager 0.2.0

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

#[test]
pub fn first_empty_second_none() {
    let mut state = new_state(EMPTY_KEYMAP);

    let report = update!(state, time(0));
    assert_eq!(report, NONE_REPORT, "Nothing happens");

    let report = update!(state, time(0));
    assert_eq!(report, NONE_REPORT, "Nothing happens, second");
}

#[test]
pub fn key_press_release() {
    let mut keymap = EMPTY_KEYMAP;
    keymap.layers[0].keymap[0][0] = KeyAction::Normal(KeyCode::Key(Key::A));
    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' pressed"
    );

    let report = update!(state, time(0), (0, 0, false));
    assert_eq!(report, KEYBOARD_ONLY_REPORT, "Key 'a' released");
}