keyboard stuff
at master 221 lines 5.5 kB view raw
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 9using testing::_; 10 11// clang-format off 12const ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE( 13 UCIS_SYM("qmk", 0x03A8) // Ψ 14); 15// clang-format on 16 17class UnicodeUCIS : public TestFixture {}; 18 19TEST_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 60TEST_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 99TEST_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 152TEST_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 196TEST_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}