mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	[Core] Don't send keyboard reports that propagate no changes to the host (#14065)
This commit is contained in:
		
							parent
							
								
									ce5a2a7367
								
							
						
					
					
						commit
						8b865a9d64
					
				| @ -21,6 +21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| #include "action_layer.h" | ||||
| #include "timer.h" | ||||
| #include "keycode_config.h" | ||||
| #include <string.h> | ||||
| 
 | ||||
| extern keymap_config_t keymap_config; | ||||
| 
 | ||||
| @ -247,8 +248,14 @@ void send_keyboard_report(void) { | ||||
|     keyboard_report->mods |= weak_override_mods; | ||||
| #endif | ||||
| 
 | ||||
|     static report_keyboard_t last_report; | ||||
| 
 | ||||
|     /* Only send the report if there are changes to propagate to the host. */ | ||||
|     if (memcmp(keyboard_report, &last_report, sizeof(report_keyboard_t)) != 0) { | ||||
|         memcpy(&last_report, keyboard_report, sizeof(report_keyboard_t)); | ||||
|         host_keyboard_send(keyboard_report); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /** \brief Get mods
 | ||||
|  * | ||||
|  | ||||
| @ -42,7 +42,6 @@ TEST_F(AutoShift, key_release_before_timeout) { | ||||
|     /* Release regular key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     regular_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| @ -65,8 +64,6 @@ TEST_F(AutoShift, key_release_after_timeout) { | ||||
|     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_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     regular_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
|  | ||||
| @ -131,14 +131,12 @@ TEST_F(ActionLayer, MomentaryLayerDoesNothing) { | ||||
|     set_keymap({layer_key}); | ||||
| 
 | ||||
|     /* Press and release MO, nothing should happen. */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| @ -153,8 +151,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) { | ||||
|     set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}}); | ||||
| 
 | ||||
|     /* Press MO. */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
| @ -175,8 +172,7 @@ TEST_F(ActionLayer, MomentaryLayerWithKeypress) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release MO */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(0)); | ||||
| @ -199,8 +195,7 @@ TEST_F(ActionLayer, ToggleLayerDoesNothing) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release TG. */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
| @ -223,8 +218,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) { | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     toggle_layer_1_on_layer_0.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
| @ -237,8 +231,7 @@ TEST_F(ActionLayer, ToggleLayerUpAndDown) { | ||||
|     EXPECT_TRUE(layer_state_is(0)); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     toggle_layer_0_on_layer_1.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(0)); | ||||
| @ -254,14 +247,13 @@ TEST_F(ActionLayer, LayerTapToggleDoesNothing) { | ||||
|     set_keymap({layer_key}); | ||||
| 
 | ||||
|     /* Press and release TT. */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(0)); | ||||
| @ -279,7 +271,6 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) { | ||||
|     set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}}); | ||||
| 
 | ||||
|     /* Press TT. */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
| @ -298,8 +289,7 @@ TEST_F(ActionLayer, LayerTapToggleWithKeypress) { | ||||
|     EXPECT_TRUE(layer_state_is(1)); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     EXPECT_TRUE(layer_state_is(0)); | ||||
| @ -317,8 +307,7 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) { | ||||
|     set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}}); | ||||
| 
 | ||||
|     /* Tap TT five times . */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(9); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
| 
 | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|  | ||||
| @ -85,7 +85,7 @@ TEST_F(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) { | ||||
| TEST_F(KeyPress, LeftShiftIsReportedCorrectly) { | ||||
|     TestDriver driver; | ||||
|     auto       key_a    = KeymapKey(0, 0, 0, KC_A); | ||||
|     auto       key_lsft = KeymapKey(0, 3, 0, KC_LSFT); | ||||
|     auto       key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT); | ||||
| 
 | ||||
|     set_keymap({key_a, key_lsft}); | ||||
| 
 | ||||
| @ -110,8 +110,8 @@ TEST_F(KeyPress, LeftShiftIsReportedCorrectly) { | ||||
| 
 | ||||
| TEST_F(KeyPress, PressLeftShiftAndControl) { | ||||
|     TestDriver driver; | ||||
|     auto       key_lsft  = KeymapKey(0, 3, 0, KC_LSFT); | ||||
|     auto       key_lctrl = KeymapKey(0, 5, 0, KC_LCTRL); | ||||
|     auto       key_lsft  = KeymapKey(0, 3, 0, KC_LEFT_SHIFT); | ||||
|     auto       key_lctrl = KeymapKey(0, 5, 0, KC_LEFT_CTRL); | ||||
| 
 | ||||
|     set_keymap({key_lctrl, key_lsft}); | ||||
| 
 | ||||
| @ -138,8 +138,8 @@ TEST_F(KeyPress, PressLeftShiftAndControl) { | ||||
| 
 | ||||
| TEST_F(KeyPress, LeftAndRightShiftCanBePressedAtTheSameTime) { | ||||
|     TestDriver driver; | ||||
|     auto       key_lsft = KeymapKey(0, 3, 0, KC_LSFT); | ||||
|     auto       key_rsft = KeymapKey(0, 4, 0, KC_RSFT); | ||||
|     auto       key_lsft = KeymapKey(0, 3, 0, KC_LEFT_SHIFT); | ||||
|     auto       key_rsft = KeymapKey(0, 4, 0, KC_RIGHT_SHIFT); | ||||
| 
 | ||||
|     set_keymap({key_rsft, key_lsft}); | ||||
| 
 | ||||
| @ -175,12 +175,12 @@ 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_RSFT, KC_RCTRL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL, KC_O))); | ||||
|     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))); | ||||
|     keyboard_task(); | ||||
| 
 | ||||
