From dd94877ec6d2ee5c4cdb0e71287abd76585b0268 Mon Sep 17 00:00:00 2001
From: Isaac Elenbaas
Date: Sun, 24 Sep 2023 22:45:49 -0400
Subject: Improve test invocation, fix Retro Shift bugs, and add Auto+Retro
Shift test cases (#15889)
---
tests/caps_word/auto_shift/config.h | 21 +++
tests/caps_word/auto_shift/retro_shift/config.h | 22 ++++
tests/caps_word/auto_shift/retro_shift/test.mk | 18 +++
.../retro_shift/test_caps_word_retroshift.cpp | 141 +++++++++++++++++++++
tests/caps_word/auto_shift/test.mk | 18 +++
.../auto_shift/test_caps_word_autoshift.cpp | 66 ++++++++++
tests/caps_word/caps_word_autoshift/config.h | 22 ----
tests/caps_word/caps_word_autoshift/test.mk | 18 ---
.../test_caps_word_autoshift.cpp | 137 --------------------
tests/caps_word/caps_word_unicodemap/config.h | 20 ---
tests/caps_word/caps_word_unicodemap/test.mk | 18 ---
.../test_caps_word_unicodemap.cpp | 121 ------------------
tests/caps_word/unicodemap/config.h | 20 +++
tests/caps_word/unicodemap/test.mk | 18 +++
.../unicodemap/test_caps_word_unicodemap.cpp | 121 ++++++++++++++++++
15 files changed, 445 insertions(+), 336 deletions(-)
create mode 100644 tests/caps_word/auto_shift/config.h
create mode 100644 tests/caps_word/auto_shift/retro_shift/config.h
create mode 100644 tests/caps_word/auto_shift/retro_shift/test.mk
create mode 100644 tests/caps_word/auto_shift/retro_shift/test_caps_word_retroshift.cpp
create mode 100644 tests/caps_word/auto_shift/test.mk
create mode 100644 tests/caps_word/auto_shift/test_caps_word_autoshift.cpp
delete mode 100644 tests/caps_word/caps_word_autoshift/config.h
delete mode 100644 tests/caps_word/caps_word_autoshift/test.mk
delete mode 100644 tests/caps_word/caps_word_autoshift/test_caps_word_autoshift.cpp
delete mode 100644 tests/caps_word/caps_word_unicodemap/config.h
delete mode 100644 tests/caps_word/caps_word_unicodemap/test.mk
delete mode 100644 tests/caps_word/caps_word_unicodemap/test_caps_word_unicodemap.cpp
create mode 100644 tests/caps_word/unicodemap/config.h
create mode 100644 tests/caps_word/unicodemap/test.mk
create mode 100644 tests/caps_word/unicodemap/test_caps_word_unicodemap.cpp
(limited to 'tests/caps_word')
diff --git a/tests/caps_word/auto_shift/config.h b/tests/caps_word/auto_shift/config.h
new file mode 100644
index 0000000000..aff389100e
--- /dev/null
+++ b/tests/caps_word/auto_shift/config.h
@@ -0,0 +1,21 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#pragma once
+
+#include "test_common.h"
+
+#define TAPPING_TERM 200
+#define AUTO_SHIFT_TIMEOUT 150
diff --git a/tests/caps_word/auto_shift/retro_shift/config.h b/tests/caps_word/auto_shift/retro_shift/config.h
new file mode 100644
index 0000000000..b80f53b9dd
--- /dev/null
+++ b/tests/caps_word/auto_shift/retro_shift/config.h
@@ -0,0 +1,22 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#pragma once
+
+#include "test_common.h"
+
+#define TAPPING_TERM 200
+#define AUTO_SHIFT_TIMEOUT 150
+#define RETRO_SHIFT 500
diff --git a/tests/caps_word/auto_shift/retro_shift/test.mk b/tests/caps_word/auto_shift/retro_shift/test.mk
new file mode 100644
index 0000000000..7f717d7fc1
--- /dev/null
+++ b/tests/caps_word/auto_shift/retro_shift/test.mk
@@ -0,0 +1,18 @@
+# Copyright 2022 Google LLC
+#
+# 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 .
+
+CAPS_WORD_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
+
diff --git a/tests/caps_word/auto_shift/retro_shift/test_caps_word_retroshift.cpp b/tests/caps_word/auto_shift/retro_shift/test_caps_word_retroshift.cpp
new file mode 100644
index 0000000000..03a7a61a73
--- /dev/null
+++ b/tests/caps_word/auto_shift/retro_shift/test_caps_word_retroshift.cpp
@@ -0,0 +1,141 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#include "keyboard_report_util.hpp"
+#include "keycode.h"
+#include "test_common.hpp"
+#include "test_fixture.hpp"
+#include "test_keymap_key.hpp"
+
+// Allow reports with no keys or only KC_LSFT.
+// clang-format off
+#define EXPECT_EMPTY_OR_LSFT(driver) \
+ EXPECT_CALL(driver, send_keyboard_mock(AnyOf( \
+ KeyboardReport(), \
+ KeyboardReport(KC_LSFT))))
+// clang-format on
+
+bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+using ::testing::_;
+using ::testing::AnyNumber;
+using ::testing::AnyOf;
+using ::testing::InSequence;
+
+class CapsWord : public TestFixture {
+ public:
+ void SetUp() override {
+ caps_word_off();
+ }
+};
+
+// Tests that with Auto Shift, letter keys are shifted by Caps Word
+// regardless of whether they are released before AUTO_SHIFT_TIMEOUT.
+TEST_F(CapsWord, AutoShiftKeys) {
+ TestDriver driver;
+ KeymapKey key_a(0, 0, 0, KC_A);
+ KeymapKey key_spc(0, 1, 0, KC_SPC);
+ set_keymap({key_a, key_spc});
+
+ EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
+ { // Expect: "A, A, space, a".
+ InSequence s;
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_SPC));
+ EXPECT_REPORT(driver, (KC_A));
+ }
+
+ // Turn on Caps Word and type "A (quick tap), A (long press), space, A".
+ caps_word_on();
+
+ tap_key(key_a); // Tap A quickly.
+ tap_key(key_a, AUTO_SHIFT_TIMEOUT + 1); // Long press A.
+ tap_key(key_spc);
+ tap_key(key_a);
+
+ VERIFY_AND_CLEAR(driver);
+}
+
+// Test Caps Word + Auto Shift where keys A and B are rolled.
+TEST_F(CapsWord, AutoShiftRolledShiftedKeys) {
+ TestDriver driver;
+ KeymapKey key_a(0, 0, 0, KC_A);
+ KeymapKey key_b(0, 0, 1, KC_B);
+ set_keymap({key_a, key_b});
+
+ EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
+ { // Expect: "A, B, A, B".
+ InSequence s;
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ }
+
+ caps_word_on();
+
+ key_a.press(); // Overlapping taps: A down, B down, A up, B up.
+ run_one_scan_loop();
+ key_b.press();
+ run_one_scan_loop();
+ key_a.release();
+ run_one_scan_loop();
+ key_b.release();
+ run_one_scan_loop();
+
+ key_a.press(); // Nested taps: A down, B down, B up, A up.
+ run_one_scan_loop();
+ key_b.press();
+ run_one_scan_loop();
+ key_b.release();
+ run_one_scan_loop();
+ key_a.release();
+ run_one_scan_loop();
+
+ caps_word_off();
+ VERIFY_AND_CLEAR(driver);
+}
+
+// Tests that with tap-hold keys with Retro Shift, letter keys are shifted by
+// Caps Word regardless of whether they are retroshifted.
+TEST_F(CapsWord, RetroShiftKeys) {
+ TestDriver driver;
+ KeymapKey key_modtap_a(0, 0, 0, LCTL_T(KC_A));
+ KeymapKey key_layertap_b(0, 1, 0, LT(1, KC_B));
+ set_keymap({key_modtap_a, key_layertap_b});
+
+ EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
+ { // Expect: "B, A, B, A".
+ InSequence s;
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_B));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ }
+
+ // Turn on Caps Word and type "B, A (long press), B (long press), A".
+ caps_word_on();
+
+ tap_key(key_layertap_b); // Tap B quickly.
+ tap_key(key_modtap_a, TAPPING_TERM + 1); // Long press A.
+ tap_key(key_layertap_b, TAPPING_TERM + 1); // Long press B.
+ tap_key(key_modtap_a); // Tap A quickly.
+
+ EXPECT_EQ(is_caps_word_on(), true);
+ VERIFY_AND_CLEAR(driver);
+}
diff --git a/tests/caps_word/auto_shift/test.mk b/tests/caps_word/auto_shift/test.mk
new file mode 100644
index 0000000000..7f717d7fc1
--- /dev/null
+++ b/tests/caps_word/auto_shift/test.mk
@@ -0,0 +1,18 @@
+# Copyright 2022 Google LLC
+#
+# 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 .
+
+CAPS_WORD_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
+
diff --git a/tests/caps_word/auto_shift/test_caps_word_autoshift.cpp b/tests/caps_word/auto_shift/test_caps_word_autoshift.cpp
new file mode 100644
index 0000000000..849b993525
--- /dev/null
+++ b/tests/caps_word/auto_shift/test_caps_word_autoshift.cpp
@@ -0,0 +1,66 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#include "keyboard_report_util.hpp"
+#include "keycode.h"
+#include "test_common.hpp"
+#include "test_fixture.hpp"
+#include "test_keymap_key.hpp"
+
+using ::testing::_;
+using ::testing::AnyNumber;
+using ::testing::AnyOf;
+using ::testing::InSequence;
+
+class CapsWord : public TestFixture {
+ public:
+ void SetUp() override {
+ caps_word_off();
+ }
+};
+
+// Tests that with Auto Shift, letter keys are shifted by Caps Word
+// regardless of whether they are released before AUTO_SHIFT_TIMEOUT.
+TEST_F(CapsWord, AutoShiftKeys) {
+ TestDriver driver;
+ KeymapKey key_a(0, 0, 0, KC_A);
+ KeymapKey key_spc(0, 1, 0, KC_SPC);
+ set_keymap({key_a, key_spc});
+
+ // Allow any number of reports with no keys or only KC_LSFT.
+ // clang-format off
+ EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
+ KeyboardReport(),
+ KeyboardReport(KC_LSFT))))
+ .Times(AnyNumber());
+ // clang-format on
+ { // Expect: "A, A, space, a".
+ InSequence s;
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_LSFT, KC_A));
+ EXPECT_REPORT(driver, (KC_SPC));
+ EXPECT_REPORT(driver, (KC_A));
+ }
+
+ // Turn on Caps Word and type "A (quick tap), A (long press), space, A".
+ caps_word_on();
+
+ tap_key(key_a); // Tap A quickly.
+ tap_key(key_a, AUTO_SHIFT_TIMEOUT + 1); // Long press A.
+ tap_key(key_spc);
+ tap_key(key_a);
+
+ testing::Mock::VerifyAndClearExpectations(&driver);
+}
diff --git a/tests/caps_word/caps_word_autoshift/config.h b/tests/caps_word/caps_word_autoshift/config.h
deleted file mode 100644
index b80f53b9dd..0000000000
--- a/tests/caps_word/caps_word_autoshift/config.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2022 Google LLC
-//
-// 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 .
-
-#pragma once
-
-#include "test_common.h"
-
-#define TAPPING_TERM 200
-#define AUTO_SHIFT_TIMEOUT 150
-#define RETRO_SHIFT 500
diff --git a/tests/caps_word/caps_word_autoshift/test.mk b/tests/caps_word/caps_word_autoshift/test.mk
deleted file mode 100644
index 7f717d7fc1..0000000000
--- a/tests/caps_word/caps_word_autoshift/test.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2022 Google LLC
-#
-# 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 .
-
-CAPS_WORD_ENABLE = yes
-AUTO_SHIFT_ENABLE = yes
-
diff --git a/tests/caps_word/caps_word_autoshift/test_caps_word_autoshift.cpp b/tests/caps_word/caps_word_autoshift/test_caps_word_autoshift.cpp
deleted file mode 100644
index 01b1a78a5f..0000000000
--- a/tests/caps_word/caps_word_autoshift/test_caps_word_autoshift.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2022 Google LLC
-//
-// 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 .
-
-#include "keyboard_report_util.hpp"
-#include "keycode.h"
-#include "test_common.hpp"
-#include "test_fixture.hpp"
-#include "test_keymap_key.hpp"
-
-// Allow reports with no keys or only KC_LSFT.
-// clang-format off
-#define EXPECT_EMPTY_OR_LSFT(driver) \
- EXPECT_CALL(driver, send_keyboard_mock(AnyOf( \
- KeyboardReport(), \
- KeyboardReport(KC_LSFT))))
-// clang-format on
-
-using ::testing::_;
-using ::testing::AnyNumber;
-using ::testing::AnyOf;
-using ::testing::InSequence;
-
-class CapsWord : public TestFixture {
- public:
- void SetUp() override {
- caps_word_off();
- }
-};
-
-// Tests that with Auto Shift, letter keys are shifted by Caps Word
-// regardless of whether they are released before AUTO_SHIFT_TIMEOUT.
-TEST_F(CapsWord, AutoShiftKeys) {
- TestDriver driver;
- KeymapKey key_a(0, 0, 0, KC_A);
- KeymapKey key_spc(0, 1, 0, KC_SPC);
- set_keymap({key_a, key_spc});
-
- EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
- { // Expect: "A, A, space, a".
- InSequence s;
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- EXPECT_REPORT(driver, (KC_SPC));
- EXPECT_REPORT(driver, (KC_A));
- }
-
- // Turn on Caps Word and type "A (quick tap), A (long press), space, A".
- caps_word_on();
-
- tap_key(key_a); // Tap A quickly.
- tap_key(key_a, AUTO_SHIFT_TIMEOUT + 1); // Long press A.
- tap_key(key_spc);
- tap_key(key_a);
-
- VERIFY_AND_CLEAR(driver);
-}
-
-// Test Caps Word + Auto Shift where keys A and B are rolled.
-TEST_F(CapsWord, AutoShiftRolledShiftedKeys) {
- TestDriver driver;
- KeymapKey key_a(0, 0, 0, KC_A);
- KeymapKey key_b(0, 0, 1, KC_B);
- set_keymap({key_a, key_b});
-
- EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
- { // Expect: "A, B, A, B".
- InSequence s;
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- EXPECT_REPORT(driver, (KC_LSFT, KC_B));
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- EXPECT_REPORT(driver, (KC_LSFT, KC_B));
- }
-
- caps_word_on();
-
- key_a.press(); // Overlapping taps: A down, B down, A up, B up.
- run_one_scan_loop();
- key_b.press();
- run_one_scan_loop();
- key_a.release();
- run_one_scan_loop();
- key_b.release();
- run_one_scan_loop();
-
- key_a.press(); // Nested taps: A down, B down, B up, A up.
- run_one_scan_loop();
- key_b.press();
- run_one_scan_loop();
- key_b.release();
- run_one_scan_loop();
- key_a.release();
- run_one_scan_loop();
-
- caps_word_off();
- VERIFY_AND_CLEAR(driver);
-}
-
-// Tests that with tap-hold keys with Retro Shift, letter keys are shifted by
-// Caps Word regardless of whether they are retroshifted.
-TEST_F(CapsWord, RetroShiftKeys) {
- TestDriver driver;
- KeymapKey key_modtap_a(0, 0, 0, LCTL_T(KC_A));
- KeymapKey key_layertap_b(0, 1, 0, LT(1, KC_B));
- set_keymap({key_modtap_a, key_layertap_b});
-
- EXPECT_EMPTY_OR_LSFT(driver).Times(AnyNumber());
- { // Expect: "B, A, B, A".
- InSequence s;
- EXPECT_REPORT(driver, (KC_LSFT, KC_B));
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- EXPECT_REPORT(driver, (KC_LSFT, KC_B));
- EXPECT_REPORT(driver, (KC_LSFT, KC_A));
- }
-
- // Turn on Caps Word and type "B, A (long press), B (long press), A".
- caps_word_on();
-
- tap_key(key_layertap_b); // Tap B quickly.
- tap_key(key_modtap_a, TAPPING_TERM + 1); // Long press A.
- tap_key(key_layertap_b, TAPPING_TERM + 1); // Long press B.
- tap_key(key_modtap_a); // Tap A quickly.
-
- EXPECT_EQ(is_caps_word_on(), true);
- VERIFY_AND_CLEAR(driver);
-}
diff --git a/tests/caps_word/caps_word_unicodemap/config.h b/tests/caps_word/caps_word_unicodemap/config.h
deleted file mode 100644
index 0f770337b1..0000000000
--- a/tests/caps_word/caps_word_unicodemap/config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2022 Google LLC
-//
-// 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 .
-
-#pragma once
-
-#include "test_common.h"
-
-#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
diff --git a/tests/caps_word/caps_word_unicodemap/test.mk b/tests/caps_word/caps_word_unicodemap/test.mk
deleted file mode 100644
index 92bcba762c..0000000000
--- a/tests/caps_word/caps_word_unicodemap/test.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2022 Google LLC
-#
-# 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 .
-
-CAPS_WORD_ENABLE = yes
-UNICODEMAP_ENABLE = yes
-
diff --git a/tests/caps_word/caps_word_unicodemap/test_caps_word_unicodemap.cpp b/tests/caps_word/caps_word_unicodemap/test_caps_word_unicodemap.cpp
deleted file mode 100644
index 21e5493526..0000000000
--- a/tests/caps_word/caps_word_unicodemap/test_caps_word_unicodemap.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright 2022 Google LLC
-//
-// 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 .
-
-#include "keyboard_report_util.hpp"
-#include "keycode.h"
-#include "test_common.hpp"
-#include "test_fixture.hpp"
-#include "test_keymap_key.hpp"
-
-using ::testing::_;
-using ::testing::AnyNumber;
-using ::testing::AnyOf;
-using ::testing::InSequence;
-
-extern "C" {
-enum unicode_names {
- ENDASH,
- EMDASH,
- DELTA_LOWERCASE,
- DELTA_UPPERCASE,
-};
-
-const uint32_t unicode_map[] PROGMEM = {
- [ENDASH] = 0x2013,
- [EMDASH] = 0x2014,
- [DELTA_LOWERCASE] = 0x03b4,
- [DELTA_UPPERCASE] = 0x0394,
-};
-
-#define U_DASH UP(ENDASH, EMDASH)
-#define U_DELTA UP(DELTA_LOWERCASE, DELTA_UPPERCASE)
-
-bool caps_word_press_user(uint16_t keycode) {
- switch (keycode) {
- // Keycodes that continue Caps Word, with shift applied.
- case U_DELTA:
- add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
- return true;
-
- // Keycodes that continue Caps Word, without shifting.
- case U_DASH:
- return true;
-
- default:
- return false; // Deactivate Caps Word.
- }
-}
-} // extern "C"
-
-class CapsWord : public TestFixture {
- public:
- void SetUp() override {
- caps_word_off();
- }
-};
-
-// Tests that typing U_DELTA while Caps Word is on sends the uppercase Delta.
-TEST_F(CapsWord, ShiftedUnicodeMapKey) {
- TestDriver driver;
- KeymapKey key_delta(0, 0, 0, U_DELTA);
- KeymapKey key_spc(0, 1, 0, KC_SPC);
- set_keymap({key_delta, key_spc});
-
- // Allow any number of reports with no keys or only KC_LSFT and KC_LCTL.
- // clang-format off
- EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
- KeyboardReport(),
- KeyboardReport(KC_LSFT),
- KeyboardReport(KC_LCTL, KC_LSFT))))
- .Times(AnyNumber());
- // clang-format on
- { // Expect: "Uppercase Delta, space, lowercase delta".
- InSequence s;
- EXPECT_UNICODE(driver, unicode_map[DELTA_UPPERCASE]);
- EXPECT_REPORT(driver, (KC_SPC));
- EXPECT_UNICODE(driver, unicode_map[DELTA_LOWERCASE]);
- }
-
- // Turn on Caps Word and tap "delta, space, delta".
- caps_word_on();
- tap_keys(key_delta, key_spc, key_delta);
-
- EXPECT_EQ(is_caps_word_on(), false);
- VERIFY_AND_CLEAR(driver);
-}
-
-// Tests typing U_ENDASH while Caps Word is on.
-TEST_F(CapsWord, UnshiftedUnicodeMapKey) {
- TestDriver driver;
- KeymapKey key_dash(0, 0, 0, U_DASH);
- set_keymap({key_dash});
-
- // Allow any number of reports with no keys or only KC_LSFT and KC_LCTL.
- // clang-format off
- EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
- KeyboardReport(),
- KeyboardReport(KC_LSFT),
- KeyboardReport(KC_LCTL, KC_LSFT))))
- .Times(AnyNumber());
- // clang-format on
- EXPECT_UNICODE(driver, unicode_map[ENDASH]);
-
- // Turn on Caps Word and tap U_DASH key.
- caps_word_on();
- tap_key(key_dash);
-
- EXPECT_EQ(is_caps_word_on(), true);
- VERIFY_AND_CLEAR(driver);
-}
diff --git a/tests/caps_word/unicodemap/config.h b/tests/caps_word/unicodemap/config.h
new file mode 100644
index 0000000000..0f770337b1
--- /dev/null
+++ b/tests/caps_word/unicodemap/config.h
@@ -0,0 +1,20 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#pragma once
+
+#include "test_common.h"
+
+#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
diff --git a/tests/caps_word/unicodemap/test.mk b/tests/caps_word/unicodemap/test.mk
new file mode 100644
index 0000000000..92bcba762c
--- /dev/null
+++ b/tests/caps_word/unicodemap/test.mk
@@ -0,0 +1,18 @@
+# Copyright 2022 Google LLC
+#
+# 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 .
+
+CAPS_WORD_ENABLE = yes
+UNICODEMAP_ENABLE = yes
+
diff --git a/tests/caps_word/unicodemap/test_caps_word_unicodemap.cpp b/tests/caps_word/unicodemap/test_caps_word_unicodemap.cpp
new file mode 100644
index 0000000000..21e5493526
--- /dev/null
+++ b/tests/caps_word/unicodemap/test_caps_word_unicodemap.cpp
@@ -0,0 +1,121 @@
+// Copyright 2022 Google LLC
+//
+// 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 .
+
+#include "keyboard_report_util.hpp"
+#include "keycode.h"
+#include "test_common.hpp"
+#include "test_fixture.hpp"
+#include "test_keymap_key.hpp"
+
+using ::testing::_;
+using ::testing::AnyNumber;
+using ::testing::AnyOf;
+using ::testing::InSequence;
+
+extern "C" {
+enum unicode_names {
+ ENDASH,
+ EMDASH,
+ DELTA_LOWERCASE,
+ DELTA_UPPERCASE,
+};
+
+const uint32_t unicode_map[] PROGMEM = {
+ [ENDASH] = 0x2013,
+ [EMDASH] = 0x2014,
+ [DELTA_LOWERCASE] = 0x03b4,
+ [DELTA_UPPERCASE] = 0x0394,
+};
+
+#define U_DASH UP(ENDASH, EMDASH)
+#define U_DELTA UP(DELTA_LOWERCASE, DELTA_UPPERCASE)
+
+bool caps_word_press_user(uint16_t keycode) {
+ switch (keycode) {
+ // Keycodes that continue Caps Word, with shift applied.
+ case U_DELTA:
+ add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
+ return true;
+
+ // Keycodes that continue Caps Word, without shifting.
+ case U_DASH:
+ return true;
+
+ default:
+ return false; // Deactivate Caps Word.
+ }
+}
+} // extern "C"
+
+class CapsWord : public TestFixture {
+ public:
+ void SetUp() override {
+ caps_word_off();
+ }
+};
+
+// Tests that typing U_DELTA while Caps Word is on sends the uppercase Delta.
+TEST_F(CapsWord, ShiftedUnicodeMapKey) {
+ TestDriver driver;
+ KeymapKey key_delta(0, 0, 0, U_DELTA);
+ KeymapKey key_spc(0, 1, 0, KC_SPC);
+ set_keymap({key_delta, key_spc});
+
+ // Allow any number of reports with no keys or only KC_LSFT and KC_LCTL.
+ // clang-format off
+ EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
+ KeyboardReport(),
+ KeyboardReport(KC_LSFT),
+ KeyboardReport(KC_LCTL, KC_LSFT))))
+ .Times(AnyNumber());
+ // clang-format on
+ { // Expect: "Uppercase Delta, space, lowercase delta".
+ InSequence s;
+ EXPECT_UNICODE(driver, unicode_map[DELTA_UPPERCASE]);
+ EXPECT_REPORT(driver, (KC_SPC));
+ EXPECT_UNICODE(driver, unicode_map[DELTA_LOWERCASE]);
+ }
+
+ // Turn on Caps Word and tap "delta, space, delta".
+ caps_word_on();
+ tap_keys(key_delta, key_spc, key_delta);
+
+ EXPECT_EQ(is_caps_word_on(), false);
+ VERIFY_AND_CLEAR(driver);
+}
+
+// Tests typing U_ENDASH while Caps Word is on.
+TEST_F(CapsWord, UnshiftedUnicodeMapKey) {
+ TestDriver driver;
+ KeymapKey key_dash(0, 0, 0, U_DASH);
+ set_keymap({key_dash});
+
+ // Allow any number of reports with no keys or only KC_LSFT and KC_LCTL.
+ // clang-format off
+ EXPECT_CALL(driver, send_keyboard_mock(AnyOf(
+ KeyboardReport(),
+ KeyboardReport(KC_LSFT),
+ KeyboardReport(KC_LCTL, KC_LSFT))))
+ .Times(AnyNumber());
+ // clang-format on
+ EXPECT_UNICODE(driver, unicode_map[ENDASH]);
+
+ // Turn on Caps Word and tap U_DASH key.
+ caps_word_on();
+ tap_key(key_dash);
+
+ EXPECT_EQ(is_caps_word_on(), true);
+ VERIFY_AND_CLEAR(driver);
+}
--
cgit v1.2.3