diff --git a/tests/features/events/keyboard-state/release-cleared/release-cleared.ino b/tests/features/events/keyboard-state/release-cleared/release-cleared.ino index b3d4c0c5..cc63cb1d 100644 --- a/tests/features/events/keyboard-state/release-cleared/release-cleared.ino +++ b/tests/features/events/keyboard-state/release-cleared/release-cleared.ino @@ -64,16 +64,16 @@ namespace plugin { class ConvertXtoY : public kaleidoscope::Plugin { public: - EventHandlerResult onKeyswitchEvent(Key &key, KeyAddr key_addr, uint8_t key_state) { - if (keyToggledOn(key_state)) { - if (key == Key_X) - key = Key_Y; + EventHandlerResult onKeyEvent(KeyEvent &event) { + if (keyToggledOn(event.state)) { + if (event.key == Key_X) + event.key = Key_Y; } // It should be impossible to get a `Key_X` at this point, because the // previous block changes any `Key_X` to `Key_Y`, which results in the // active keys cache storing that value. On subsequent cycles (while the key // is still pressed), the `key` value should be `Key_Y`. - if (keyIsPressed(key_state) && key == Key_X) { + if (keyIsPressed(event.state) && event.key == Key_X) { std::cerr << "t=" << Runtime.millisAtCycleStart() << ": " << "Error: we shouldn't see a key with value `X`" << std::endl; } @@ -81,7 +81,7 @@ class ConvertXtoY : public kaleidoscope::Plugin { // active keys cache entry should be cleared. If it's not, then a subsequent // press of the same key without the layer shift in effect will still result // in `Key_Y` instead of `Key_A`. - if (keyToggledOff(key_state) && (key == Key_Y)) { + if (keyToggledOff(event.state) && (event.key == Key_Y)) { return EventHandlerResult::EVENT_CONSUMED; } return EventHandlerResult::OK; diff --git a/tests/features/events/keyboard-state/release-cleared/test.ktest b/tests/features/events/keyboard-state/release-cleared/test.ktest index d44f6d4c..778e4b85 100644 --- a/tests/features/events/keyboard-state/release-cleared/test.ktest +++ b/tests/features/events/keyboard-state/release-cleared/test.ktest @@ -7,24 +7,21 @@ KEYSWITCH LAYER_SHIFT 1 0 # Keyboard state array NAME Keyboard state cleared -RUN 10 ms - +RUN 4 ms PRESS A RUN 1 cycle EXPECT keyboard-report Key_A # Report should contain only `A` -RUN 5 ms - +RUN 4 ms RELEASE A RUN 1 cycle EXPECT keyboard-report empty # Report should be empty RUN 5 ms - # Press and hold `ShiftToLayer(1)`, changing the `A` key to `X` PRESS LAYER_SHIFT -RUN 5 ms +RUN 4 ms # Press `X`, which gets converted to `Y` by the `ConvertXtoY` plugin defined in # the sketch. The plugin simply changes the value of the key, which causes it to # get set to `Key_Y` in the keyboard state array. @@ -37,23 +34,25 @@ RUN 5 ms # Release the `X` key (on Layer 1), which has become a `Y` key in the keyboard # state array. This should clear its entry. RELEASE A -RUN 1 cycle -EXPECT keyboard-report empty # Report should be empty - -RUN 5 ms +# No report is expected here, however, because the release should trigger the +# `ConvertXtoY` plugin to return `EVENT_CONSUMED`. The active keys cache should +# be updated, but there shouldn't be a report. +RUN 4 ms # Release `ShiftToLayer(1)`. This should restore the `A` key to its base layer # value on subsequent presses, unless the Macros key gets "stuck" in the # keyboard state array because it returns `EVENT_CONSUMED`. RELEASE LAYER_SHIFT -RUN 5 ms +RUN 1 cycle +# Now we still don't expect a report, because pressing or releasing a +# layer-change key doesn't trigger a keyboard HID report. +RUN 4 ms PRESS A RUN 1 cycle EXPECT keyboard-report Key_A # Report should contain only `A` -RUN 5 ms - +RUN 4 ms RELEASE A RUN 1 cycle EXPECT keyboard-report empty # Report should be empty