rktk-keymanager 0.2.0

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

#[test]
fn mouse_left_click_key() {
    let mut keymap = EMPTY_KEYMAP;
    keymap.layers[0].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));
    let mut expected = MOUSE_ONLY_REPORT;
    expected.mouse_report.as_mut().unwrap().buttons = 0x01;

    assert_eq!(report, expected, "Mouse left button key is pressed");
}

#[test]
fn layer_momentary_key() {
    let mut keymap = EMPTY_KEYMAP;
    keymap.layers[0].keymap[0][0] = KeyAction::Normal(KeyCode::Layer(LayerOp::Momentary(1)));

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

    let report = update!(state, time(0), (0, 0, true));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 1;
    assert_eq!(report, expected, "Momentary layer move 1 is pressed");

    let report = update!(state, time(0));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 1;
    assert_eq!(report, expected, "Momentary layer move 1 is still pressing");

    let report = update!(state, time(0), (0, 0, false));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 0;
    assert_eq!(report, expected, "Momentary layer move 1 is released");
}

#[test]
fn layer_toggle_key() {
    let mut keymap = EMPTY_KEYMAP;
    keymap.layers[0].keymap[0][0] = KeyAction::Normal(KeyCode::Layer(LayerOp::Toggle(1)));

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

    let report = update!(state, time(0), (0, 0, true));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 1;
    assert_eq!(report, expected, "Toggle 1 is pressed");

    let report = update!(state, time(0), (0, 0, false));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 1;
    assert_eq!(report, expected, "Toggle 1 released, still layer is 1");

    let report = update!(state, time(0), (0, 0, true));
    let mut expected = NONE_REPORT;
    expected.highest_layer = 0;
    assert_eq!(
        report, expected,
        "Toggle 1 is pressed again, layer is now 0"
    );
}