From c86f0d6ff4e8fc8b09e3c8004e7079ae88646663 Mon Sep 17 00:00:00 2001 From: Nicolas Munnich <98408764+nmunnich@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:29:59 +0100 Subject: [PATCH] chore: Add some basic encoder tests (#2845) Adds some encoder tests for rotating, and basic layers. Mock Kscans don't seem to interact nicely, slightly on the hacky side. However, better to have hacky tests than no tests. --- app/tests/encoders/behavior_keymap.dtsi | 44 +++++++++++++++++++ app/tests/encoders/layers-1/events.patterns | 2 + .../encoders/layers-1/keycode_events.snapshot | 3 ++ .../encoders/layers-1/native_posix_64.keymap | 11 +++++ app/tests/encoders/layers-2/events.patterns | 2 + .../encoders/layers-2/keycode_events.snapshot | 4 ++ .../encoders/layers-2/native_posix_64.keymap | 11 +++++ app/tests/encoders/rotate/events.patterns | 1 + .../encoders/rotate/keycode_events.snapshot | 4 ++ .../encoders/rotate/native_posix_64.keymap | 10 +++++ 10 files changed, 92 insertions(+) create mode 100644 app/tests/encoders/behavior_keymap.dtsi create mode 100644 app/tests/encoders/layers-1/events.patterns create mode 100644 app/tests/encoders/layers-1/keycode_events.snapshot create mode 100644 app/tests/encoders/layers-1/native_posix_64.keymap create mode 100644 app/tests/encoders/layers-2/events.patterns create mode 100644 app/tests/encoders/layers-2/keycode_events.snapshot create mode 100644 app/tests/encoders/layers-2/native_posix_64.keymap create mode 100644 app/tests/encoders/rotate/events.patterns create mode 100644 app/tests/encoders/rotate/keycode_events.snapshot create mode 100644 app/tests/encoders/rotate/native_posix_64.keymap diff --git a/app/tests/encoders/behavior_keymap.dtsi b/app/tests/encoders/behavior_keymap.dtsi new file mode 100644 index 000000000..6ac37f017 --- /dev/null +++ b/app/tests/encoders/behavior_keymap.dtsi @@ -0,0 +1,44 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &tog 2 &kp X + &tog 1 &none + >; + sensor-bindings = <&inc_dec_kp A B>; + }; + skip_layer { + bindings = < + &trans &kp Y + &none &none + >; + sensor-bindings = <&inc_dec_kp N M>; + }; + alt_layer { + bindings = < + &trans &kp Z + &none &none + >; + sensor-bindings = <&inc_dec_kp C D>; + }; + }; + + mock_encoder: mock_encoder { + compatible = "zmk,sensor-encoder-mock"; + status = "okay"; + event-startup-delay = <200>; + event-period = <200>; + }; + + sensors: sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&mock_encoder>; + triggers-per-rotation = <20>; + }; +}; \ No newline at end of file diff --git a/app/tests/encoders/layers-1/events.patterns b/app/tests/encoders/layers-1/events.patterns new file mode 100644 index 000000000..517ae5a28 --- /dev/null +++ b/app/tests/encoders/layers-1/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*layer_changed/layer_changed/p \ No newline at end of file diff --git a/app/tests/encoders/layers-1/keycode_events.snapshot b/app/tests/encoders/layers-1/keycode_events.snapshot new file mode 100644 index 000000000..95019009b --- /dev/null +++ b/app/tests/encoders/layers-1/keycode_events.snapshot @@ -0,0 +1,3 @@ +layer_changed: layer 2 state 1 +pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/encoders/layers-1/native_posix_64.keymap b/app/tests/encoders/layers-1/native_posix_64.keymap new file mode 100644 index 000000000..6996f5516 --- /dev/null +++ b/app/tests/encoders/layers-1/native_posix_64.keymap @@ -0,0 +1,11 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,8000) + >; +}; + +&mock_encoder { + events = <18>; +}; diff --git a/app/tests/encoders/layers-2/events.patterns b/app/tests/encoders/layers-2/events.patterns new file mode 100644 index 000000000..517ae5a28 --- /dev/null +++ b/app/tests/encoders/layers-2/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode_//p +s/.*layer_changed/layer_changed/p \ No newline at end of file diff --git a/app/tests/encoders/layers-2/keycode_events.snapshot b/app/tests/encoders/layers-2/keycode_events.snapshot new file mode 100644 index 000000000..153dea9ce --- /dev/null +++ b/app/tests/encoders/layers-2/keycode_events.snapshot @@ -0,0 +1,4 @@ +layer_changed: layer 1 state 1 +layer_changed: layer 2 state 1 +pressed: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x06 implicit_mods 0x00 explicit_mods 0x00 \ No newline at end of file diff --git a/app/tests/encoders/layers-2/native_posix_64.keymap b/app/tests/encoders/layers-2/native_posix_64.keymap new file mode 100644 index 000000000..7b7fbdb25 --- /dev/null +++ b/app/tests/encoders/layers-2/native_posix_64.keymap @@ -0,0 +1,11 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < ZMK_MOCK_PRESS(1,0,10) ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,1,8000) + >; +}; + +&mock_encoder { + events = <18>; +}; diff --git a/app/tests/encoders/rotate/events.patterns b/app/tests/encoders/rotate/events.patterns new file mode 100644 index 000000000..833100f6a --- /dev/null +++ b/app/tests/encoders/rotate/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/app/tests/encoders/rotate/keycode_events.snapshot b/app/tests/encoders/rotate/keycode_events.snapshot new file mode 100644 index 000000000..b809163dd --- /dev/null +++ b/app/tests/encoders/rotate/keycode_events.snapshot @@ -0,0 +1,4 @@ +pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00 +pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 +released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00 diff --git a/app/tests/encoders/rotate/native_posix_64.keymap b/app/tests/encoders/rotate/native_posix_64.keymap new file mode 100644 index 000000000..883352e71 --- /dev/null +++ b/app/tests/encoders/rotate/native_posix_64.keymap @@ -0,0 +1,10 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = < ZMK_MOCK_PRESS(1,1,1000) + >; +}; + +&mock_encoder { + events = <18 (-18)>; +};