Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix and add unit tests for Caps Word to work with Unicode Map, Auto Shift, Retro Shift. #17284

Merged
merged 6 commits into from
Jun 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions quantum/process_keycode/process_unicode_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ __attribute__((weak)) void unicode_input_start(void) {

unicode_saved_mods = get_mods(); // Save current mods
clear_mods(); // Unregister mods to start from a clean state
clear_weak_mods();

switch (unicode_config.input_mode) {
case UC_MAC:
Expand Down
6 changes: 3 additions & 3 deletions quantum/quantum.c
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,9 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef TAP_DANCE_ENABLE
process_tap_dance(keycode, record) &&
#endif
#ifdef CAPS_WORD_ENABLE
process_caps_word(keycode, record) &&
#endif
#if defined(UNICODE_COMMON_ENABLE)
process_unicode_common(keycode, record) &&
#endif
Expand All @@ -307,9 +310,6 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef TERMINAL_ENABLE
process_terminal(keycode, record) &&
#endif
#ifdef CAPS_WORD_ENABLE
process_caps_word(keycode, record) &&
#endif
#ifdef SPACE_CADET_ENABLE
process_space_cadet(keycode, record) &&
#endif
Expand Down
16 changes: 8 additions & 8 deletions tests/auto_shift/test_auto_shift.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ TEST_F(AutoShift, key_release_before_timeout) {
set_keymap({regular_key});

/* Press regular key */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
regular_key.press();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release regular key */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
EXPECT_REPORT(driver, (KC_A));
EXPECT_EMPTY_REPORT(driver);
regular_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
Expand All @@ -55,16 +55,16 @@ TEST_F(AutoShift, key_release_after_timeout) {
set_keymap({regular_key});

/* Press regular key */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
regular_key.press();
idle_for(AUTO_SHIFT_TIMEOUT);
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release regular key */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT)));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport()));
EXPECT_REPORT(driver, (KC_LSFT, KC_A));
EXPECT_REPORT(driver, (KC_LSFT));
EXPECT_EMPTY_REPORT(driver);
regular_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
}
}
54 changes: 27 additions & 27 deletions tests/basic/test_action_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ TEST_F(ActionLayer, MomentaryLayerDoesNothing) {
set_keymap({layer_key});

/* Press and release MO, nothing should happen. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.press();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.release();
run_one_scan_loop();
testing::Mock::VerifyAndClearExpectations(&driver);
Expand All @@ -151,28 +151,28 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});

/* Press MO. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Press key on layer 1 */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))).Times(1);
EXPECT_REPORT(driver, (KC_B)).Times(1);
regular_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release key on layer 1 */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
EXPECT_EMPTY_REPORT(driver);
regular_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release MO */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
Expand All @@ -188,14 +188,14 @@ TEST_F(ActionLayer, ToggleLayerDoesNothing) {
set_keymap({layer_key});

/* Press TG. Layer state should not change as it's applied on release. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release TG. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
Expand All @@ -212,26 +212,26 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) {
set_keymap({toggle_layer_1_on_layer_0, toggle_layer_0_on_layer_1});

/* Toggle Layer 1. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
toggle_layer_1_on_layer_0.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
toggle_layer_1_on_layer_0.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Toggle Layer 0. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
toggle_layer_0_on_layer_1.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
toggle_layer_0_on_layer_1.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
Expand All @@ -247,13 +247,13 @@ TEST_F(ActionLayer, LayerTapToggleDoesNothing) {
set_keymap({layer_key});

/* Press and release TT. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
Expand All @@ -271,25 +271,25 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});

/* Press TT. */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))).Times(1);
EXPECT_REPORT(driver, (KC_B)).Times(1);
regular_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
EXPECT_EMPTY_REPORT(driver);
regular_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
Expand All @@ -307,7 +307,7 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {
set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}});

/* Tap TT five times . */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);

layer_key.press();
run_one_scan_loop();
Expand Down Expand Up @@ -346,13 +346,13 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) {

testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))).Times(1);
EXPECT_REPORT(driver, (KC_B)).Times(1);
regular_key.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
EXPECT_EMPTY_REPORT(driver);
regular_key.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
Expand All @@ -370,31 +370,31 @@ TEST_F(ActionLayer, LayerTapReleasedBeforeKeypressReleaseWithModifiers) {
set_keymap({layer_0_key_0, layer_1_key_1});

/* Press layer tap and wait for tapping term to switch to layer 1 */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0);
EXPECT_NO_REPORT(driver);
layer_0_key_0.press();
idle_for(TAPPING_TERM);
EXPECT_TRUE(layer_state_is(0));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Press key with layer 1 mapping, result basically expected
* altough more reports are send then necessary. */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RALT))).Times(1);
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RALT, KC_9))).Times(1);
EXPECT_REPORT(driver, (KC_RALT)).Times(1);
EXPECT_REPORT(driver, (KC_RALT, KC_9)).Times(1);
layer_1_key_1.press();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(1));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Release layer tap key, no report is send because key is still held. */
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
EXPECT_NO_REPORT(driver);
layer_0_key_0.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
testing::Mock::VerifyAndClearExpectations(&driver);

/* Unregister keycode and modifier. */
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RALT))).Times(1);
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1);
EXPECT_REPORT(driver, (KC_RALT)).Times(1);
EXPECT_EMPTY_REPORT(driver);
layer_1_key_1.release();
run_one_scan_loop();
EXPECT_TRUE(layer_state_is(0));
Expand Down
Loading