diff options
author | Fred Sundvik <fsundvik@gmail.com> | 2017-06-18 23:49:38 +0300 |
---|---|---|
committer | Fred Sundvik <fsundvik@gmail.com> | 2017-06-18 23:49:38 +0300 |
commit | 36f820be7e80bc8f1f5489373708356cf142c269 (patch) | |
tree | cf3561b80650e536a2c41f0e3bb4bc70635b6435 /tests/test_common | |
parent | e85b1857968d4c0378b9778650c30b9d2bca3ea9 (diff) | |
download | qmk_firmware-36f820be7e80bc8f1f5489373708356cf142c269.tar.gz qmk_firmware-36f820be7e80bc8f1f5489373708356cf142c269.zip |
Add a test fixture
It only initializes QMK once, and clears the matrix after each test.
Diffstat (limited to 'tests/test_common')
-rw-r--r-- | tests/test_common/matrix.c | 6 | ||||
-rw-r--r-- | tests/test_common/test_fixture.cpp | 38 | ||||
-rw-r--r-- | tests/test_common/test_fixture.h | 28 | ||||
-rw-r--r-- | tests/test_common/test_matrix.h | 1 |
4 files changed, 72 insertions, 1 deletions
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 } |