|     combo_key.release(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RSFT, KC_RCTRL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_RIGHT_SHIFT, KC_RIGHT_CTRL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     keyboard_task(); | ||||
| } | ||||
| @ -189,18 +189,18 @@ TEST_F(KeyPress, PressPlusEqualReleaseBeforePress) { | ||||
|     TestDriver driver; | ||||
|     InSequence s; | ||||
|     auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL); | ||||
| 
 | ||||
|     set_keymap({key_plus, key_eql}); | ||||
| 
 | ||||
|     key_plus.press(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_plus.release(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| @ -220,13 +220,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) { | ||||
|     TestDriver driver; | ||||
|     InSequence s; | ||||
|     auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL); | ||||
| 
 | ||||
|     set_keymap({key_plus, key_eql}); | ||||
| 
 | ||||
|     key_plus.press(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
| @ -237,14 +237,13 @@ TEST_F(KeyPress, PressPlusEqualDontReleaseBeforePress) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_plus.release(); | ||||
|     // BUG: Should really still return KC_EQL, but this is fine too
 | ||||
|     // It's also called twice for some reason
 | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); | ||||
|     // BUG: Should really still return KC_EQUAL, but this is fine too
 | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(1); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_eql.release(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| } | ||||
| @ -253,12 +252,12 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) { | ||||
|     TestDriver driver; | ||||
|     InSequence s; | ||||
|     auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL); | ||||
| 
 | ||||
|     set_keymap({key_plus, key_eql}); | ||||
| 
 | ||||
|     key_eql.press(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL))); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
| @ -268,13 +267,13 @@ TEST_F(KeyPress, PressEqualPlusReleaseBeforePress) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_plus.press(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_EQL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT, KC_EQUAL))); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_plus.release(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| @ -284,12 +283,12 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) { | ||||
|     TestDriver driver; | ||||
|     InSequence s; | ||||
|     auto       key_plus = KeymapKey(0, 1, 1, KC_PLUS); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQL); | ||||
|     auto       key_eql  = KeymapKey(0, 0, 1, KC_EQUAL); | ||||
| 
 | ||||
|     set_keymap({key_plus, key_eql}); | ||||
| 
 | ||||
|     key_eql.press(); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQL))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_EQUAL))); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
| @ -309,8 +308,6 @@ TEST_F(KeyPress, PressEqualPlusDontReleaseBeforePress) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     key_plus.release(); | ||||
|     // This report is not needed
 | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LEFT_SHIFT))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
|  | ||||
| @ -175,22 +175,20 @@ TEST_F(OneShot, OSLWithAdditionalKeypress) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release OSL key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     osl_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Press regular key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(2); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(regular_key.report_code))).Times(1); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     regular_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release regular key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     regular_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
|  | ||||
| @ -117,7 +117,6 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release regular key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(layer_key.report_code))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     regular_key.release(); | ||||
| @ -125,7 +124,7 @@ TEST_F(PermissiveHold, tap_regular_key_while_layer_tap_key_is_held) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release layer-tap-hold key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_tap_hold_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
|  | ||||
| @ -119,7 +119,6 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release regular key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     regular_key.release(); | ||||
| @ -127,7 +126,7 @@ TEST_F(PermissiveHold_IgnoreModTapInterrupt, tap_regular_key_while_layer_tap_key | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Release layer-tap-hold key */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
|     layer_tap_hold_key.release(); | ||||
|     run_one_scan_loop(); | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
|  | ||||
| @ -31,9 +31,8 @@ TEST_F(ActionLayer, LayerTapToggleWithToggleWithKeypress) { | ||||
|     set_keymap({layer_key, regular_key, KeymapKey{1, 1, 0, KC_B}}); | ||||
| 
 | ||||
|     /* Tap TT five times . */ | ||||
|     /* TODO: QMK currently sends an empty report even if nothing needs to be reported to the host! */ | ||||
|     /* TODO: Tapping Force Hold breaks TT */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(10); | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||||
| 
 | ||||
|     layer_key.press(); | ||||
|     run_one_scan_loop(); | ||||
|  | ||||
| @ -60,7 +60,6 @@ TEST_F(TappingForceHold, tap_regular_key_while_mod_tap_key_is_held) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Idle for tapping term of mod tap hold key. */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     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())); | ||||
| @ -101,7 +100,6 @@ TEST_F(TappingForceHold, tap_mod_tap_key_while_mod_tap_key_is_held) { | ||||
|     testing::Mock::VerifyAndClearExpectations(&driver); | ||||
| 
 | ||||
|     /* Idle for tapping term of first mod tap hold key. */ | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||||
|     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())); | ||||
|  | ||||
| @ -48,7 +48,6 @@ void TestFixture::SetUpTestCase() { | ||||
|     eeconfig_update_debug(debug_config.raw); | ||||
| 
 | ||||
|     TestDriver driver; | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(_)); | ||||
|     keyboard_init(); | ||||
| 
 | ||||
|     test_logger.info() << "TestFixture setup-up end." << std::endl; | ||||
| @ -62,8 +61,6 @@ TestFixture::~TestFixture() { | ||||
|     test_logger.info() << "TestFixture clean-up start." << std::endl; | ||||
|     TestDriver driver; | ||||
| 
 | ||||
|     EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(2); | ||||
| 
 | ||||
|     /* Reset keyboard state. */ | ||||
|     clear_all_keys(); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Stefan Kerkmann
						Stefan Kerkmann