diff options
-rw-r--r-- | tests/basic/test.cpp | 16 | ||||
-rw-r--r-- | tests/test_common/keyboard_report_util.cpp | 30 | ||||
-rw-r--r-- | tests/test_common/matrix.c | 2 |
3 files changed, 45 insertions, 3 deletions
diff --git a/tests/basic/test.cpp b/tests/basic/test.cpp index 804642eae..398063fca 100644 --- a/tests/basic/test.cpp +++ b/tests/basic/test.cpp @@ -51,6 +51,20 @@ TEST(KeyPress, CorrectKeyIsReportedWhenPressed) { EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A))); keyboard_task(); } - EXPECT_CALL(driver, send_keyboard_mock(_)); + +TEST(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) { + TestDriver driver; + EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); + keyboard_init(); + press_key(1, 0); + press_key(0, 1); + EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0)); + //TODO: This is a left-over from the previous test and need to be fixed + EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); + keyboard_task(); + //Note that QMK only processes one key at a time + EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))); + keyboard_task(); + EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B, KC_C))); keyboard_task(); } diff --git a/tests/test_common/keyboard_report_util.cpp b/tests/test_common/keyboard_report_util.cpp index 70fc1c048..34e53cd4c 100644 --- a/tests/test_common/keyboard_report_util.cpp +++ b/tests/test_common/keyboard_report_util.cpp @@ -15,15 +15,41 @@ */ #include "keyboard_report_util.h" + #include <vector> + #include <algorithm> using namespace testing; + namespace + { + std::vector<uint8_t> get_keys(const report_keyboard_t& report) { + std::vector<uint8_t> result; + #if defined(NKRO_ENABLE) + #error NKRO support not implemented yet + #elif defined(USB_6KRO_ENABLE) + #error 6KRO support not implemented yet + #else + for(size_t i=0; i<KEYBOARD_REPORT_KEYS; i++) { + if (report.keys[i]) { + result.emplace_back(report.keys[i]); + } + } + #endif + std::sort(result.begin(), result.end()); + return result; + } + } + bool operator==(const report_keyboard_t& lhs, const report_keyboard_t& rhs) { - return memcmp(lhs.raw, rhs.raw, sizeof(lhs.raw))==0; + auto lhskeys = get_keys(lhs); + auto rhskeys = get_keys(rhs); + return lhs.mods == rhs.mods && lhskeys == rhskeys; } std::ostream& operator<<(std::ostream& stream, const report_keyboard_t& value) { stream << "Keyboard report:" << std::endl; - stream << (uint32_t)value.keys[0] << std::endl; + for (uint32_t k: get_keys(value)) { + stream << k << std::endl; + } return stream; } diff --git a/tests/test_common/matrix.c b/tests/test_common/matrix.c index 85556e2c4..5ab5bac6c 100644 --- a/tests/test_common/matrix.c +++ b/tests/test_common/matrix.c @@ -17,10 +17,12 @@ #include "matrix.h" #include "test_matrix.h" +#include <string.h> static matrix_row_t matrix[MATRIX_ROWS] = {}; void matrix_init(void) { + memset(matrix, 0, sizeof(matrix)); matrix_init_quantum(); } |