From dbf46d83e0157ee30e9c0836d93e4ffe913fdf17 Mon Sep 17 00:00:00 2001 From: Michael Richters Date: Wed, 18 Nov 2020 23:00:46 -0600 Subject: [PATCH] Add testcase for TapDance issue #922 Signed-off-by: Michael Richters --- tests/issues/922/922.ino | 72 +++++++++++++++++++++ tests/issues/922/common.h | 27 ++++++++ tests/issues/922/sketch.json | 6 ++ tests/issues/922/test.ktest | 121 +++++++++++++++++++++++++++++++++++ 4 files changed, 226 insertions(+) create mode 100644 tests/issues/922/922.ino create mode 100644 tests/issues/922/common.h create mode 100644 tests/issues/922/sketch.json create mode 100644 tests/issues/922/test.ktest diff --git a/tests/issues/922/922.ino b/tests/issues/922/922.ino new file mode 100644 index 00000000..bb3eaaa4 --- /dev/null +++ b/tests/issues/922/922.ino @@ -0,0 +1,72 @@ +/* -*- mode: c++ -*- + * Copyright (C) 2020 Keyboard.io, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include +#include + +#include "./common.h" + +#undef min +#undef max +#include + +// *INDENT-OFF* +KEYMAPS( + [0] = KEYMAP_STACKED + ( + TD(0), TD(1), ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, + ___, + + ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, ___, ___, ___, + ___, ___, ___, ___, + ___ + ), +) +// *INDENT-ON* + +void tapDanceAction(uint8_t tap_dance_index, + KeyAddr key_addr, + uint8_t tap_count, + kaleidoscope::plugin::TapDance::ActionType tap_dance_action) { + switch (tap_dance_index) { + case 0: + return tapDanceActionKeys(tap_count, tap_dance_action, + Key_A, Key_X); + case 1: + return tapDanceActionKeys(tap_count, tap_dance_action, + Key_B, Key_Y); + default: + break; + } +} + +KALEIDOSCOPE_INIT_PLUGINS(TapDance); + +void setup() { + Kaleidoscope.setup(); + TapDance.time_out = 25; +} + +void loop() { + Kaleidoscope.loop(); +} diff --git a/tests/issues/922/common.h b/tests/issues/922/common.h new file mode 100644 index 00000000..dcfcc35b --- /dev/null +++ b/tests/issues/922/common.h @@ -0,0 +1,27 @@ +// -*- mode: c++ -*- + +/* Kaleidoscope - Firmware for computer input devices + * Copyright (C) 2020 Keyboard.io, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include + +namespace kaleidoscope { +namespace testing { + +} // namespace testing +} // namespace kaleidoscope diff --git a/tests/issues/922/sketch.json b/tests/issues/922/sketch.json new file mode 100644 index 00000000..43dc4c7e --- /dev/null +++ b/tests/issues/922/sketch.json @@ -0,0 +1,6 @@ +{ + "cpu": { + "fqbn": "keyboardio:virtual:model01", + "port": "" + } +} \ No newline at end of file diff --git a/tests/issues/922/test.ktest b/tests/issues/922/test.ktest new file mode 100644 index 00000000..ce7c683c --- /dev/null +++ b/tests/issues/922/test.ktest @@ -0,0 +1,121 @@ +VERSION 1 + +KEYSWITCH TD_0 0 0 +KEYSWITCH TD_1 0 1 + +# ============================================================================== +NAME TapDance to TapDance rollover left to right + +RUN 5 ms +PRESS TD_0 +RUN 5 ms +PRESS TD_1 +RUN 1 cycle +EXPECT keyboard-report Key_A # TD_0 should be interrupted, yielding `A` +RUN 4 ms +RELEASE TD_0 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_0 release +RUN 4 ms +RELEASE TD_1 +RUN 18 ms +EXPECT keyboard-report Key_B # TD_1 should time out, yielding `B` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_1 timeout +RUN 11 ms + +RUN 5 ms +PRESS TD_0 +RUN 5 ms +PRESS TD_1 +RUN 1 cycle +EXPECT keyboard-report Key_A # TD_0 should be interrupted, yielding `A` +RUN 4 ms +RELEASE TD_0 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_0 release +RUN 4 ms +RELEASE TD_1 +RUN 18 ms +EXPECT keyboard-report Key_B # TD_1 should time out, yielding `B` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_1 timeout +RUN 11 ms + +# ============================================================================== +NAME TapDance to TapDance rollover right to left + +RUN 5 ms +PRESS TD_1 +RUN 5 ms +PRESS TD_0 +RUN 1 cycle +EXPECT keyboard-report Key_B # TD_1 should be interrupted, yielding `B` +RUN 4 ms +RELEASE TD_1 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_1 release +RUN 4 ms +RELEASE TD_0 +RUN 18 ms +EXPECT keyboard-report Key_A # TD_0 should time out, yielding `A` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_0 timeout +RUN 11 ms + +RUN 5 ms +PRESS TD_1 +RUN 5 ms +PRESS TD_0 +RUN 1 cycle +EXPECT keyboard-report Key_B # TD_1 should be interrupted, yielding `B` +RUN 4 ms +RELEASE TD_1 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_1 release +RUN 4 ms +RELEASE TD_0 +RUN 18 ms +EXPECT keyboard-report Key_A # TD_0 should time out, yielding `A` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_0 timeout +RUN 11 ms + +# ============================================================================== +NAME TapDance to TapDance rollover back and forth + +RUN 5 ms +PRESS TD_0 +RUN 5 ms +PRESS TD_1 +RUN 1 cycle +EXPECT keyboard-report Key_A # TD_0 should be interrupted, yielding `A` +RUN 4 ms +RELEASE TD_0 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_0 release +RUN 4 ms +RELEASE TD_1 +RUN 18 ms +EXPECT keyboard-report Key_B # TD_1 should time out, yielding `B` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_1 timeout +RUN 11 ms + +RUN 5 ms +PRESS TD_1 +RUN 5 ms +PRESS TD_0 +RUN 1 cycle +EXPECT keyboard-report Key_B # TD_1 should be interrupted, yielding `B` +RUN 4 ms +RELEASE TD_1 +RUN 1 cycle +EXPECT keyboard-report empty # Empty report on TD_1 release +RUN 4 ms +RELEASE TD_0 +RUN 18 ms +EXPECT keyboard-report Key_A # TD_0 should time out, yielding `A` +RUN 1 cycle +EXPECT keyboard-report empty # Empty report after TD_0 timeout +RUN 11 ms