1
0
Fork 0
forked from forks/qmk_firmware

Test two keys pressed at once

This commit is contained in:
Fred Sundvik 2017-06-18 14:40:22 +03:00
parent 6a76192fa4
commit e85b185796
3 changed files with 45 additions and 3 deletions

View file

@ -51,6 +51,20 @@ TEST(KeyPress, CorrectKeyIsReportedWhenPressed) {
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A))); EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));
keyboard_task(); 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(); keyboard_task();
} }

View file

@ -15,15 +15,41 @@
*/ */
#include "keyboard_report_util.h" #include "keyboard_report_util.h"
#include <vector>
#include <algorithm>
using namespace testing; 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) { 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) { std::ostream& operator<<(std::ostream& stream, const report_keyboard_t& value) {
stream << "Keyboard report:" << std::endl; 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; return stream;
} }

View file

@ -17,10 +17,12 @@
#include "matrix.h" #include "matrix.h"
#include "test_matrix.h" #include "test_matrix.h"
#include <string.h>
static matrix_row_t matrix[MATRIX_ROWS] = {}; static matrix_row_t matrix[MATRIX_ROWS] = {};
void matrix_init(void) { void matrix_init(void) {
memset(matrix, 0, sizeof(matrix));
matrix_init_quantum(); matrix_init_quantum();
} }