Fix Caps Word capitalization when used with Combos + Auto Shift. (#17549)
This commit is contained in:
parent
4eeafbebab
commit
6a0d90f81a
9 changed files with 343 additions and 15 deletions
|
@ -19,6 +19,14 @@
|
|||
#include "test_fixture.hpp"
|
||||
#include "test_keymap_key.hpp"
|
||||
|
||||
// Allow reports with no keys or only KC_LSFT.
|
||||
// clang-format off
|
||||
#define EXPECT_EMPTY_OR_LSFT(driver) \
|
||||
EXPECT_CALL(driver, send_keyboard_mock(AnyOf( \
|
||||
KeyboardReport(), \
|
||||
KeyboardReport(KC_LSFT))))
|
||||
// clang-format on
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::AnyNumber;
|
||||
using ::testing::AnyOf;
|
||||
|
@ -39,13 +47,7 @@ TEST_F(CapsWord, AutoShiftKeys) {
|
|||
KeymapKey key_spc(0, 1, 0, KC_SPC);
|
||||
set_keymap({key_a, key_spc});
|
||||
|
||||
// Allow any number of reports with no keys or only KC_LSFT.
|
||||
// clang-format off
|
||||
EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
|
||||
KeyboardReport(),
|
||||
KeyboardReport(KC_LSFT))))
|
||||
.Times(AnyNumber());
|
||||
// clang-format on
|
||||
EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
|
||||
{ // Expect: "A, A, space, a".
|
||||
InSequence s;
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_A));
|
||||
|
@ -65,6 +67,46 @@ TEST_F(CapsWord, AutoShiftKeys) {
|
|||
testing::Mock::VerifyAndClearExpectations(&driver);
|
||||
}
|
||||
|
||||
// Test Caps Word + Auto Shift where keys A and B are rolled.
|
||||
TEST_F(CapsWord, AutoShiftRolledShiftedKeys) {
|
||||
TestDriver driver;
|
||||
KeymapKey key_a(0, 0, 0, KC_A);
|
||||
KeymapKey key_b(0, 0, 1, KC_B);
|
||||
set_keymap({key_a, key_b});
|
||||
|
||||
EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
|
||||
{ // Expect: "A, B, A, B".
|
||||
InSequence s;
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_A));
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_B));
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_A));
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_B));
|
||||
}
|
||||
|
||||
caps_word_on();
|
||||
|
||||
key_a.press(); // Overlapping taps: A down, B down, A up, B up.
|
||||
run_one_scan_loop();
|
||||
key_b.press();
|
||||
run_one_scan_loop();
|
||||
key_a.release();
|
||||
run_one_scan_loop();
|
||||
key_b.release();
|
||||
run_one_scan_loop();
|
||||
|
||||
key_a.press(); // Nested taps: A down, B down, B up, A up.
|
||||
run_one_scan_loop();
|
||||
key_b.press();
|
||||
run_one_scan_loop();
|
||||
key_b.release();
|
||||
run_one_scan_loop();
|
||||
key_a.release();
|
||||
run_one_scan_loop();
|
||||
|
||||
caps_word_off();
|
||||
testing::Mock::VerifyAndClearExpectations(&driver);
|
||||
}
|
||||
|
||||
// Tests that with tap-hold keys with Retro Shift, letter keys are shifted by
|
||||
// Caps Word regardless of whether they are retroshifted.
|
||||
TEST_F(CapsWord, RetroShiftKeys) {
|
||||
|
@ -73,13 +115,7 @@ TEST_F(CapsWord, RetroShiftKeys) {
|
|||
KeymapKey key_layertap_b(0, 1, 0, LT(1, KC_B));
|
||||
set_keymap({key_modtap_a, key_layertap_b});
|
||||
|
||||
// Allow any number of reports with no keys or only KC_LSFT.
|
||||
// clang-format off
|
||||
EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
|
||||
KeyboardReport(),
|
||||
KeyboardReport(KC_LSFT))))
|
||||
.Times(AnyNumber());
|
||||
// clang-format on
|
||||
EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
|
||||
{ // Expect: "B, A, B, A".
|
||||
InSequence s;
|
||||
EXPECT_REPORT(driver, (KC_LSFT, KC_B));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue