diff options
author | Albert Y <76888457+filterpaper@users.noreply.github.com> | 2022-12-12 23:52:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-12 16:52:22 +0100 |
commit | cbabc8dbe6a8476d3082e8bc649d330f87e7b904 (patch) | |
tree | 55e73275367047981295d046867d9f70352814c7 /tests | |
parent | 8698d109d7c2f4554e0f3c01b017738a0a47f162 (diff) |
[Core] Replace Tapping Force Hold feature with Quick Tap Term (#17007)
* Replace Tapping Force Hold feature with Quick Tap Term
* Replace keyboard level TAPPING_FORCE_HOLD with QUICK_TAP_TERM 0
* Deprecate force hold in info_config.json
* Before and after quick tap term unit tests
* Quick tap unit tests iteration
* Keymap config.h correction
* Remove TAPPING_FORCE_HOLD_PER_KEY macros that were missed
* Add two more test cases for quick tap
* Replace TAPPING_FORCE_HOLD with QUICK_TAP_TERM in configs #2
* Replace TAPPING_FORCE_HOLD_PER_KEY with QUICK_TAP_TERM_PER_KEY in configs #2
* Add function declaration for get_quick_tap_term
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/tap_hold_configurations/quick_tap/config.h (renamed from tests/tap_hold_configurations/tapping_force_hold/config.h) | 2 | ||||
-rw-r--r-- | tests/tap_hold_configurations/quick_tap/test.mk (renamed from tests/tap_hold_configurations/tapping_force_hold/test.mk) | 0 | ||||
-rw-r--r-- | tests/tap_hold_configurations/quick_tap/test_action_layer.cpp (renamed from tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp) | 2 | ||||
-rw-r--r-- | tests/tap_hold_configurations/quick_tap/test_quick_tap.cpp (renamed from tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp) | 180 |
4 files changed, 132 insertions, 52 deletions
diff --git a/tests/tap_hold_configurations/tapping_force_hold/config.h b/tests/tap_hold_configurations/quick_tap/config.h index 3b4646338a..cd82d3b5a5 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/config.h +++ b/tests/tap_hold_configurations/quick_tap/config.h @@ -18,4 +18,4 @@ #include "test_common.h" -#define TAPPING_FORCE_HOLD
\ No newline at end of file +#define QUICK_TAP_TERM 100 diff --git a/tests/tap_hold_configurations/tapping_force_hold/test.mk b/tests/tap_hold_configurations/quick_tap/test.mk index efecca2c22..efecca2c22 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/test.mk +++ b/tests/tap_hold_configurations/quick_tap/test.mk diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp b/tests/tap_hold_configurations/quick_tap/test_action_layer.cpp index 965c702d7a..9c3b38050a 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/test_action_layer.cpp +++ b/tests/tap_hold_configurations/quick_tap/test_action_layer.cpp @@ -40,6 +40,8 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) { run_one_scan_loop(); expect_layer_state(0); + idle_for(QUICK_TAP_TERM + 10); + layer_key.press(); run_one_scan_loop(); layer_key.release(); diff --git a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp b/tests/tap_hold_configurations/quick_tap/test_quick_tap.cpp index 604f9a4a54..be43f8e6c4 100644 --- a/tests/tap_hold_configurations/tapping_force_hold/test_tap_hold.cpp +++ b/tests/tap_hold_configurations/quick_tap/test_quick_tap.cpp @@ -1,4 +1,3 @@ - /* Copyright 2021 Stefan Kerkmann * * This program is free software: you can redistribute it and/or modify @@ -15,6 +14,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "config.h" #include "keyboard_report_util.hpp" #include "keycode.h" #include "test_common.hpp" @@ -25,19 +25,19 @@ using testing::_; using testing::InSequence; -class TappingForceHold : public TestFixture {}; +class QuickTap : public TestFixture {}; -TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) { +TEST_F(QuickTap, tap_regular_key_while_mod_tap_key_is_held) { TestDriver driver; InSequence s; - auto mod_tap_hold_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); auto regular_key = KeymapKey(0, 2, 0, KC_A); - set_keymap({mod_tap_hold_key, regular_key}); + set_keymap({mod_tap_key, regular_key}); - /* Press mod-tap-hold key. */ + /* Press mod-tap key. */ EXPECT_NO_REPORT(driver); - mod_tap_hold_key.press(); + mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); @@ -53,9 +53,9 @@ TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) { run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release mod-tap-hold key. */ + /* Release mod-tap key. */ EXPECT_REPORT(driver, (KC_LSFT)); - mod_tap_hold_key.release(); + mod_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); @@ -67,39 +67,39 @@ TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) { testing::Mock::VerifyAndClearExpectations(&driver); } -TEST_F(TappingForceHold, tap_mod_tap_key_while_mod_tap_key_is_held) { +TEST_F(QuickTap, tap_mod_tap_key_while_mod_tap_key_is_held) { TestDriver driver; InSequence s; - auto first_mod_tap_hold_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); - auto second_mod_tap_hold_key = KeymapKey(0, 2, 0, RSFT_T(KC_A)); + auto first_mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + auto second_mod_tap_key = KeymapKey(0, 2, 0, RSFT_T(KC_A)); - set_keymap({first_mod_tap_hold_key, second_mod_tap_hold_key}); + set_keymap({first_mod_tap_key, second_mod_tap_key}); - /* Press first mod-tap-hold key */ + /* Press first mod-tap key */ EXPECT_NO_REPORT(driver); - first_mod_tap_hold_key.press(); + first_mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Press second tap-hold key */ + /* Press second mod-tap key */ EXPECT_NO_REPORT(driver); - second_mod_tap_hold_key.press(); + second_mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); /* Release second tap-hold key */ EXPECT_NO_REPORT(driver); - second_mod_tap_hold_key.release(); + second_mod_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release first mod-tap-hold key */ + /* Release first mod-tap key */ EXPECT_REPORT(driver, (KC_LSFT)); - first_mod_tap_hold_key.release(); + first_mod_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Idle for tapping term of first mod tap hold key. */ + /* Idle for tapping term of first mod-tap key. */ EXPECT_REPORT(driver, (KC_LSFT, KC_A)); EXPECT_REPORT(driver, (KC_LSFT)); EXPECT_EMPTY_REPORT(driver); @@ -107,18 +107,18 @@ TEST_F(TappingForceHold, tap_mod_tap_key_while_mod_tap_key_is_held) { testing::Mock::VerifyAndClearExpectations(&driver); } -TEST_F(TappingForceHold, tap_regular_key_while_layer_tap_key_is_held) { +TEST_F(QuickTap, tap_regular_key_while_layer_tap_key_is_held) { TestDriver driver; InSequence s; - auto layer_tap_hold_key = KeymapKey(0, 1, 0, LT(1, KC_P)); + auto layer_tap_key = KeymapKey(0, 1, 0, LT(1, KC_P)); auto regular_key = KeymapKey(0, 2, 0, KC_A); auto layer_key = KeymapKey(1, 2, 0, KC_B); - set_keymap({layer_tap_hold_key, regular_key, layer_key}); + set_keymap({layer_tap_key, regular_key, layer_key}); - /* Press layer-tap-hold key */ + /* Press layer-tap key */ EXPECT_NO_REPORT(driver); - layer_tap_hold_key.press(); + layer_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); @@ -134,80 +134,158 @@ TEST_F(TappingForceHold, tap_regular_key_while_layer_tap_key_is_held) { run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release layer-tap-hold key */ + /* Release layer-tap key */ EXPECT_REPORT(driver, (KC_P)); EXPECT_REPORT(driver, (KC_A, KC_P)); EXPECT_REPORT(driver, (KC_P)); EXPECT_EMPTY_REPORT(driver); - layer_tap_hold_key.release(); + layer_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); } -TEST_F(TappingForceHold, tap_mod_tap_hold_key_two_times) { +TEST_F(QuickTap, tap_key_and_tap_again_before_quick_tap_term) { TestDriver driver; InSequence s; - auto mod_tap_hold_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); - set_keymap({mod_tap_hold_key}); + set_keymap({mod_tap_key}); - /* Press mod-tap-hold key. */ + /* Press mod-tap key. */ EXPECT_NO_REPORT(driver); - mod_tap_hold_key.press(); + mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release mod-tap-hold key. */ + /* Release mod-tap key. */ EXPECT_REPORT(driver, (KC_P)); EXPECT_EMPTY_REPORT(driver); - mod_tap_hold_key.release(); + mod_tap_key.release(); + idle_for(QUICK_TAP_TERM - 10); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Press mod-tap-hold key again. */ + /* Press and tap mod-tap key again. */ + EXPECT_REPORT(driver, (KC_P)); + mod_tap_key.press(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Release mod-tap key. */ + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); +} + +TEST_F(QuickTap, tap_key_and_hold_again_before_quick_tap_term) { + TestDriver driver; + InSequence s; + auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + + set_keymap({mod_tap_key}); + + /* Press mod-tap key. */ EXPECT_NO_REPORT(driver); - mod_tap_hold_key.press(); + mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release mod-tap-hold key. */ + /* Release mod-tap key. */ EXPECT_REPORT(driver, (KC_P)); EXPECT_EMPTY_REPORT(driver); - mod_tap_hold_key.release(); + mod_tap_key.release(); + idle_for(QUICK_TAP_TERM - 10); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Press and hold mod-tap key again. */ + EXPECT_REPORT(driver, (KC_P)); + mod_tap_key.press(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Wait until tapping term expired */ + EXPECT_NO_REPORT(driver); + idle_for(TAPPING_TERM); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Release mod-tap key. */ + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); } -TEST_F(TappingForceHold, tap_mod_tap_hold_key_twice_and_hold_on_second_time) { + +TEST_F(QuickTap, tap_key_and_tap_again_after_quick_tap_term) { TestDriver driver; InSequence s; - auto mod_tap_hold_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); - set_keymap({mod_tap_hold_key}); + set_keymap({mod_tap_key}); - /* Press mod-tap-hold key. */ + /* Press mod-tap key. */ EXPECT_NO_REPORT(driver); - mod_tap_hold_key.press(); + mod_tap_key.press(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release mod-tap-hold key. */ + /* Release mod-tap key. */ EXPECT_REPORT(driver, (KC_P)); EXPECT_EMPTY_REPORT(driver); - mod_tap_hold_key.release(); + mod_tap_key.release(); + idle_for(QUICK_TAP_TERM + 10); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); - /* Press mod-tap-hold key again. */ + /* Press mod-tap key again. */ EXPECT_NO_REPORT(driver); - mod_tap_hold_key.press(); + mod_tap_key.press(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Release mod-tap key. */ + EXPECT_REPORT(driver, (KC_P)); + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); +} + +TEST_F(QuickTap, tap_key_and_hold_again_after_quick_tap_term) { + TestDriver driver; + InSequence s; + auto mod_tap_key = KeymapKey(0, 1, 0, SFT_T(KC_P)); + + set_keymap({mod_tap_key}); + + /* Press mod-tap key. */ + EXPECT_NO_REPORT(driver); + mod_tap_key.press(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Release mod-tap key. */ + EXPECT_REPORT(driver, (KC_P)); + EXPECT_EMPTY_REPORT(driver); + mod_tap_key.release(); + idle_for(QUICK_TAP_TERM + 10); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Press and hold mod-tap key again. */ + EXPECT_NO_REPORT(driver); + mod_tap_key.press(); + run_one_scan_loop(); + testing::Mock::VerifyAndClearExpectations(&driver); + + /* Wait until tapping term expired */ + EXPECT_REPORT(driver, (KC_LSFT)); idle_for(TAPPING_TERM); testing::Mock::VerifyAndClearExpectations(&driver); - /* Release mod-tap-hold key. */ - EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); + /* Release mod-tap key. */ EXPECT_EMPTY_REPORT(driver); - mod_tap_hold_key.release(); + mod_tap_key.release(); run_one_scan_loop(); testing::Mock::VerifyAndClearExpectations(&driver); } |