diff options
| author | Stefan Kerkmann <karlk90@pm.me> | 2021-11-23 03:31:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-23 13:31:01 +1100 |
| commit | a24bdccee0580d1263733bc7e66e4e4f97713f19 (patch) | |
| tree | 868cb12a436a87b39c936292f442bcc266ae0224 /tests/auto_shift | |
| parent | e20bc76a1e05d02c15a452e51fa76d9ec39b0369 (diff) | |
| download | qmk_firmware-a24bdccee0580d1263733bc7e66e4e4f97713f19.tar.gz qmk_firmware-a24bdccee0580d1263733bc7e66e4e4f97713f19.zip | |
[Tests] Increase QMK test coverage take 2 (#15269)
* Add per-test keymaps
* Add better trace and info logs for failed unit-tests
* Add layer state assertion with tracing message
* Use individual test binaries configuration options
* Add basic qmk functionality tests
* Add tap hold configurations tests
* Add auto shift tests
Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'tests/auto_shift')
| -rw-r--r-- | tests/auto_shift/config.h | 19 | ||||
| -rw-r--r-- | tests/auto_shift/test.mk | 20 | ||||
| -rw-r--r-- | tests/auto_shift/test_auto_shift.cpp | 73 |
3 files changed, 112 insertions, 0 deletions
diff --git a/tests/auto_shift/config.h b/tests/auto_shift/config.h new file mode 100644 index 000000000..4f343b452 --- /dev/null +++ b/tests/auto_shift/config.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* Copyright 2021 Stefan Kerkmann | ||
| 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 | #pragma once | ||
| 18 | |||
| 19 | #include "test_common.h" \ No newline at end of file | ||
diff --git a/tests/auto_shift/test.mk b/tests/auto_shift/test.mk new file mode 100644 index 000000000..4259c606e --- /dev/null +++ b/tests/auto_shift/test.mk | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | # Copyright 2021 Stefan Kerkmann | ||
| 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 | # Keep this file, even if it is empty, as a marker that this folder contains tests | ||
| 18 | # -------------------------------------------------------------------------------- | ||
| 19 | |||
| 20 | AUTO_SHIFT_ENABLE = yes \ No newline at end of file | ||
diff --git a/tests/auto_shift/test_auto_shift.cpp b/tests/auto_shift/test_auto_shift.cpp new file mode 100644 index 000000000..9c5ed9a83 --- /dev/null +++ b/tests/auto_shift/test_auto_shift.cpp | |||
| @@ -0,0 +1,73 @@ | |||
| 1 | /* Copyright 2021 Stefan Kerkmann | ||
| 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 "keyboard_report_util.hpp" | ||
| 18 | #include "keycode.h" | ||
| 19 | #include "test_common.hpp" | ||
| 20 | #include "action_tapping.h" | ||
| 21 | #include "test_fixture.hpp" | ||
| 22 | #include "test_keymap_key.hpp" | ||
| 23 | |||
| 24 | using testing::_; | ||
| 25 | using testing::InSequence; | ||
| 26 | |||
| 27 | class AutoShift : public TestFixture {}; | ||
| 28 | |||
| 29 | TEST_F(AutoShift, key_release_before_timeout) { | ||
| 30 | TestDriver driver; | ||
| 31 | InSequence s; | ||
| 32 | auto regular_key = KeymapKey(0, 2, 0, KC_A); | ||
| 33 | |||
| 34 | set_keymap({regular_key}); | ||
| 35 | |||
| 36 | /* Press regular key */ | ||
| 37 | EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||
| 38 | regular_key.press(); | ||
| 39 | run_one_scan_loop(); | ||
| 40 | testing::Mock::VerifyAndClearExpectations(&driver); | ||
| 41 | |||
| 42 | /* Release regular key */ | ||
| 43 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A))); | ||
| 44 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 45 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 46 | regular_key.release(); | ||
| 47 | run_one_scan_loop(); | ||
| 48 | testing::Mock::VerifyAndClearExpectations(&driver); | ||
| 49 | } | ||
| 50 | |||
| 51 | TEST_F(AutoShift, key_release_after_timeout) { | ||
| 52 | TestDriver driver; | ||
| 53 | InSequence s; | ||
| 54 | auto regular_key = KeymapKey(0, 2, 0, KC_A); | ||
| 55 | |||
| 56 | set_keymap({regular_key}); | ||
| 57 | |||
| 58 | /* Press regular key */ | ||
| 59 | EXPECT_CALL(driver, send_keyboard_mock(_)).Times(0); | ||
| 60 | regular_key.press(); | ||
| 61 | idle_for(AUTO_SHIFT_TIMEOUT); | ||
| 62 | testing::Mock::VerifyAndClearExpectations(&driver); | ||
| 63 | |||
| 64 | /* Release regular key */ | ||
| 65 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A))); | ||
| 66 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_LSFT))); | ||
| 67 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 68 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 69 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 70 | regular_key.release(); | ||
| 71 | run_one_scan_loop(); | ||
| 72 | testing::Mock::VerifyAndClearExpectations(&driver); | ||
| 73 | } \ No newline at end of file | ||
