mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-09-10 17:15:43 +00:00
add initial passing combo tests
This commit is contained in:
@@ -6,3 +6,5 @@
|
||||
#include "test_common.h"
|
||||
|
||||
#define TAPPING_TERM 200
|
||||
#define COMBO_TERM 40
|
||||
#define COMBO_STRICT_TIMER
|
||||
|
||||
@@ -14,6 +14,83 @@ using testing::InSequence;
|
||||
|
||||
class Combo : public TestFixture {};
|
||||
|
||||
TEST_F(Combo, combo_basic) {
|
||||
TestDriver driver;
|
||||
KeymapKey key_a(0, 0, 0, KC_A);
|
||||
KeymapKey key_b(0, 1, 0, KC_B);
|
||||
set_keymap({key_a, key_b});
|
||||
|
||||
EXPECT_REPORT(driver, (KC_1));
|
||||
EXPECT_EMPTY_REPORT(driver);
|
||||
// Press key A, wait for less than COMBO_TERM, then press key B
|
||||
run_one_scan_loop(); // Ensure that combo timer is > 0
|
||||
key_a.press();
|
||||
idle_for(COMBO_TERM-2);
|
||||
key_b.press();
|
||||
run_one_scan_loop();
|
||||
key_a.release();
|
||||
run_one_scan_loop();
|
||||
key_b.release();
|
||||
run_one_scan_loop();
|
||||
VERIFY_AND_CLEAR(driver);
|
||||
}
|
||||
|
||||
TEST_F(Combo, combo_too_slow) {
|
||||
TestDriver driver;
|
||||
KeymapKey key_a(0, 0, 0, KC_A);
|
||||
KeymapKey key_b(0, 1, 0, KC_B);
|
||||
set_keymap({key_a, key_b});
|
||||
|
||||
EXPECT_REPORT(driver, (KC_A));
|
||||
EXPECT_REPORT(driver, (KC_A, KC_B));
|
||||
EXPECT_REPORT(driver, (KC_B));
|
||||
EXPECT_EMPTY_REPORT(driver);
|
||||
// Press key A, wait for more than COMBO_TERM, then press key B
|
||||
run_one_scan_loop(); // Ensure that combo timer is > 0
|
||||
key_a.press();
|
||||
idle_for(COMBO_TERM + 1);
|
||||
key_b.press();
|
||||
run_one_scan_loop();
|
||||
key_a.release();
|
||||
run_one_scan_loop();
|
||||
key_b.release();
|
||||
run_one_scan_loop();
|
||||
VERIFY_AND_CLEAR(driver);
|
||||
}
|
||||
|
||||
TEST_F(Combo, combo_disjoint) {
|
||||
TestDriver driver;
|
||||
KeymapKey key_a(0, 0, 0, KC_A);
|
||||
KeymapKey key_b(0, 1, 0, KC_B);
|
||||
KeymapKey key_c(0, 2, 0, KC_C);
|
||||
KeymapKey key_d(0, 3, 0, KC_D);
|
||||
set_keymap({key_a, key_b, key_c, key_d});
|
||||
|
||||
EXPECT_REPORT(driver, (KC_1));
|
||||
EXPECT_REPORT(driver, (KC_1, KC_2));
|
||||
EXPECT_REPORT(driver, (KC_2));
|
||||
EXPECT_EMPTY_REPORT(driver);
|
||||
// Press A, C, B, D in that order; trigger combos for A+B and C+D
|
||||
run_one_scan_loop();
|
||||
key_a.press();
|
||||
run_one_scan_loop();
|
||||
key_c.press();
|
||||
run_one_scan_loop();
|
||||
key_b.press();
|
||||
run_one_scan_loop();
|
||||
key_d.press();
|
||||
run_one_scan_loop();
|
||||
key_a.release();
|
||||
run_one_scan_loop();
|
||||
key_b.release();
|
||||
run_one_scan_loop();
|
||||
key_c.release();
|
||||
run_one_scan_loop();
|
||||
key_d.release();
|
||||
run_one_scan_loop();
|
||||
VERIFY_AND_CLEAR(driver);
|
||||
}
|
||||
|
||||
TEST_F(Combo, combo_modtest_tapped) {
|
||||
TestDriver driver;
|
||||
KeymapKey key_y(0, 0, 1, KC_Y);
|
||||
|
||||
@@ -4,14 +4,18 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#include "quantum.h"
|
||||
|
||||
enum combos { modtest, osmshift };
|
||||
enum combos { modtest, osmshift, ab_1, cd_2 };
|
||||
|
||||
uint16_t const modtest_combo[] = {KC_Y, KC_U, COMBO_END};
|
||||
uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END};
|
||||
uint16_t const ab_1_combo[] = {KC_A, KC_B, COMBO_END};
|
||||
uint16_t const cd_2_combo[] = {KC_C, KC_D, COMBO_END};
|
||||
|
||||
// clang-format off
|
||||
combo_t key_combos[] = {
|
||||
[modtest] = COMBO(modtest_combo, RSFT_T(KC_SPACE)),
|
||||
[osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT))
|
||||
[osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT)),
|
||||
[ab_1] = COMBO(ab_1_combo, KC_1),
|
||||
[cd_2] = COMBO(cd_2_combo, KC_2)
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
Reference in New Issue
Block a user