diff options
Diffstat (limited to 'tests/test_common/test_driver.hpp')
-rw-r--r-- | tests/test_common/test_driver.hpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/tests/test_common/test_driver.hpp b/tests/test_common/test_driver.hpp index f9197b3634..b58cfd1ebc 100644 --- a/tests/test_common/test_driver.hpp +++ b/tests/test_common/test_driver.hpp @@ -26,7 +26,9 @@ class TestDriver { public: TestDriver(); ~TestDriver(); - void set_leds(uint8_t leds) { m_leds = leds; } + void set_leds(uint8_t leds) { + m_leds = leds; + } MOCK_METHOD1(send_keyboard_mock, void(report_keyboard_t&)); MOCK_METHOD1(send_mouse_mock, void(report_mouse_t&)); @@ -43,3 +45,61 @@ class TestDriver { uint8_t m_leds = 0; static TestDriver* m_this; }; + +/** + * @brief Sets gmock expectation that a keyboard report of `report` keys will be sent. + * For this macro to parse correctly, the `report` arg must be surrounded by + * parentheses ( ). For instance, + * + * // Expect that a report of "KC_LSFT + KC_A" is sent to the host. + * EXPECT_REPORT(driver, (KC_LSFT, KC_A)); + * + * is shorthand for + * + * EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A))); + * + * It is possible to use .Times() and other gmock APIS with EXPECT_REPORT, for instance, + * allow only single report to be sent: + * + * EXPECT_REPORT(driver, (KC_LSFT, KC_A)).Times(1); + */ +#define EXPECT_REPORT(driver, report) EXPECT_CALL((driver), send_keyboard_mock(KeyboardReport report)) + +/** + * @brief Sets gmock expectation that Unicode `code_point` is sent with UC_LNX input + * mode. For instance for U+2013, + * + * EXPECT_UNICODE(driver, 0x2013); + * + * expects the sequence of keys: + * + * "Ctrl+Shift+U, 2, 0, 1, 3, space". + */ +#define EXPECT_UNICODE(driver, code_point) internal::expect_unicode_code_point((driver), (code_point)) + +/** + * @brief Sets gmock expectation that a empty keyboard report will be sent. + * It is possible to use .Times() and other gmock APIS with EXPECT_EMPTY_REPORT, for instance, + * allow any number of empty reports with: + * + * EXPECT_EMPTY_REPORT(driver).Times(AnyNumber()); + */ +#define EXPECT_EMPTY_REPORT(driver) EXPECT_REPORT(driver, ()) + +/** + * @brief Sets gmock expectation that a keyboard report will be sent, without matching its content. + * It is possible to use .Times() and other gmock APIS with EXPECT_ANY_REPORT, for instance, + * allow a single arbitrary report with: + * + * EXPECT_ANY_REPORT(driver).Times(1); + */ +#define EXPECT_ANY_REPORT(driver) EXPECT_CALL((driver), send_keyboard_mock(_)) + +/** + * @brief Sets gmock expectation that no keyboard report will be sent at all. + */ +#define EXPECT_NO_REPORT(driver) EXPECT_ANY_REPORT(driver).Times(0) + +namespace internal { +void expect_unicode_code_point(TestDriver& driver, uint32_t code_point); +} // namespace internal |