]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add a couple of basic tests and implement driver mock
authorFred Sundvik <fsundvik@gmail.com>
Fri, 16 Jun 2017 20:50:44 +0000 (23:50 +0300)
committerFred Sundvik <fsundvik@gmail.com>
Sun, 18 Jun 2017 18:22:22 +0000 (21:22 +0300)
build_full_test.mk
tests/basic/test.c [deleted file]
tests/basic/test.cpp [new file with mode: 0644]
tests/test_common/matrix.c
tests/test_common/test_driver.cpp [new file with mode: 0644]
tests/test_common/test_driver.h [new file with mode: 0644]
tests/test_common/test_matrix.h [new file with mode: 0644]

index 43e2a20a7d47838124432ec75dd03d448a1dc735..5f9bbe5e649626e81aa228f53b28a357720a3891 100644 (file)
 
 TEST_PATH=tests/$(TEST)
 
-$(TEST)_SRC=$(TEST_PATH)/test.c $(TMK_COMMON_SRC) $(QUANTUM_SRC) tests/test_common/matrix.c
+$(TEST)_SRC= \
+       $(TEST_PATH)/test.cpp \
+       $(TMK_COMMON_SRC) \
+       $(QUANTUM_SRC) \
+       tests/test_common/matrix.c \
+       tests/test_common/test_driver.cpp
 $(TEST)_DEFS=$(TMK_COMMON_DEFS)
 $(TEST)_CONFIG=$(TEST_PATH)/config.h
 VPATH+=$(TOP_DIR)/tests/test_common
diff --git a/tests/basic/test.c b/tests/basic/test.c
deleted file mode 100644 (file)
index 2afb4d6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2017 Fred Sundvik
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "quantum.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       [0] = {
-           {KC_A, KC_B},
-           {KC_C, KC_D}
-       },
-};
diff --git a/tests/basic/test.cpp b/tests/basic/test.cpp
new file mode 100644 (file)
index 0000000..ce9a0cd
--- /dev/null
@@ -0,0 +1,50 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "quantum.h"
+#include "keyboard.h"
+#include "test_driver.h"
+#include "test_matrix.h"
+
+using testing::_;
+using testing::Return;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = {
+           {KC_A, KC_B},
+           {KC_C, KC_D}
+       },
+};
+
+TEST(Basic, SendKeyboardIsNotCalledWhenNoKeyIsPressed) {
+    keyboard_init();
+    TestDriver driver;
+    EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
+    EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
+    keyboard_task();
+}
+
+TEST(Basic, SendKeyboardIsCalledWhenAKeyIsPressed) {
+    keyboard_init();
+    TestDriver driver;
+    press_key(0, 0);
+    EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
+    EXPECT_CALL(driver, send_keyboard_mock(_));
+    keyboard_task();
+}
index 940f28f35baeb5e95f9050d52d28599ef5503a82..85556e2c485eb0a2d79b4a404f38f22f55f123c3 100644 (file)
@@ -16,6 +16,9 @@
 
 
 #include "matrix.h"
+#include "test_matrix.h"
+
+static matrix_row_t matrix[MATRIX_ROWS] = {};
 
 void matrix_init(void) {
     matrix_init_quantum();
@@ -27,7 +30,7 @@ uint8_t matrix_scan(void) {
 }
 
 matrix_row_t matrix_get_row(uint8_t row) {
-    return 0;
+    return matrix[row];
 }
 
 void matrix_print(void) {
@@ -41,3 +44,11 @@ void matrix_init_kb(void) {
 void matrix_scan_kb(void) {
 
 }
+
+void press_key(uint8_t col, uint8_t row) {
+    matrix[row] |= 1 << col;
+}
+
+void release_key(uint8_t col, uint8_t row) {
+    matrix[row] &= ~(1 << col);
+}
diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp
new file mode 100644 (file)
index 0000000..7c67f57
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "test_driver.h"
+
+TestDriver* TestDriver::m_this = nullptr;
+
+TestDriver::TestDriver()
+    : m_driver{
+        &TestDriver::keyboard_leds,
+        &TestDriver::send_keyboard,
+        &TestDriver::send_mouse,
+        &TestDriver::send_system,
+        &TestDriver::send_consumer
+    }
+{
+
+    host_set_driver(&m_driver);
+    m_this = this;
+}
+
+TestDriver::~TestDriver() {
+    m_this = nullptr;
+}
+
+uint8_t TestDriver::keyboard_leds(void) {
+    return m_this->keyboard_leds_mock();
+}
+
+void TestDriver::send_keyboard(report_keyboard_t* report) {
+    m_this->send_keyboard_mock(report);
+
+}
+
+void TestDriver::send_mouse(report_mouse_t* report) {
+    m_this->send_mouse_mock(report);
+}
+
+void TestDriver::send_system(uint16_t data) {
+    m_this->send_system_mock(data);
+}
+
+void TestDriver::send_consumer(uint16_t data) {
+    m_this->send_consumer_mock(data);
+}
diff --git a/tests/test_common/test_driver.h b/tests/test_common/test_driver.h
new file mode 100644 (file)
index 0000000..d5b8318
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TESTS_TEST_COMMON_TEST_DRIVER_H_
+#define TESTS_TEST_COMMON_TEST_DRIVER_H_
+
+#include "gmock/gmock.h"
+#include <stdint.h>
+#include "host.h"
+
+
+class TestDriver {
+public:
+    TestDriver();
+    ~TestDriver();
+    MOCK_METHOD0(keyboard_leds_mock, uint8_t ());
+    MOCK_METHOD1(send_keyboard_mock, void (report_keyboard_t*));
+    MOCK_METHOD1(send_mouse_mock, void (report_mouse_t*));
+    MOCK_METHOD1(send_system_mock, void (uint16_t));
+    MOCK_METHOD1(send_consumer_mock, void (uint16_t));
+private:
+    static uint8_t keyboard_leds(void);
+    static void send_keyboard(report_keyboard_t *report);
+    static void send_mouse(report_mouse_t* report);
+    static void send_system(uint16_t data);
+    static void send_consumer(uint16_t data);
+    host_driver_t m_driver;
+    static TestDriver* m_this;
+};
+
+
+#endif /* TESTS_TEST_COMMON_TEST_DRIVER_H_ */
diff --git a/tests/test_common/test_matrix.h b/tests/test_common/test_matrix.h
new file mode 100644 (file)
index 0000000..afc65c5
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright 2017 Fred Sundvik
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TESTS_TEST_COMMON_TEST_MATRIX_H_
+#define TESTS_TEST_COMMON_TEST_MATRIX_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void press_key(uint8_t col, uint8_t row);
+void release_key(uint8_t col, uint8_t row);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TESTS_TEST_COMMON_TEST_MATRIX_H_ */