diff options
-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_ */ | ||