|
|
|
@ -24,7 +24,7 @@ class KeyPress : public TestFixture {}; |
|
|
|
|
|
|
|
|
|
TEST_F(KeyPress, SendKeyboardIsNotCalledWhenNoKeyIsPressed) { |
|
|
|
|
TestDriver driver; |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); |
|
|
|
|
EXPECT_NO_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -35,11 +35,11 @@ TEST_F(KeyPress, CorrectKeyIsReportedWhenPressed) { |
|
|
|
|
set_keymap({key}); |
|
|
|
|
|
|
|
|
|
key.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -50,7 +50,7 @@ TEST_F(KeyPress, ANonMappedKeyDoesNothing) { |
|
|
|
|
set_keymap({key}); |
|
|
|
|
|
|
|
|
|
key.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); |
|
|
|
|
EXPECT_NO_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
@ -66,19 +66,19 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) { |
|
|
|
|
key_c.press(); |
|
|
|
|
// Note that QMK only processes one key at a time
|
|
|
|
|
// See issue #1476 for more information
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_b.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_b.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_b.report_code, key_c.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_b.report_code, key_c.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key_b.release(); |
|
|
|
|
key_c.release(); |
|
|
|
|
// Note that the first key released is the first one in the matrix order
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_c.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_c.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -94,17 +94,17 @@ TEST_F(KeyPress, LeftShiftIsReportedCorrectly) { |
|
|
|
|
|
|
|
|
|
// Unfortunately modifiers are also processed in the wrong order
|
|
|
|
|
// See issue #1476 for more information
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_a.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_a.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_a.report_code, key_lsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_a.report_code, key_lsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key_a.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key_lsft.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -120,19 +120,19 @@ TEST_F(KeyPress, PressLeftShiftAndControl) { |
|
|
|
|
|
|
|
|
|
// Unfortunately modifiers are also processed in the wrong order
|
|
|
|
|
// See issue #1476 for more information
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code, key_lctrl.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lsft.report_code, key_lctrl.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key_lsft.release(); |
|
|
|
|
key_lctrl.release(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lctrl.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lctrl.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -147,19 +147,19 @@ TEST_F(KeyPress, LeftAndRightShiftCanBePressedAtTheSameTime) { |
|
|
|
|
key_rsft.press(); |
|
|
|
|
// Unfortunately modifiers are also processed in the wrong order
|
|
|
|
|
// See issue #1476 for more information
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code, key_rsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_lsft.report_code, key_rsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
key_lsft.release(); |
|
|
|
|
key_rsft.release(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_rsft.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_rsft.report_code)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -175,13 +175,13 @@ TEST_F(KeyPress, RightShiftLeftControlAndCharWithTheSameKey) { |
|
|
|
|
// The underlying cause is that we use only one bit to represent the right hand
|
|
|
|
|
// modifiers.
|
|
|
|
|
combo_key.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL, KC_O))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_RIGHT_SHIFT, KC_RIGHT_CTRL)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_RIGHT_SHIFT, KC_RIGHT_CTRL, KC_O)); |
|
|
|
|
keyboard_task(); |
|
|
|
|
|
|
|
|
|
combo_key.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_REPORT(driver, (KC_RIGHT_SHIFT, KC_RIGHT_CTRL)); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
keyboard_task(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -194,24 +194,24 @@ TEST_F(KeyPress, PressPlusEqualReleaseBeforePress) { |
|
|
|
|
set_keymap({key_plus, key_eql}); |
|
|
|
|
|
|
|
|
|
key_plus.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_eql.report_code))); |
|
|
|
|
EXPECT_REPORT(driver, (key_eql.report_code)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
} |
|
|
|
@ -225,25 +225,25 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) { |
|
|
|
|
set_keymap({key_plus, key_eql}); |
|
|
|
|
|
|
|
|
|
key_plus.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL))); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
EXPECT_REPORT(driver, (KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.release(); |
|
|
|
|
// BUG: Should really still return KC_EQUAL, but this is fine too
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); |
|
|
|
|
EXPECT_NO_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
} |
|
|
|
@ -257,24 +257,24 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) { |
|
|
|
|
set_keymap({key_plus, key_eql}); |
|
|
|
|
|
|
|
|
|
key_eql.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
} |
|
|
|
@ -288,27 +288,27 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) { |
|
|
|
|
set_keymap({key_plus, key_eql}); |
|
|
|
|
|
|
|
|
|
key_eql.press(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.press(); |
|
|
|
|
// BUG: The sequence is a bit strange, but it works, the end result is that
|
|
|
|
|
// KC_PLUS is sent
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_EQUAL)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT, KC_EQUAL)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_eql.release(); |
|
|
|
|
// I guess it's fine to still report shift here
|
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); |
|
|
|
|
EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
|
|
|
|
|
key_plus.release(); |
|
|
|
|
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); |
|
|
|
|
EXPECT_EMPTY_REPORT(driver); |
|
|
|
|
run_one_scan_loop(); |
|
|
|
|
testing::Mock::VerifyAndClearExpectations(&driver); |
|
|
|
|
} |
|
|
|
|