summaryrefslogtreecommitdiffstats
path: root/tests/tap_dance/test_examples.cpp
diff options
context:
space:
mode:
authorleep-frog <66687468+leep-frog@users.noreply.github.com>2023-07-27 00:04:35 -0400
committerGitHub <noreply@github.com>2023-07-26 21:04:35 -0700
commit2c70d3891002337ef981a478b95c621f68dfd777 (patch)
tree537fdd4df00101b3a6a446383254363613af538b /tests/tap_dance/test_examples.cpp
parent821db155f20f441c2d3aa6ff4e10878bfccdf45c (diff)
On-each-release tap dance function (#20255)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Diffstat (limited to 'tests/tap_dance/test_examples.cpp')
-rw-r--r--tests/tap_dance/test_examples.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/tap_dance/test_examples.cpp b/tests/tap_dance/test_examples.cpp
index 6dabc45513..7858dab92b 100644
--- a/tests/tap_dance/test_examples.cpp
+++ b/tests/tap_dance/test_examples.cpp
@@ -316,3 +316,119 @@ TEST_F(TapDance, QuadFunction) {
EXPECT_EMPTY_REPORT(driver);
run_one_scan_loop();
}
+
+TEST_F(TapDance, DanceFnAdvancedWithRelease) {
+ TestDriver driver;
+ InSequence s;
+ auto key_rls = KeymapKey(0, 1, 0, TD(TD_RELEASE));
+
+ set_keymap({key_rls});
+
+ /* Single press and unpress */
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ EXPECT_REPORT(driver, (KC_F));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_R));
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(TAPPING_TERM);
+ run_one_scan_loop();
+
+ /* Double press and unpress */
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ EXPECT_REPORT(driver, (KC_F));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_R));
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(TAPPING_TERM);
+ run_one_scan_loop();
+
+ /* Unpress after tapping term has elapsed (key is registered as held) */
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ EXPECT_REPORT(driver, (KC_F));
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(TAPPING_TERM);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_R));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+}
+
+TEST_F(TapDance, DanceFnAdvancedWithReleaseAndFinish) {
+ TestDriver driver;
+ InSequence s;
+ auto key_rls = KeymapKey(0, 1, 0, TD(TD_RELEASE_AND_FINISH));
+
+ set_keymap({key_rls});
+
+ /* Single press and unpress */
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_R));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ // Verify the finished and/or reset functions aren't called
+ // after the tapping term elapses
+ idle_for(TAPPING_TERM);
+ run_one_scan_loop();
+
+ /* Unpress after tapping term has elapsed (key is registered as held) */
+ key_rls.press();
+ EXPECT_REPORT(driver, (KC_P));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+
+ EXPECT_REPORT(driver, (KC_F));
+ EXPECT_EMPTY_REPORT(driver);
+ idle_for(TAPPING_TERM);
+ run_one_scan_loop();
+
+ key_rls.release();
+ EXPECT_REPORT(driver, (KC_U));
+ EXPECT_EMPTY_REPORT(driver);
+ EXPECT_REPORT(driver, (KC_R));
+ EXPECT_EMPTY_REPORT(driver);
+ run_one_scan_loop();
+}