summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build_full_test.mk3
-rw-r--r--tests/basic/test.cpp19
-rw-r--r--tests/test_common/matrix.c6
-rw-r--r--tests/test_common/test_fixture.cpp38
-rw-r--r--tests/test_common/test_fixture.h28
-rw-r--r--tests/test_common/test_matrix.h1
6 files changed, 80 insertions, 15 deletions
diff --git a/build_full_test.mk b/build_full_test.mk
index 67c1ca5e58..bfd89174de 100644
--- a/build_full_test.mk
+++ b/build_full_test.mk
@@ -23,7 +23,8 @@ $(TEST)_SRC= \
$(QUANTUM_SRC) \
tests/test_common/matrix.c \
tests/test_common/test_driver.cpp \
- tests/test_common/keyboard_report_util.cpp
+ tests/test_common/keyboard_report_util.cpp \
+ tests/test_common/test_fixture.cpp
$(TEST)_DEFS=$(TMK_COMMON_DEFS)
$(TEST)_CONFIG=$(TEST_PATH)/config.h
VPATH+=$(TOP_DIR)/tests/test_common
diff --git a/tests/basic/test.cpp b/tests/basic/test.cpp
index 398063fcaa..26a09585ca 100644
--- a/tests/basic/test.cpp
+++ b/tests/basic/test.cpp
@@ -18,10 +18,10 @@
#include "gmock/gmock.h"
#include "quantum.h"
-#include "keyboard.h"
#include "test_driver.h"
#include "test_matrix.h"
#include "keyboard_report_util.h"
+#include "test_fixture.h"
using testing::_;
using testing::Return;
@@ -33,35 +33,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
},
};
-TEST(KeyPress, SendKeyboardIsNotCalledWhenNoKeyIsPressed) {
+class KeyPress : public TestFixture {};
+
+TEST_F(KeyPress, SendKeyboardIsNotCalledWhenNoKeyIsPressed) {
TestDriver driver;
- EXPECT_CALL(driver, send_keyboard_mock(_));
- keyboard_init();
EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0);
keyboard_task();
}
-TEST(KeyPress, CorrectKeyIsReportedWhenPressed) {
+TEST_F(KeyPress, CorrectKeyIsReportedWhenPressed) {
TestDriver driver;
- EXPECT_CALL(driver, send_keyboard_mock(_));
- keyboard_init();
press_key(0, 0);
EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A)));
keyboard_task();
}
-TEST(KeyPress, CorrectKeysAreReportedWhenTwoKeysArePressed) {
+TEST_F(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();
diff --git a/tests/test_common/matrix.c b/tests/test_common/matrix.c
index 5ab5bac6c9..0d9fa68b04 100644
--- a/tests/test_common/matrix.c
+++ b/tests/test_common/matrix.c
@@ -22,7 +22,7 @@
static matrix_row_t matrix[MATRIX_ROWS] = {};
void matrix_init(void) {
- memset(matrix, 0, sizeof(matrix));
+ clear_all_keys();
matrix_init_quantum();
}
@@ -54,3 +54,7 @@ void press_key(uint8_t col, uint8_t row) {
void release_key(uint8_t col, uint8_t row) {
matrix[row] &= ~(1 << col);
}
+
+void clear_all_keys(void) {
+ memset(matrix, 0, sizeof(matrix));
+}
diff --git a/tests/test_common/test_fixture.cpp b/tests/test_common/test_fixture.cpp
new file mode 100644
index 0000000000..aff518d21e
--- /dev/null
+++ b/tests/test_common/test_fixture.cpp
@@ -0,0 +1,38 @@
+#include "test_fixture.h"
+#include "gmock/gmock.h"
+#include "test_driver.h"
+#include "test_matrix.h"
+#include "keyboard.h"
+
+using testing::_;
+using testing::AnyNumber;
+using testing::Return;
+using testing::Between;
+
+void TestFixture::SetUpTestCase() {
+ TestDriver driver;
+ EXPECT_CALL(driver, send_keyboard_mock(_));
+ keyboard_init();
+}
+
+void TestFixture::TearDownTestCase() {
+}
+
+TestFixture::TestFixture() {
+}
+
+TestFixture::~TestFixture() {
+ TestDriver driver;
+ clear_all_keys();
+ // Run for a while to make sure all keys are completely released
+ // Should probably wait until tapping term etc, has timed out
+ EXPECT_CALL(driver, send_keyboard_mock(_)).Times(AnyNumber());
+ EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
+ for (int i=0; i<100; i++) {
+ keyboard_task();
+ }
+ testing::Mock::VerifyAndClearExpectations(&driver);
+ // Verify that the matrix really is cleared
+ EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(Between(0, 1));
+ EXPECT_CALL(driver, keyboard_leds_mock()).WillRepeatedly(Return(0));
+} \ No newline at end of file
diff --git a/tests/test_common/test_fixture.h b/tests/test_common/test_fixture.h
new file mode 100644
index 0000000000..a775a425aa
--- /dev/null
+++ b/tests/test_common/test_fixture.h
@@ -0,0 +1,28 @@
+/* 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/>.
+ */
+
+ #pragma once
+
+#include "gtest/gtest.h"
+
+class TestFixture : public testing::Test {
+public:
+ TestFixture();
+ ~TestFixture();
+ static void SetUpTestCase();
+ static void TearDownTestCase();
+
+}; \ No newline at end of file
diff --git a/tests/test_common/test_matrix.h b/tests/test_common/test_matrix.h
index afc65c556b..174fc4f227 100644
--- a/tests/test_common/test_matrix.h
+++ b/tests/test_common/test_matrix.h
@@ -23,6 +23,7 @@ extern "C" {
void press_key(uint8_t col, uint8_t row);
void release_key(uint8_t col, uint8_t row);
+void clear_all_keys(void);
#ifdef __cplusplus
}