Commit Graph

45 Commits

Author SHA1 Message Date
Pascal Getreuer 7d692d64f3
Fix Layer Mod handling of with right-handed mods. (#19845) 2023-02-14 12:44:42 -08:00
Stefan Kerkmann c2b13bd77b
Introduce VERIFY_AND_CLEAR shorthand (#19370)
Which is just a syntactic sugar for
testing::Mock::VerifyAndClearExpectations to reduce the visual clutter
in unit-tests.
2022-12-18 21:55:14 +01:00
Stefan Kerkmann 962e4c0e18
[Test] Reset timer for every unit test and provide timestamps for log messages (#17028) 2022-12-15 02:31:08 +11:00
Felix Kuehling 4ae7525923
Bug17281 - Retain momentary layers until the end of tapping (#17282)
* Make process_tapping more readable

Move most #ifdefs into conditionally defined macros to make the logic
easier to follow.

* Retain momentary layers until the end of tapping

This allows mod-tap and layer-tap keys on layers to behave as expected.

Bug: https://github.com/qmk/qmk_firmware/issues/17281

* Add tests for delayed mod/layer release while tapping

Mods and layer key release is delayed while tapping is in progress to
ensure that the tap is registered with the modifier state and on the
layer where the key was first pressed.

Signed-off-by: Felix Kuehling <felix.kuehling@gmail.com>
2022-11-28 09:16:38 +01:00
Drashna Jaelre 1caedd10c4
Don't clear keys on layer change unless STRICT_LAYER_RELEASE is enabled (#18577)
* Don't clear mousekeys unless clearing keys

* Revert "Don't clear mousekeys unless clearing keys"

This reverts commit 29a0c06b547d72b80d416a8b6fab478c77fbd247.

* Just don't clear anything on layer set

* Fix lint

* Enable test?
2022-11-12 02:11:50 +00:00
Stefan Kerkmann f27b617f36
[Core] Process all changed keys in one scan loop, deprecate `QMK_KEYS_PER_SCAN` (#15292) 2022-08-06 20:51:13 +10:00
Pascal Getreuer 95d20e6d8b
Fix and add unit tests for Caps Word to work with Unicode Map, Auto Shift, Retro Shift. (#17284)
* Fix Caps Word and Unicode Map

* Tests for Caps Word + Auto Shift and Unicode Map.

* Fix formatting

* Add additional keyboard report expectation macros

This commit defines five test utilities, EXPECT_REPORT, EXPECT_UNICODE,
EXPECT_EMPTY_REPORT, EXPECT_ANY_REPORT and EXPECT_NO_REPORT for use with
TestDriver.

EXPECT_REPORT sets a gmock expectation that a given keyboard report will
be sent. For instance,

  EXPECT_REPORT(driver, (KC_LSFT, KC_A));

is shorthand for

  EXPECT_CALL(driver,
      send_keyboard_mock(KeyboardReport(KC_LSFT, KC_A)));

EXPECT_UNICODE sets a gmock expectation that a given Unicode code point
will be sent using UC_LNX input mode. For instance for U+2013,

  EXPECT_UNICODE(driver, 0x2013);

expects the sequence of keys:

  "Ctrl+Shift+U, 2, 0, 1, 3, space".

EXPECT_EMPTY_REPORT sets a gmock expectation that a given keyboard
report will be sent. For instance

  EXPECT_EMPTY_REPORT(driver);

expects a single report without keypresses or modifiers.

EXPECT_ANY_REPORT sets a gmock expectation that a arbitrary keyboard
report will be sent, without matching its contents. For instance

  EXPECT_ANY_REPORT(driver).Times(1);

expects a single arbitrary keyboard report will be sent.

EXPECT_NO_REPORT sets a gmock expectation that no keyboard report will
be sent at all.

* Add tap_key() and tap_keys() to TestFixture.

This commit adds a `tap_key(key)` method to TestFixture that taps a
given KeymapKey, optionally with a specified delay between press and
release.

Similarly, the method `tap_keys(key_a, key_b, key_c)` taps a sequence of
KeymapKeys.

* Use EXPECT_REPORT, tap_keys, etc. in most tests.

This commit uses EXPECT_REPORT, EXPECT_UNICODE, EXPECT_EMPTY_REPORT,
EXPECT_NO_REPORT, tap_key() and tap_keys() test utilities from the
previous two commits in most tests. Particularly the EXPECT_REPORT
macro is frequently useful and makes a nice reduction in boilerplate
needed to express many tests.

Co-authored-by: David Kosorin <david@kosorin.net>
2022-06-05 09:14:02 +02:00
Ryan 1d11ae3087
Rip out old macro and action_function system (#16025)
* Rip out old macro and action_function system

* Update quantum/action_util.c

Co-authored-by: Joel Challis <git@zvecr.com>
2022-01-24 21:22:20 +00:00
Stefan Kerkmann 8b865a9d64
[Core] Don't send keyboard reports that propagate no changes to the host (#14065) 2021-12-14 10:40:18 -08:00
Stefan Kerkmann a24bdccee0
[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>
2021-11-23 13:31:01 +11:00
Nick Brassel 7746aefe94 Revert "[Tests] Increase QMK test coverage (#13789)"
This reverts commit b6054c0206.
2021-11-23 09:54:04 +11:00
Stefan Kerkmann b6054c0206
[Tests] Increase QMK test coverage (#13789)
* 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

* `qmk format-c

* Fix tests

Co-authored-by: Nick Brassel <nick@tzarc.org>
2021-11-23 08:15:04 +11:00
Ryan f529580860
Basic keycode overhaul (#14726) 2021-11-03 22:22:17 -07:00
Ryan 1b7b72c0e9
Ensure single newline at EOF for core files (#11310) 2020-12-28 04:36:32 +11:00
QMK Bot 5e98eaaaff format code according to conventions [skip ci] 2020-03-13 18:44:56 +00:00
fredizzimo 9e8767917d
Fix pressing two keys with the same keycode but different modifiers (#2710)
* Fix extra keyboard report during test_fixture teardown

* Add tests for pressing two keys with only different modifers

* Fix #1708

When two keys that use the same keycode, but different modifiers were
pressed at the same time, the second keypress wasn't registered. This is
fixed by forcing a key release when we detect a new press for the same
keycode.

* Fix the NKRO version of is_key_pressed

* Fix uninitalized loop variable

Co-authored-by: Jack Humbert <jack.humb@gmail.com>
2020-03-13 14:09:38 -04:00
skullY b624f32f94 clang-format changes 2019-08-30 15:01:52 -07:00
fauxpark 3ea7c2a434 Remove empty action_function() 2019-01-11 18:32:43 -08:00
Colin T.A. Gray 4ea3bbdb4c add tests for action_layer.c and reset layer state after tests 2017-12-15 13:23:30 -05:00
Fred Sundvik 78545b9509 Fix unreferenced errors with mingw compiler and unit tests 2017-07-11 19:41:04 +03:00
Fred Sundvik 9158673166 Reference issue #1478 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik b3af79eaff Reference issue #1477 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 41efcd6d73 Reference issue #524 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 60b1880a62 Reference issue #1476 from the unit tests 2017-07-08 21:59:51 -04:00
Fred Sundvik 67f722c9c8 Configure vscode file associations, use hpp instead of h 2017-07-08 21:59:51 -04:00
Fred Sundvik 631c09e976 Fix keymap formatting 2017-07-08 21:59:51 -04:00
Fred Sundvik e5780a6dc6 Add tests for macros 2017-07-08 21:59:51 -04:00
Fred Sundvik fc4bfbe580 Rename tests to start with test_ 2017-07-08 21:59:51 -04:00
Fred Sundvik 4e69a8bda6 Add basic timing support, and SFT_T tests
Also expose some bugs...
2017-07-08 21:59:51 -04:00
Fred Sundvik a62f449659 Add test for a combo key 2017-07-08 21:59:51 -04:00
Fred Sundvik cae7a9c3ec Add simple modifier test 2017-07-08 21:59:51 -04:00
Fred Sundvik 1985f43bad Improve the tests a bit 2017-07-08 21:59:51 -04:00
Fred Sundvik 72c8df1f19 A bigger test matrix, and test for unmapped keys 2017-07-08 21:59:51 -04:00
Fred Sundvik 1e4cc36e14 Rename test.cpp to keypress.cpp 2017-07-08 21:59:51 -04:00
Fred Sundvik 7d79962785 Move test keymap to keymap.c 2017-07-08 21:59:51 -04:00
Fred Sundvik 43d8fa5bf1 More natural interface for setting keyboard leds 2017-06-19 00:19:09 +03:00
Fred Sundvik 36f820be7e Add a test fixture
It only initializes QMK once, and clears the matrix after each test.
2017-06-18 23:49:38 +03:00
Fred Sundvik e85b185796 Test two keys pressed at once 2017-06-18 21:22:22 +03:00
Fred Sundvik bd1729d5be Actually test for correct key presses 2017-06-18 21:22:22 +03:00
Fred Sundvik c38589d861 Fix the order of init and driver creation 2017-06-18 21:22:22 +03:00
Fred Sundvik 3bb0586acc Add a couple of basic tests and implement driver mock 2017-06-18 21:22:22 +03:00
Fred Sundvik 617578399c Add keymap 2017-06-18 21:22:22 +03:00
Fred Sundvik 1c0fe956ac Split common.mk into common.mk and common_features.mk
To support including keyboard/keymap specific rules before it
2017-06-18 21:22:22 +03:00
Fred Sundvik 585d646128 Define MATRIX_COLS and MATRIX_ROWS 2017-06-18 21:10:42 +03:00
Fred Sundvik 30f22d450d Add basic infrastrucure for building full tests 2017-06-18 21:08:23 +03:00