diff options
| author | Ryan <fauxpark@gmail.com> | 2023-08-27 13:30:19 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-27 13:30:19 +1000 |
| commit | 70e34e491c297231a3f987fd69760d38e79dbfa4 (patch) | |
| tree | a3fe26ea27c9d020142f4c248fa0bab5d32c1f9c /tests | |
| parent | 95681b8ff4a92aacd0249e124d34cf16e510175e (diff) | |
Unicode, Unicodemap and UCIS refactor (#21659)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_common/test_driver.cpp | 9 | ||||
| -rw-r--r-- | tests/unicode/config.h | 8 | ||||
| -rw-r--r-- | tests/unicode/test.mk | 5 | ||||
| -rw-r--r-- | tests/unicode/test_unicode.cpp | 86 | ||||
| -rw-r--r-- | tests/unicode/unicode_basic/config.h | 8 | ||||
| -rw-r--r-- | tests/unicode/unicode_basic/test.mk | 5 | ||||
| -rw-r--r-- | tests/unicode/unicode_basic/test_unicode_basic.cpp | 26 | ||||
| -rw-r--r-- | tests/unicode/unicode_map/config.h | 8 | ||||
| -rw-r--r-- | tests/unicode/unicode_map/test.mk | 5 | ||||
| -rw-r--r-- | tests/unicode/unicode_map/test_unicode_map.cpp | 54 | ||||
| -rw-r--r-- | tests/unicode/unicode_ucis/config.h | 8 | ||||
| -rw-r--r-- | tests/unicode/unicode_ucis/test.mk | 5 | ||||
| -rw-r--r-- | tests/unicode/unicode_ucis/test_unicode_ucis.cpp | 221 |
13 files changed, 446 insertions, 2 deletions
diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp index f1c52cb7b6..0495da8205 100644 --- a/tests/test_common/test_driver.cpp +++ b/tests/test_common/test_driver.cpp | |||
| @@ -60,7 +60,10 @@ void TestDriver::send_extra(report_extra_t* report) { | |||
| 60 | namespace internal { | 60 | namespace internal { |
| 61 | void expect_unicode_code_point(TestDriver& driver, uint32_t code_point) { | 61 | void expect_unicode_code_point(TestDriver& driver, uint32_t code_point) { |
| 62 | testing::InSequence seq; | 62 | testing::InSequence seq; |
| 63 | EXPECT_REPORT(driver, (KC_LCTL, KC_LSFT, KC_U)); | 63 | EXPECT_REPORT(driver, (KC_LEFT_CTRL, KC_LEFT_SHIFT)); |
| 64 | EXPECT_REPORT(driver, (KC_LEFT_CTRL, KC_LEFT_SHIFT, KC_U)); | ||
| 65 | EXPECT_REPORT(driver, (KC_LEFT_CTRL, KC_LEFT_SHIFT)); | ||
| 66 | EXPECT_EMPTY_REPORT(driver); | ||
| 64 | 67 | ||
| 65 | bool print_zero = false; | 68 | bool print_zero = false; |
| 66 | for (int i = 7; i >= 0; --i) { | 69 | for (int i = 7; i >= 0; --i) { |
| @@ -71,10 +74,12 @@ void expect_unicode_code_point(TestDriver& driver, uint32_t code_point) { | |||
| 71 | const uint8_t digit = (code_point >> (i * 4)) & 0xf; | 74 | const uint8_t digit = (code_point >> (i * 4)) & 0xf; |
| 72 | if (digit || print_zero) { | 75 | if (digit || print_zero) { |
| 73 | EXPECT_REPORT(driver, (hex_digit_to_keycode(digit))); | 76 | EXPECT_REPORT(driver, (hex_digit_to_keycode(digit))); |
| 77 | EXPECT_EMPTY_REPORT(driver); | ||
| 74 | print_zero = true; | 78 | print_zero = true; |
| 75 | } | 79 | } |
| 76 | } | 80 | } |
| 77 | 81 | ||
| 78 | EXPECT_REPORT(driver, (KC_SPC)); | 82 | EXPECT_REPORT(driver, (KC_SPACE)); |
| 83 | EXPECT_EMPTY_REPORT(driver); | ||
| 79 | } | 84 | } |
| 80 | } // namespace internal | 85 | } // namespace internal |
diff --git a/tests/unicode/config.h b/tests/unicode/config.h new file mode 100644 index 0000000000..16f95f7f8d --- /dev/null +++ b/tests/unicode/config.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "test_common.h" | ||
| 7 | |||
| 8 | #define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX, UNICODE_MODE_MACOS | ||
diff --git a/tests/unicode/test.mk b/tests/unicode/test.mk new file mode 100644 index 0000000000..1afc79be55 --- /dev/null +++ b/tests/unicode/test.mk | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # -------------------------------------------------------------------------------- | ||
| 2 | # Keep this file, even if it is empty, as a marker that this folder contains tests | ||
| 3 | # -------------------------------------------------------------------------------- | ||
| 4 | |||
| 5 | UNICODE_COMMON = yes | ||
diff --git a/tests/unicode/test_unicode.cpp b/tests/unicode/test_unicode.cpp new file mode 100644 index 0000000000..a8500e3ba1 --- /dev/null +++ b/tests/unicode/test_unicode.cpp | |||
| @@ -0,0 +1,86 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "keyboard_report_util.hpp" | ||
| 5 | #include "keycode.h" | ||
| 6 | #include "test_common.hpp" | ||
| 7 | #include "test_keymap_key.hpp" | ||
| 8 | |||
| 9 | using testing::_; | ||
| 10 | |||
| 11 | class Unicode : public TestFixture {}; | ||
| 12 | |||
| 13 | TEST_F(Unicode, sends_bmp_unicode_sequence) { | ||
| 14 | TestDriver driver; | ||
| 15 | |||
| 16 | set_unicode_input_mode(UNICODE_MODE_LINUX); | ||
| 17 | |||
| 18 | EXPECT_UNICODE(driver, 0x03A8); // Ψ | ||
| 19 | register_unicode(0x03A8); | ||
| 20 | |||
| 21 | VERIFY_AND_CLEAR(driver); | ||
| 22 | } | ||
| 23 | |||
| 24 | TEST_F(Unicode, sends_smp_unicode_sequence) { | ||
| 25 | TestDriver driver; | ||
| 26 | |||
| 27 | set_unicode_input_mode(UNICODE_MODE_LINUX); | ||
| 28 | |||
| 29 | EXPECT_UNICODE(driver, 0x1F9D9); // 🧙 | ||
| 30 | register_unicode(0x1F9D9); | ||
| 31 | |||
| 32 | VERIFY_AND_CLEAR(driver); | ||
| 33 | } | ||
| 34 | |||
| 35 | TEST_F(Unicode, sends_surrogate_pair_for_macos) { | ||
| 36 | TestDriver driver; | ||
| 37 | |||
| 38 | set_unicode_input_mode(UNICODE_MODE_MACOS); | ||
| 39 | |||
| 40 | // EXPECT_UNICODE() assumes Linux input mode | ||
| 41 | { | ||
| 42 | testing::InSequence s; | ||
| 43 | |||
| 44 | // Alt+D83EDDD9 🧙 | ||
| 45 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 46 | EXPECT_REPORT(driver, (KC_D, KC_LEFT_ALT)); | ||
| 47 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 48 | EXPECT_REPORT(driver, (KC_8, KC_LEFT_ALT)); | ||
| 49 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 50 | EXPECT_REPORT(driver, (KC_3, KC_LEFT_ALT)); | ||
| 51 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 52 | EXPECT_REPORT(driver, (KC_E, KC_LEFT_ALT)); | ||
| 53 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 54 | EXPECT_REPORT(driver, (KC_D, KC_LEFT_ALT)); | ||
| 55 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 56 | EXPECT_REPORT(driver, (KC_D, KC_LEFT_ALT)); | ||
| 57 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 58 | EXPECT_REPORT(driver, (KC_D, KC_LEFT_ALT)); | ||
| 59 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 60 | EXPECT_REPORT(driver, (KC_9, KC_LEFT_ALT)); | ||
| 61 | EXPECT_REPORT(driver, (KC_LEFT_ALT)); | ||
| 62 | EXPECT_EMPTY_REPORT(driver); | ||
| 63 | } | ||
| 64 | |||
| 65 | register_unicode(0x1F9D9); | ||
| 66 | |||
| 67 | VERIFY_AND_CLEAR(driver); | ||
| 68 | } | ||
| 69 | |||
| 70 | TEST_F(Unicode, sends_unicode_string) { | ||
| 71 | TestDriver driver; | ||
| 72 | |||
| 73 | set_unicode_input_mode(UNICODE_MODE_LINUX); | ||
| 74 | |||
| 75 | { | ||
| 76 | testing::InSequence s; | ||
| 77 | |||
| 78 | EXPECT_UNICODE(driver, 0xFF31); | ||
| 79 | EXPECT_UNICODE(driver, 0xFF2D); | ||
| 80 | EXPECT_UNICODE(driver, 0xFF2B); | ||
| 81 | EXPECT_UNICODE(driver, 0xFF01); | ||
| 82 | } | ||
| 83 | send_unicode_string("QMK!"); | ||
| 84 | |||
| 85 | VERIFY_AND_CLEAR(driver); | ||
| 86 | } | ||
diff --git a/tests/unicode/unicode_basic/config.h b/tests/unicode/unicode_basic/config.h new file mode 100644 index 0000000000..16f95f7f8d --- /dev/null +++ b/tests/unicode/unicode_basic/config.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "test_common.h" | ||
| 7 | |||
| 8 | #define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX, UNICODE_MODE_MACOS | ||
diff --git a/tests/unicode/unicode_basic/test.mk b/tests/unicode/unicode_basic/test.mk new file mode 100644 index 0000000000..f53051dce6 --- /dev/null +++ b/tests/unicode/unicode_basic/test.mk | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # -------------------------------------------------------------------------------- | ||
| 2 | # Keep this file, even if it is empty, as a marker that this folder contains tests | ||
| 3 | # -------------------------------------------------------------------------------- | ||
| 4 | |||
| 5 | UNICODE_ENABLE = yes | ||
diff --git a/tests/unicode/unicode_basic/test_unicode_basic.cpp b/tests/unicode/unicode_basic/test_unicode_basic.cpp new file mode 100644 index 0000000000..598b57277f --- /dev/null +++ b/tests/unicode/unicode_basic/test_unicode_basic.cpp | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "keyboard_report_util.hpp" | ||
| 5 | #include "keycode.h" | ||
| 6 | #include "test_common.hpp" | ||
| 7 | #include "test_keymap_key.hpp" | ||
| 8 | |||
| 9 | using testing::_; | ||
| 10 | |||
| 11 | class UnicodeBasic : public TestFixture {}; | ||
| 12 | |||
| 13 | TEST_F(UnicodeBasic, sends_unicode_sequence) { | ||
| 14 | TestDriver driver; | ||
| 15 | |||
| 16 | set_unicode_input_mode(UNICODE_MODE_LINUX); | ||
| 17 | |||
| 18 | auto key_uc = KeymapKey(0, 0, 0, UC(0x03A8)); // Ψ | ||
| 19 | |||
| 20 | set_keymap({key_uc}); | ||
| 21 | |||
| 22 | EXPECT_UNICODE(driver, 0x03A8); | ||
| 23 | tap_key(key_uc); | ||
| 24 | |||
| 25 | VERIFY_AND_CLEAR(driver); | ||
| 26 | } | ||
diff --git a/tests/unicode/unicode_map/config.h b/tests/unicode/unicode_map/config.h new file mode 100644 index 0000000000..0d86922f0d --- /dev/null +++ b/tests/unicode/unicode_map/config.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "test_common.h" | ||
| 7 | |||
| 8 | #define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX | ||
diff --git a/tests/unicode/unicode_map/test.mk b/tests/unicode/unicode_map/test.mk new file mode 100644 index 0000000000..e6d0034799 --- /dev/null +++ b/tests/unicode/unicode_map/test.mk | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # -------------------------------------------------------------------------------- | ||
| 2 | # Keep this file, even if it is empty, as a marker that this folder contains tests | ||
| 3 | # -------------------------------------------------------------------------------- | ||
| 4 | |||
| 5 | UNICODEMAP_ENABLE = yes | ||
diff --git a/tests/unicode/unicode_map/test_unicode_map.cpp b/tests/unicode/unicode_map/test_unicode_map.cpp new file mode 100644 index 0000000000..cacd8f3c75 --- /dev/null +++ b/tests/unicode/unicode_map/test_unicode_map.cpp | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "keyboard_report_util.hpp" | ||
| 5 | #include "keycode.h" | ||
| 6 | #include "test_common.hpp" | ||
| 7 | #include "test_keymap_key.hpp" | ||
| 8 | |||
| 9 | using testing::_; | ||
| 10 | |||
| 11 | const uint32_t PROGMEM unicode_map[] = { | ||
| 12 | 0x03A8, // Ψ | ||
| 13 | 0x2318 // ⌘ | ||
| 14 | }; | ||
| 15 | |||
| 16 | class UnicodeMap : public TestFixture {}; | ||
| 17 | |||
| 18 | TEST_F(UnicodeMap, sends_unicodemap_code_point_from_keycode) { | ||
| 19 | TestDriver driver; | ||
| 20 | |||
| 21 | auto key_um = KeymapKey(0, 0, 0, UM(0)); | ||
| 22 | |||
| 23 | set_keymap({key_um}); | ||
| 24 | |||
| 25 | EXPECT_UNICODE(driver, 0x03A8); | ||
| 26 | tap_key(key_um); | ||
| 27 | |||
| 28 | VERIFY_AND_CLEAR(driver); | ||
| 29 | } | ||
| 30 | |||
| 31 | TEST_F(UnicodeMap, sends_unicodemap_pair_from_keycode) { | ||
| 32 | TestDriver driver; | ||
| 33 | |||
| 34 | auto key_shift = KeymapKey(0, 0, 0, KC_LEFT_SHIFT); | ||
| 35 | auto key_up = KeymapKey(0, 1, 0, UP(0, 1)); | ||
| 36 | |||
| 37 | set_keymap({key_shift, key_up}); | ||
| 38 | |||
| 39 | EXPECT_UNICODE(driver, 0x03A8); | ||
| 40 | tap_key(key_up); | ||
| 41 | |||
| 42 | EXPECT_REPORT(driver, (KC_LEFT_SHIFT)); | ||
| 43 | key_shift.press(); | ||
| 44 | run_one_scan_loop(); | ||
| 45 | |||
| 46 | EXPECT_UNICODE(driver, 0x2318); | ||
| 47 | tap_key(key_up); | ||
| 48 | |||
| 49 | EXPECT_NO_REPORT(driver); | ||
| 50 | key_shift.release(); | ||
| 51 | run_one_scan_loop(); | ||
| 52 | |||
| 53 | VERIFY_AND_CLEAR(driver); | ||
| 54 | } | ||
diff --git a/tests/unicode/unicode_ucis/config.h b/tests/unicode/unicode_ucis/config.h new file mode 100644 index 0000000000..0d86922f0d --- /dev/null +++ b/tests/unicode/unicode_ucis/config.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | #include "test_common.h" | ||
| 7 | |||
| 8 | #define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX | ||
diff --git a/tests/unicode/unicode_ucis/test.mk b/tests/unicode/unicode_ucis/test.mk new file mode 100644 index 0000000000..d7ac651758 --- /dev/null +++ b/tests/unicode/unicode_ucis/test.mk | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | # -------------------------------------------------------------------------------- | ||
| 2 | # Keep this file, even if it is empty, as a marker that this folder contains tests | ||
| 3 | # -------------------------------------------------------------------------------- | ||
| 4 | |||
| 5 | UCIS_ENABLE = yes | ||
diff --git a/tests/unicode/unicode_ucis/test_unicode_ucis.cpp b/tests/unicode/unicode_ucis/test_unicode_ucis.cpp new file mode 100644 index 0000000000..acc6329f85 --- /dev/null +++ b/tests/unicode/unicode_ucis/test_unicode_ucis.cpp | |||
| @@ -0,0 +1,221 @@ | |||
| 1 | // Copyright 2023 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include "keyboard_report_util.hpp" | ||
| 5 | #include "keycode.h" | ||
| 6 | #include "test_common.hpp" | ||
| 7 | #include "test_keymap_key.hpp" | ||
| 8 | |||
| 9 | using testing::_; | ||
| 10 | |||
| 11 | // clang-format off | ||
| 12 | const ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE( | ||
| 13 | UCIS_SYM("qmk", 0x03A8) // Ψ | ||
| 14 | ); | ||
| 15 | // clang-format on | ||
| 16 | |||
| 17 | class UnicodeUCIS : public TestFixture {}; | ||
| 18 | |||
| 19 | TEST_F(UnicodeUCIS, matches_sequence) { | ||
| 20 | TestDriver driver; | ||
| 21 | |||
| 22 | auto key_q = KeymapKey(0, 0, 0, KC_Q); | ||
| 23 | auto key_m = KeymapKey(0, 1, 0, KC_M); | ||
| 24 | auto key_k = KeymapKey(0, 2, 0, KC_K); | ||
| 25 | auto key_enter = KeymapKey(0, 3, 0, KC_ENTER); | ||
| 26 | |||
| 27 | set_keymap({key_q, key_m, key_k, key_enter}); | ||
| 28 | |||
| 29 | EXPECT_UNICODE(driver, 0x2328); // ⌨ | ||
| 30 | ucis_start(); | ||
| 31 | |||
| 32 | EXPECT_EQ(ucis_active(), true); | ||
| 33 | EXPECT_EQ(ucis_count(), 0); | ||
| 34 | |||
| 35 | EXPECT_REPORT(driver, (KC_Q)); | ||
| 36 | EXPECT_EMPTY_REPORT(driver); | ||
| 37 | tap_key(key_q); | ||
| 38 | EXPECT_EQ(ucis_count(), 1); | ||
| 39 | |||
| 40 | EXPECT_REPORT(driver, (KC_M)); | ||
| 41 | EXPECT_EMPTY_REPORT(driver); | ||
| 42 | tap_key(key_m); | ||
| 43 | EXPECT_EQ(ucis_count(), 2); | ||
| 44 | |||
| 45 | EXPECT_REPORT(driver, (KC_K)); | ||
| 46 | EXPECT_EMPTY_REPORT(driver); | ||
| 47 | tap_key(key_k); | ||
| 48 | EXPECT_EQ(ucis_count(), 3); | ||
| 49 | |||
| 50 | EXPECT_REPORT(driver, (KC_BACKSPACE)).Times(4); | ||
| 51 | EXPECT_EMPTY_REPORT(driver).Times(4); | ||
| 52 | EXPECT_UNICODE(driver, 0x03A8); | ||
| 53 | tap_key(key_enter); | ||
| 54 | |||
| 55 | EXPECT_EQ(ucis_active(), false); | ||
| 56 | |||
| 57 | VERIFY_AND_CLEAR(driver); | ||
| 58 | } | ||
| 59 | |||
| 60 | TEST_F(UnicodeUCIS, cancels_sequence) { | ||
| 61 | TestDriver driver; | ||
| 62 | |||
| 63 | auto key_q = KeymapKey(0, 0, 0, KC_Q); | ||
| 64 | auto key_m = KeymapKey(0, 1, 0, KC_M); | ||
| 65 | auto key_k = KeymapKey(0, 2, 0, KC_K); | ||
| 66 | auto key_escape = KeymapKey(0, 3, 0, KC_ESCAPE); | ||
| 67 | |||
| 68 | set_keymap({key_q, key_m, key_k, key_escape}); | ||
| 69 | |||
| 70 | EXPECT_UNICODE(driver, 0x2328); // ⌨ | ||
| 71 | ucis_start(); | ||
| 72 | |||
| 73 | EXPECT_EQ(ucis_active(), true); | ||
| 74 | EXPECT_EQ(ucis_count(), 0); | ||
| 75 | |||
| 76 | EXPECT_REPORT(driver, (KC_Q)); | ||
| 77 | EXPECT_EMPTY_REPORT(driver); | ||
| 78 | tap_key(key_q); | ||
| 79 | EXPECT_EQ(ucis_count(), 1); | ||
| 80 | |||
| 81 | EXPECT_REPORT(driver, (KC_M)); | ||
| 82 | EXPECT_EMPTY_REPORT(driver); | ||
| 83 | tap_key(key_m); | ||
| 84 | EXPECT_EQ(ucis_count(), 2); | ||
| 85 | |||
| 86 | EXPECT_REPORT(driver, (KC_K)); | ||
| 87 | EXPECT_EMPTY_REPORT(driver); | ||
| 88 | tap_key(key_k); | ||
| 89 | EXPECT_EQ(ucis_count(), 3); | ||
| 90 | |||
| 91 | EXPECT_NO_REPORT(driver); | ||
| 92 | tap_key(key_escape); | ||
| 93 | |||
| 94 | EXPECT_EQ(ucis_active(), false); | ||
| 95 | |||
| 96 | VERIFY_AND_CLEAR(driver); | ||
| 97 | } | ||
| 98 | |||
| 99 | TEST_F(UnicodeUCIS, matches_sequence_with_corrected_typo) { | ||
| 100 | TestDriver driver; | ||
| 101 | |||
| 102 | auto key_q = KeymapKey(0, 0, 0, KC_Q); | ||
| 103 | auto key_m = KeymapKey(0, 1, 0, KC_M); | ||
| 104 | auto key_j = KeymapKey(0, 2, 0, KC_J); | ||
| 105 | auto key_k = KeymapKey(0, 3, 0, KC_K); | ||
| 106 | auto key_backspace = KeymapKey(0, 4, 0, KC_BACKSPACE); | ||
| 107 | auto key_enter = KeymapKey(0, 5, 0, KC_ENTER); | ||
| 108 | |||
| 109 | set_keymap({key_q, key_m, key_j, key_k, key_backspace, key_enter}); | ||
| 110 | |||
| 111 | EXPECT_UNICODE(driver, 0x2328); // ⌨ | ||
| 112 | ucis_start(); | ||
| 113 | |||
| 114 | EXPECT_EQ(ucis_active(), true); | ||
| 115 | EXPECT_EQ(ucis_count(), 0); | ||
| 116 | |||
| 117 | EXPECT_REPORT(driver, (KC_Q)); | ||
| 118 | EXPECT_EMPTY_REPORT(driver); | ||
| 119 | tap_key(key_q); | ||
| 120 | EXPECT_EQ(ucis_count(), 1); | ||
| 121 | |||
| 122 | EXPECT_REPORT(driver, (KC_M)); | ||
| 123 | EXPECT_EMPTY_REPORT(driver); | ||
| 124 | tap_key(key_m); | ||
| 125 | EXPECT_EQ(ucis_count(), 2); | ||
| 126 | |||
| 127 | EXPECT_REPORT(driver, (KC_J)); | ||
| 128 | EXPECT_EMPTY_REPORT(driver); | ||
| 129 | tap_key(key_j); | ||
| 130 | EXPECT_EQ(ucis_count(), 3); | ||
| 131 | |||
| 132 | EXPECT_REPORT(driver, (KC_BACKSPACE)); | ||
| 133 | EXPECT_EMPTY_REPORT(driver); | ||
| 134 | tap_key(key_backspace); | ||
| 135 | EXPECT_EQ(ucis_count(), 2); | ||
| 136 | |||
| 137 | EXPECT_REPORT(driver, (KC_K)); | ||
| 138 | EXPECT_EMPTY_REPORT(driver); | ||
| 139 | tap_key(key_k); | ||
| 140 | EXPECT_EQ(ucis_count(), 3); | ||
| 141 | |||
| 142 | EXPECT_REPORT(driver, (KC_BACKSPACE)).Times(4); | ||
| 143 | EXPECT_EMPTY_REPORT(driver).Times(4); | ||
| 144 | EXPECT_UNICODE(driver, 0x03A8); | ||
| 145 | tap_key(key_enter); | ||
| 146 | |||
| 147 | EXPECT_EQ(ucis_active(), false); | ||
| 148 | |||
| 149 | VERIFY_AND_CLEAR(driver); | ||
| 150 | } | ||
| 151 | |||
| 152 | TEST_F(UnicodeUCIS, does_not_match_longer_sequence) { | ||
| 153 | TestDriver driver; | ||
| 154 | |||
| 155 | auto key_q = KeymapKey(0, 0, 0, KC_Q); | ||
| 156 | auto key_m = KeymapKey(0, 1, 0, KC_M); | ||
| 157 | auto key_k = KeymapKey(0, 2, 0, KC_K); | ||
| 158 | auto key_enter = KeymapKey(0, 3, 0, KC_ENTER); | ||
| 159 | |||
| 160 | set_keymap({key_q, key_m, key_k, key_enter}); | ||
| 161 | |||
| 162 | EXPECT_UNICODE(driver, 0x2328); // ⌨ | ||
| 163 | ucis_start(); | ||
| 164 | |||
| 165 | EXPECT_EQ(ucis_active(), true); | ||
| 166 | EXPECT_EQ(ucis_count(), 0); | ||
| 167 | |||
| 168 | EXPECT_REPORT(driver, (KC_Q)); | ||
| 169 | EXPECT_EMPTY_REPORT(driver); | ||
| 170 | tap_key(key_q); | ||
| 171 | EXPECT_EQ(ucis_count(), 1); | ||
| 172 | |||
| 173 | EXPECT_REPORT(driver, (KC_M)); | ||
| 174 | EXPECT_EMPTY_REPORT(driver); | ||
| 175 | tap_key(key_m); | ||
| 176 | EXPECT_EQ(ucis_count(), 2); | ||
| 177 | |||
| 178 | EXPECT_REPORT(driver, (KC_K)); | ||
| 179 | EXPECT_EMPTY_REPORT(driver); | ||
| 180 | tap_key(key_k); | ||
| 181 | EXPECT_EQ(ucis_count(), 3); | ||
| 182 | |||
| 183 | EXPECT_REPORT(driver, (KC_K)); | ||
| 184 | EXPECT_EMPTY_REPORT(driver); | ||
| 185 | tap_key(key_k); | ||
| 186 | EXPECT_EQ(ucis_count(), 4); | ||
| 187 | |||
| 188 | EXPECT_NO_REPORT(driver); | ||
| 189 | tap_key(key_enter); | ||
| 190 | |||
| 191 | EXPECT_EQ(ucis_active(), false); | ||
| 192 | |||
| 193 | VERIFY_AND_CLEAR(driver); | ||
| 194 | } | ||
| 195 | |||
| 196 | TEST_F(UnicodeUCIS, does_not_match_shorter_sequence) { | ||
| 197 | TestDriver driver; | ||
| 198 | |||
| 199 | auto key_q = KeymapKey(0, 0, 0, KC_Q); | ||
| 200 | auto key_enter = KeymapKey(0, 1, 0, KC_ENTER); | ||
| 201 | |||
| 202 | set_keymap({key_q, key_enter}); | ||
| 203 | |||
| 204 | EXPECT_UNICODE(driver, 0x2328); // ⌨ | ||
| 205 | ucis_start(); | ||
| 206 | |||
| 207 | EXPECT_EQ(ucis_active(), true); | ||
| 208 | EXPECT_EQ(ucis_count(), 0); | ||
| 209 | |||
| 210 | EXPECT_REPORT(driver, (KC_Q)); | ||
| 211 | EXPECT_EMPTY_REPORT(driver); | ||
| 212 | tap_key(key_q); | ||
| 213 | EXPECT_EQ(ucis_count(), 1); | ||
| 214 | |||
| 215 | EXPECT_NO_REPORT(driver); | ||
| 216 | tap_key(key_enter); | ||
| 217 | |||
| 218 | EXPECT_EQ(ucis_active(), false); | ||
| 219 | |||
| 220 | VERIFY_AND_CLEAR(driver); | ||
| 221 | } | ||
