diff options
| author | Fred Sundvik <fsundvik@gmail.com> | 2017-06-16 23:50:44 +0300 |
|---|---|---|
| committer | Fred Sundvik <fsundvik@gmail.com> | 2017-06-18 21:22:22 +0300 |
| commit | 3bb0586acc6472380365d78ee81a332aca468239 (patch) | |
| tree | d8b4e194d9f39216e53e9aaa4b944679dfa567f3 | |
| parent | 617578399cf1a0fff70ceeb21d63a06524c801a3 (diff) | |
| download | qmk_firmware-3bb0586acc6472380365d78ee81a332aca468239.tar.gz qmk_firmware-3bb0586acc6472380365d78ee81a332aca468239.zip | |
Add a couple of basic tests and implement driver mock
| -rw-r--r-- | build_full_test.mk | 7 | ||||
| -rw-r--r-- | tests/basic/test.cpp | 50 | ||||
| -rw-r--r-- | tests/test_common/matrix.c | 13 | ||||
| -rw-r--r-- | tests/test_common/test_driver.cpp | 58 | ||||
| -rw-r--r-- | tests/test_common/test_driver.h | 45 | ||||
| -rw-r--r-- | tests/test_common/test_matrix.h (renamed from tests/basic/test.c) | 21 |
6 files changed, 185 insertions, 9 deletions
diff --git a/build_full_test.mk b/build_full_test.mk index 43e2a20a7..5f9bbe5e6 100644 --- a/build_full_test.mk +++ b/build_full_test.mk | |||
| @@ -17,7 +17,12 @@ | |||
| 17 | 17 | ||
| 18 | TEST_PATH=tests/$(TEST) | 18 | TEST_PATH=tests/$(TEST) |
| 19 | 19 | ||
| 20 | $(TEST)_SRC=$(TEST_PATH)/test.c $(TMK_COMMON_SRC) $(QUANTUM_SRC) tests/test_common/matrix.c | 20 | $(TEST)_SRC= \ |
| 21 | $(TEST_PATH)/test.cpp \ | ||
| 22 | $(TMK_COMMON_SRC) \ | ||
| 23 | $(QUANTUM_SRC) \ | ||
| 24 | tests/test_common/matrix.c \ | ||
| 25 | tests/test_common/test_driver.cpp | ||
| 21 | $(TEST)_DEFS=$(TMK_COMMON_DEFS) | 26 | $(TEST)_DEFS=$(TMK_COMMON_DEFS) |
| 22 | $(TEST)_CONFIG=$(TEST_PATH)/config.h | 27 | $(TEST)_CONFIG=$(TEST_PATH)/config.h |
| 23 | VPATH+=$(TOP_DIR)/tests/test_common | 28 | VPATH+=$(TOP_DIR)/tests/test_common |
diff --git a/tests/basic/test.cpp b/tests/basic/test.cpp new file mode 100644 index 000000000..ce9a0cd72 --- /dev/null +++ b/tests/basic/test.cpp | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* Copyright 2017 Fred Sundvik | ||
| 2 | * | ||
| 3 | * This program is free software: you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License as published by | ||
| 5 | * the Free Software Foundation, either version 2 of the License, or | ||
| 6 | * (at your option) any later version. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include "gtest/gtest.h" | ||
| 18 | #include "gmock/gmock.h" | ||
| 19 | |||
| 20 | #include "quantum.h" | ||
| 21 | #include "keyboard.h" | ||
| 22 | #include "test_driver.h" | ||
| 23 | #include "test_matrix.h" | ||
| 24 | |||
| 25 | using testing::_; | ||
| 26 | using testing::Return; | ||
| 27 | |||
| 28 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 29 | [0] = { | ||
| 30 | {KC_A, KC_B}, | ||
| 31 | {KC_C, KC_D} | ||
| 32 | }, | ||
| 33 | }; | ||
| 34 | |||
| 35 | TEST(Basic, SendKeyboardIsNotCalledWhenNoKeyIsPressed) { | ||
| 36 | keyboard_init(); | ||
| 37 | TestDriver driver; | ||
| 38 | EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0)); | ||
| 39 | EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||
| 40 | keyboard_task(); | ||
| 41 | } | ||
| 42 | |||
| 43 | TEST(Basic, SendKeyboardIsCalledWhenAKeyIsPressed) { | ||
| 44 | keyboard_init(); | ||
| 45 | TestDriver driver; | ||
| 46 | press_key(0, 0); | ||
| 47 | EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0)); | ||
| 48 | EXPECT_CALL(driver, send_keyboard_mock(_)); | ||
| 49 | keyboard_task(); | ||
| 50 | } | ||
diff --git a/tests/test_common/matrix.c b/tests/test_common/matrix.c index 940f28f35..85556e2c4 100644 --- a/tests/test_common/matrix.c +++ b/tests/test_common/matrix.c | |||
| @@ -16,6 +16,9 @@ | |||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | #include "matrix.h" | 18 | #include "matrix.h" |
| 19 | #include "test_matrix.h" | ||
| 20 | |||
| 21 | static matrix_row_t matrix[MATRIX_ROWS] = {}; | ||
| 19 | 22 | ||
| 20 | void matrix_init(void) { | 23 | void matrix_init(void) { |
| 21 | matrix_init_quantum(); | 24 | matrix_init_quantum(); |
| @@ -27,7 +30,7 @@ uint8_t matrix_scan(void) { | |||
| 27 | } | 30 | } |
| 28 | 31 | ||
| 29 | matrix_row_t matrix_get_row(uint8_t row) { | 32 | matrix_row_t matrix_get_row(uint8_t row) { |
| 30 | return 0; | 33 | return matrix[row]; |
| 31 | } | 34 | } |
| 32 | 35 | ||
| 33 | void matrix_print(void) { | 36 | void matrix_print(void) { |
| @@ -41,3 +44,11 @@ void matrix_init_kb(void) { | |||
| 41 | void matrix_scan_kb(void) { | 44 | void matrix_scan_kb(void) { |
| 42 | 45 | ||
| 43 | } | 46 | } |
| 47 | |||
| 48 | void press_key(uint8_t col, uint8_t row) { | ||
| 49 | matrix[row] |= 1 << col; | ||
| 50 | } | ||
| 51 | |||
| 52 | void release_key(uint8_t col, uint8_t row) { | ||
| 53 | matrix[row] &= ~(1 << col); | ||
| 54 | } | ||
diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp new file mode 100644 index 000000000..7c67f5776 --- /dev/null +++ b/tests/test_common/test_driver.cpp | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* Copyright 2017 Fred Sundvik | ||
| 2 | * | ||
| 3 | * This program is free software: you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License as published by | ||
| 5 | * the Free Software Foundation, either version 2 of the License, or | ||
| 6 | * (at your option) any later version. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include "test_driver.h" | ||
| 18 | |||
| 19 | TestDriver* TestDriver::m_this = nullptr; | ||
| 20 | |||
| 21 | TestDriver::TestDriver() | ||
| 22 | : m_driver{ | ||
| 23 | &TestDriver::keyboard_leds, | ||
| 24 | &TestDriver::send_keyboard, | ||
| 25 | &TestDriver::send_mouse, | ||
| 26 | &TestDriver::send_system, | ||
| 27 | &TestDriver::send_consumer | ||
| 28 | } | ||
| 29 | { | ||
| 30 | |||
| 31 | host_set_driver(&m_driver); | ||
| 32 | m_this = this; | ||
| 33 | } | ||
| 34 | |||
| 35 | TestDriver::~TestDriver() { | ||
| 36 | m_this = nullptr; | ||
| 37 | } | ||
| 38 | |||
| 39 | uint8_t TestDriver::keyboard_leds(void) { | ||
| 40 | return m_this->keyboard_leds_mock(); | ||
| 41 | } | ||
| 42 | |||
| 43 | void TestDriver::send_keyboard(report_keyboard_t* report) { | ||
| 44 | m_this->send_keyboard_mock(report); | ||
| 45 | |||
| 46 | } | ||
| 47 | |||
| 48 | void TestDriver::send_mouse(report_mouse_t* report) { | ||
| 49 | m_this->send_mouse_mock(report); | ||
| 50 | } | ||
| 51 | |||
| 52 | void TestDriver::send_system(uint16_t data) { | ||
| 53 | m_this->send_system_mock(data); | ||
| 54 | } | ||
| 55 | |||
| 56 | void TestDriver::send_consumer(uint16_t data) { | ||
| 57 | m_this->send_consumer_mock(data); | ||
| 58 | } | ||
diff --git a/tests/test_common/test_driver.h b/tests/test_common/test_driver.h new file mode 100644 index 000000000..d5b831884 --- /dev/null +++ b/tests/test_common/test_driver.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* Copyright 2017 Fred Sundvik | ||
| 2 | * | ||
| 3 | * This program is free software: you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License as published by | ||
| 5 | * the Free Software Foundation, either version 2 of the License, or | ||
| 6 | * (at your option) any later version. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef TESTS_TEST_COMMON_TEST_DRIVER_H_ | ||
| 18 | #define TESTS_TEST_COMMON_TEST_DRIVER_H_ | ||
| 19 | |||
| 20 | #include "gmock/gmock.h" | ||
| 21 | #include <stdint.h> | ||
| 22 | #include "host.h" | ||
| 23 | |||
| 24 | |||
| 25 | class TestDriver { | ||
| 26 | public: | ||
| 27 | TestDriver(); | ||
| 28 | ~TestDriver(); | ||
| 29 | MOCK_METHOD0(keyboard_leds_mock, uint8_t ()); | ||
| 30 | MOCK_METHOD1(send_keyboard_mock, void (report_keyboard_t*)); | ||
| 31 | MOCK_METHOD1(send_mouse_mock, void (report_mouse_t*)); | ||
| 32 | MOCK_METHOD1(send_system_mock, void (uint16_t)); | ||
| 33 | MOCK_METHOD1(send_consumer_mock, void (uint16_t)); | ||
| 34 | private: | ||
| 35 | static uint8_t keyboard_leds(void); | ||
| 36 | static void send_keyboard(report_keyboard_t *report); | ||
| 37 | static void send_mouse(report_mouse_t* report); | ||
| 38 | static void send_system(uint16_t data); | ||
| 39 | static void send_consumer(uint16_t data); | ||
| 40 | host_driver_t m_driver; | ||
| 41 | static TestDriver* m_this; | ||
| 42 | }; | ||
| 43 | |||
| 44 | |||
| 45 | #endif /* TESTS_TEST_COMMON_TEST_DRIVER_H_ */ | ||
diff --git a/tests/basic/test.c b/tests/test_common/test_matrix.h index 2afb4d6a9..afc65c556 100644 --- a/tests/basic/test.c +++ b/tests/test_common/test_matrix.h | |||
| @@ -14,11 +14,18 @@ | |||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
| 17 | #include "quantum.h" | 17 | #ifndef TESTS_TEST_COMMON_TEST_MATRIX_H_ |
| 18 | #define TESTS_TEST_COMMON_TEST_MATRIX_H_ | ||
| 18 | 19 | ||
| 19 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 20 | #ifdef __cplusplus |
| 20 | [0] = { | 21 | extern "C" { |
| 21 | {KC_A, KC_B}, | 22 | #endif |
| 22 | {KC_C, KC_D} | 23 | |
| 23 | }, | 24 | void press_key(uint8_t col, uint8_t row); |
| 24 | }; | 25 | void release_key(uint8_t col, uint8_t row); |
| 26 | |||
| 27 | #ifdef __cplusplus | ||
| 28 | } | ||
| 29 | #endif | ||
| 30 | |||
| 31 | #endif /* TESTS_TEST_COMMON_TEST_MATRIX_H_ */ | ||
