summaryrefslogtreecommitdiff
path: root/tests/tap_hold_configurations/default_mod_tap
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tap_hold_configurations/default_mod_tap')
-rw-r--r--tests/tap_hold_configurations/default_mod_tap/config.h2
-rw-r--r--tests/tap_hold_configurations/default_mod_tap/test_one_shot_layer.cpp248
-rw-r--r--tests/tap_hold_configurations/default_mod_tap/test_tap_hold.cpp48
3 files changed, 273 insertions, 25 deletions
diff --git a/tests/tap_hold_configurations/default_mod_tap/config.h b/tests/tap_hold_configurations/default_mod_tap/config.h
index 5955b8600a..f22448845e 100644
--- a/tests/tap_hold_configurations/default_mod_tap/config.h
+++ b/tests/tap_hold_configurations/default_mod_tap/config.h
@@ -18,4 +18,4 @@
#include "test_common.h"
-#define IGNORE_MOD_TAP_INTERRUPT \ No newline at end of file
+#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/tests/tap_hold_configurations/default_mod_tap/test_one_shot_layer.cpp b/tests/tap_hold_configurations/default_mod_tap/test_one_shot_layer.cpp
new file mode 100644
index 0000000000..8cbb57f33e
--- /dev/null
+++ b/tests/tap_hold_configurations/default_mod_tap/test_one_shot_layer.cpp
@@ -0,0 +1,248 @@
+#include "keyboard_report_util.hpp"
+#include "keycode.h"
+#include "test_common.hpp"
+#include "action_tapping.h"
+#include "test_fixture.hpp"
+#include "test_keymap_key.hpp"
+
+using testing::_;
+using testing::InSequence;
+
+class OneShotLayerModTap : public TestFixture {};
+
+TEST_F(OneShotLayerModTap, tap_mod_tap_hold_key) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+
+ set_keymap({osl_key, mod_tap_hold_key});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press mod-tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ mod_tap_hold_key.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(0);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
+TEST_F(OneShotLayerModTap, tap_and_hold_mod_tap_hold_key_tapping_term) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+
+ set_keymap({osl_key, mod_tap_hold_key});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
+ mod_tap_hold_key.press();
+ idle_for(TAPPING_TERM + 1);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release mod-tap-hold key */
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
+TEST_F(OneShotLayerModTap, tap_regular_key_while_mod_tap_key_is_held_tapping_term) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+ auto regular_key1 = KeymapKey(1, 2, 0, KC_1);
+
+ set_keymap({osl_key, mod_tap_hold_key, regular_key1});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
+ mod_tap_hold_key.press();
+ idle_for(TAPPING_TERM + 1);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press regular key */
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_1));
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
+ regular_key1.press();
+ run_one_scan_loop();
+ expect_layer_state(0);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release regular key */
+ EXPECT_NO_REPORT(driver);
+ regular_key1.release();
+ run_one_scan_loop();
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release mod-tap-hold key */
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_hold_key.release();
+ run_one_scan_loop();
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
+TEST_F(OneShotLayerModTap, tap_a_mod_tap_key_while_another_mod_tap_key_is_held_tapping_term) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto regular_key0 = KeymapKey(0, 2, 0, KC_0);
+ auto first_mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+ auto second_mod_tap_hold_key = KeymapKey(1, 2, 0, CTL_T(KC_B));
+
+ set_keymap({osl_key, regular_key0, first_mod_tap_hold_key, second_mod_tap_hold_key});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press first mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
+ first_mod_tap_hold_key.press();
+ idle_for(TAPPING_TERM + 1);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press second tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ second_mod_tap_hold_key.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release second tap-hold key */
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_B));
+ EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
+ second_mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(0);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release first mod-tap-hold key */
+ EXPECT_EMPTY_REPORT(driver);
+ first_mod_tap_hold_key.release();
+ run_one_scan_loop();
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
+TEST_F(OneShotLayerModTap, tap_regular_key_while_mod_tap_key_is_held) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+ auto regular_key0 = KeymapKey(0, 2, 0, KC_0);
+ auto regular_key1 = KeymapKey(1, 2, 0, KC_1);
+
+ set_keymap({osl_key, mod_tap_hold_key, regular_key0, regular_key1});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press mod-tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ mod_tap_hold_key.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press regular key */
+ EXPECT_NO_REPORT(driver);
+ regular_key1.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release regular key */
+ EXPECT_NO_REPORT(driver);
+ regular_key1.release();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_0));
+ EXPECT_EMPTY_REPORT(driver);
+ mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(0);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
+
+TEST_F(OneShotLayerModTap, tap_a_mod_tap_key_while_another_mod_tap_key_is_held) {
+ TestDriver driver;
+ InSequence s;
+ auto osl_key = KeymapKey{0, 0, 0, OSL(1)};
+ auto regular_key0 = KeymapKey(0, 2, 0, KC_0);
+ auto first_mod_tap_hold_key = KeymapKey(1, 1, 0, SFT_T(KC_A));
+ auto second_mod_tap_hold_key = KeymapKey(1, 2, 0, CTL_T(KC_B));
+
+ set_keymap({osl_key, regular_key0, first_mod_tap_hold_key, second_mod_tap_hold_key});
+
+ /* Set one shot layer */
+ tap_key(osl_key);
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press first mod-tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ first_mod_tap_hold_key.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Press second tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ second_mod_tap_hold_key.press();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release second tap-hold key */
+ EXPECT_NO_REPORT(driver);
+ second_mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(1);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+
+ /* Release first mod-tap-hold key */
+ EXPECT_REPORT(driver, (KC_A));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_0));
+ EXPECT_EMPTY_REPORT(driver);
+ first_mod_tap_hold_key.release();
+ run_one_scan_loop();
+ expect_layer_state(0);
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
diff --git a/tests/tap_hold_configurations/default_mod_tap/test_tap_hold.cpp b/tests/tap_hold_configurations/default_mod_tap/test_tap_hold.cpp
index b70efe4aed..6d82af6725 100644
--- a/tests/tap_hold_configurations/default_mod_tap/test_tap_hold.cpp
+++ b/tests/tap_hold_configurations/default_mod_tap/test_tap_hold.cpp
@@ -38,19 +38,19 @@ TEST_F(DefaultTapHold, tap_regular_key_while_mod_tap_key_is_held) {
EXPECT_NO_REPORT(driver);
mod_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Press regular key. */
EXPECT_NO_REPORT(driver);
regular_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release regular key. */
EXPECT_NO_REPORT(driver);
regular_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_REPORT(driver, (KC_P));
@@ -59,14 +59,14 @@ TEST_F(DefaultTapHold, tap_regular_key_while_mod_tap_key_is_held) {
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Idle for tapping term of mod tap hold key. */
idle_for(TAPPING_TERM - 3);
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}
-TEST_F(DefaultTapHold, tap_mod_tap_key_while_mod_tap_key_is_held) {
+TEST_F(DefaultTapHold, tap_a_mod_tap_key_while_another_mod_tap_key_is_held) {
TestDriver driver;
InSequence s;
auto first_mod_tap_hold_key = KeymapKey(0, 1, 0, SFT_T(KC_P));
@@ -78,19 +78,19 @@ TEST_F(DefaultTapHold, tap_mod_tap_key_while_mod_tap_key_is_held) {
EXPECT_NO_REPORT(driver);
first_mod_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Press second tap-hold key */
EXPECT_NO_REPORT(driver);
second_mod_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release second tap-hold key */
EXPECT_NO_REPORT(driver);
second_mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release first mod-tap-hold key */
EXPECT_REPORT(driver, (KC_P));
@@ -99,7 +99,7 @@ TEST_F(DefaultTapHold, tap_mod_tap_key_while_mod_tap_key_is_held) {
EXPECT_EMPTY_REPORT(driver);
first_mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}
TEST_F(DefaultTapHold, tap_regular_key_while_layer_tap_key_is_held) {
@@ -115,19 +115,19 @@ TEST_F(DefaultTapHold, tap_regular_key_while_layer_tap_key_is_held) {
EXPECT_NO_REPORT(driver);
layer_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Press regular key */
EXPECT_NO_REPORT(driver);
regular_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release regular key */
EXPECT_NO_REPORT(driver);
regular_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release layer-tap-hold key */
EXPECT_REPORT(driver, (KC_P));
@@ -136,7 +136,7 @@ TEST_F(DefaultTapHold, tap_regular_key_while_layer_tap_key_is_held) {
EXPECT_EMPTY_REPORT(driver);
layer_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}
TEST_F(DefaultTapHold, tap_mod_tap_hold_key_two_times) {
@@ -150,26 +150,26 @@ TEST_F(DefaultTapHold, tap_mod_tap_hold_key_two_times) {
EXPECT_NO_REPORT(driver);
mod_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_REPORT(driver, (KC_P));
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Press mod-tap-hold key again. */
EXPECT_REPORT(driver, (KC_P));
mod_tap_hold_key.press();
idle_for(TAPPING_TERM);
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}
TEST_F(DefaultTapHold, tap_mod_tap_hold_key_twice_and_hold_on_second_time) {
@@ -183,26 +183,26 @@ TEST_F(DefaultTapHold, tap_mod_tap_hold_key_twice_and_hold_on_second_time) {
EXPECT_NO_REPORT(driver);
mod_tap_hold_key.press();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_REPORT(driver, (KC_P));
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Press mod-tap-hold key again. */
EXPECT_REPORT(driver, (KC_P));
mod_tap_hold_key.press();
idle_for(TAPPING_TERM);
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}
TEST_F(DefaultTapHold, tap_and_hold_mod_tap_hold_key) {
@@ -216,11 +216,11 @@ TEST_F(DefaultTapHold, tap_and_hold_mod_tap_hold_key) {
EXPECT_REPORT(driver, (KC_LEFT_SHIFT));
mod_tap_hold_key.press();
idle_for(TAPPING_TERM + 1);
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
/* Release mod-tap-hold key. */
EXPECT_EMPTY_REPORT(driver);
mod_tap_hold_key.release();
run_one_scan_loop();
- testing::Mock::VerifyAndClearExpectations(&driver);
+ VERIFY_AND_CLEAR(driver);
}