forked from mirrors/qmk_userspace
		
	Test two keys pressed at once
This commit is contained in:
		
					parent
					
						
							
								6a76192fa4
							
						
					
				
			
			
				commit
				
					
						e85b185796
					
				
			
		
					 3 changed files with 45 additions and 3 deletions
				
			
		| 
						 | 
					@ -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();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue