diff options
Diffstat (limited to 'tests/secure/test_secure.cpp')
| -rw-r--r-- | tests/secure/test_secure.cpp | 81 |
1 files changed, 32 insertions, 49 deletions
diff --git a/tests/secure/test_secure.cpp b/tests/secure/test_secure.cpp index b7c51b0bd2..6ca98d78f3 100644 --- a/tests/secure/test_secure.cpp +++ b/tests/secure/test_secure.cpp | |||
| @@ -27,28 +27,13 @@ class Secure : public TestFixture { | |||
| 27 | void SetUp() override { | 27 | void SetUp() override { |
| 28 | secure_lock(); | 28 | secure_lock(); |
| 29 | } | 29 | } |
| 30 | // Convenience function to tap `key`. | ||
| 31 | void TapKey(KeymapKey key) { | ||
| 32 | key.press(); | ||
| 33 | run_one_scan_loop(); | ||
| 34 | key.release(); | ||
| 35 | run_one_scan_loop(); | ||
| 36 | } | ||
| 37 | |||
| 38 | // Taps in order each key in `keys`. | ||
| 39 | template <typename... Ts> | ||
| 40 | void TapKeys(Ts... keys) { | ||
| 41 | for (KeymapKey key : {keys...}) { | ||
| 42 | TapKey(key); | ||
| 43 | } | ||
| 44 | } | ||
| 45 | }; | 30 | }; |
| 46 | 31 | ||
| 47 | TEST_F(Secure, test_lock) { | 32 | TEST_F(Secure, test_lock) { |
| 48 | TestDriver driver; | 33 | TestDriver driver; |
| 49 | 34 | ||
| 50 | // Allow any number of empty reports. | 35 | // Don't allow empty reports. |
| 51 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | 36 | EXPECT_NO_REPORT(driver); |
| 52 | 37 | ||
| 53 | EXPECT_FALSE(secure_is_unlocked()); | 38 | EXPECT_FALSE(secure_is_unlocked()); |
| 54 | secure_unlock(); | 39 | secure_unlock(); |
| @@ -64,8 +49,8 @@ TEST_F(Secure, test_lock) { | |||
| 64 | TEST_F(Secure, test_unlock_timeout) { | 49 | TEST_F(Secure, test_unlock_timeout) { |
| 65 | TestDriver driver; | 50 | TestDriver driver; |
| 66 | 51 | ||
| 67 | // Allow any number of empty reports. | 52 | // Don't allow empty reports. |
| 68 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | 53 | EXPECT_NO_REPORT(driver); |
| 69 | 54 | ||
| 70 | EXPECT_FALSE(secure_is_unlocked()); | 55 | EXPECT_FALSE(secure_is_unlocked()); |
| 71 | secure_unlock(); | 56 | secure_unlock(); |
| @@ -86,13 +71,13 @@ TEST_F(Secure, test_unlock_request) { | |||
| 86 | 71 | ||
| 87 | set_keymap({key_mo, key_a, key_b, key_c, key_d}); | 72 | set_keymap({key_mo, key_a, key_b, key_c, key_d}); |
| 88 | 73 | ||
| 89 | // Allow any number of empty reports. | 74 | // Don't allow empty reports. |
| 90 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | 75 | EXPECT_NO_REPORT(driver); |
| 91 | 76 | ||
| 92 | EXPECT_TRUE(secure_is_locked()); | 77 | EXPECT_TRUE(secure_is_locked()); |
| 93 | secure_request_unlock(); | 78 | secure_request_unlock(); |
| 94 | EXPECT_TRUE(secure_is_unlocking()); | 79 | EXPECT_TRUE(secure_is_unlocking()); |
| 95 | TapKeys(key_a, key_b, key_c, key_d); | 80 | tap_keys(key_a, key_b, key_c, key_d); |
| 96 | EXPECT_TRUE(secure_is_unlocked()); | 81 | EXPECT_TRUE(secure_is_unlocked()); |
| 97 | 82 | ||
| 98 | testing::Mock::VerifyAndClearExpectations(&driver); | 83 | testing::Mock::VerifyAndClearExpectations(&driver); |
| @@ -109,18 +94,18 @@ TEST_F(Secure, test_unlock_request_fail) { | |||
| 109 | set_keymap({key_e, key_a, key_b, key_c, key_d}); | 94 | set_keymap({key_e, key_a, key_b, key_c, key_d}); |
| 110 | 95 | ||
| 111 | // Allow any number of empty reports. | 96 | // Allow any number of empty reports. |
| 112 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(AnyNumber()); | 97 | EXPECT_EMPTY_REPORT(driver).Times(AnyNumber()); |
| 113 | { // Expect the following reports in this order. | 98 | { // Expect the following reports in this order. |
| 114 | InSequence s; | 99 | InSequence s; |
| 115 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_A))); | 100 | EXPECT_REPORT(driver, (KC_A)); |
| 116 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))); | 101 | EXPECT_REPORT(driver, (KC_B)); |
| 117 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_C))); | 102 | EXPECT_REPORT(driver, (KC_C)); |
| 118 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_D))); | 103 | EXPECT_REPORT(driver, (KC_D)); |
| 119 | } | 104 | } |
| 120 | EXPECT_TRUE(secure_is_locked()); | 105 | EXPECT_TRUE(secure_is_locked()); |
| 121 | secure_request_unlock(); | 106 | secure_request_unlock(); |
| 122 | EXPECT_TRUE(secure_is_unlocking()); | 107 | EXPECT_TRUE(secure_is_unlocking()); |
| 123 | TapKeys(key_e, key_a, key_b, key_c, key_d); | 108 | tap_keys(key_e, key_a, key_b, key_c, key_d); |
| 124 | EXPECT_FALSE(secure_is_unlocked()); | 109 | EXPECT_FALSE(secure_is_unlocked()); |
| 125 | 110 | ||
| 126 | testing::Mock::VerifyAndClearExpectations(&driver); | 111 | testing::Mock::VerifyAndClearExpectations(&driver); |
| @@ -129,8 +114,8 @@ TEST_F(Secure, test_unlock_request_fail) { | |||
| 129 | TEST_F(Secure, test_unlock_request_timeout) { | 114 | TEST_F(Secure, test_unlock_request_timeout) { |
| 130 | TestDriver driver; | 115 | TestDriver driver; |
| 131 | 116 | ||
| 132 | // Allow any number of empty reports. | 117 | // Don't allow empty reports. |
| 133 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | 118 | EXPECT_NO_REPORT(driver); |
| 134 | 119 | ||
| 135 | EXPECT_FALSE(secure_is_unlocked()); | 120 | EXPECT_FALSE(secure_is_unlocked()); |
| 136 | secure_request_unlock(); | 121 | secure_request_unlock(); |
| @@ -153,16 +138,16 @@ TEST_F(Secure, test_unlock_request_fail_mid) { | |||
| 153 | set_keymap({key_e, key_a, key_b, key_c, key_d}); | 138 | set_keymap({key_e, key_a, key_b, key_c, key_d}); |
| 154 | 139 | ||
| 155 | // Allow any number of empty reports. | 140 | // Allow any number of empty reports. |
| 156 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(AnyNumber()); | 141 | EXPECT_EMPTY_REPORT(driver).Times(AnyNumber()); |
| 157 | { // Expect the following reports in this order. | 142 | { // Expect the following reports in this order. |
| 158 | InSequence s; | 143 | InSequence s; |
| 159 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_C))); | 144 | EXPECT_REPORT(driver, (KC_C)); |
| 160 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_D))); | 145 | EXPECT_REPORT(driver, (KC_D)); |
| 161 | } | 146 | } |
| 162 | EXPECT_FALSE(secure_is_unlocked()); | 147 | EXPECT_FALSE(secure_is_unlocked()); |
| 163 | secure_request_unlock(); | 148 | secure_request_unlock(); |
| 164 | EXPECT_TRUE(secure_is_unlocking()); | 149 | EXPECT_TRUE(secure_is_unlocking()); |
| 165 | TapKeys(key_a, key_b, key_e, key_c, key_d); | 150 | tap_keys(key_a, key_b, key_e, key_c, key_d); |
| 166 | EXPECT_FALSE(secure_is_unlocking()); | 151 | EXPECT_FALSE(secure_is_unlocking()); |
| 167 | EXPECT_FALSE(secure_is_unlocked()); | 152 | EXPECT_FALSE(secure_is_unlocked()); |
| 168 | 153 | ||
| @@ -180,16 +165,16 @@ TEST_F(Secure, test_unlock_request_fail_out_of_order) { | |||
| 180 | set_keymap({key_e, key_a, key_b, key_c, key_d}); | 165 | set_keymap({key_e, key_a, key_b, key_c, key_d}); |
| 181 | 166 | ||
| 182 | // Allow any number of empty reports. | 167 | // Allow any number of empty reports. |
| 183 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(AnyNumber()); | 168 | EXPECT_EMPTY_REPORT(driver).Times(AnyNumber()); |
| 184 | { // Expect the following reports in this order. | 169 | { // Expect the following reports in this order. |
| 185 | InSequence s; | 170 | InSequence s; |
| 186 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_B))); | 171 | EXPECT_REPORT(driver, (KC_B)); |
| 187 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_C))); | 172 | EXPECT_REPORT(driver, (KC_C)); |
| 188 | } | 173 | } |
| 189 | EXPECT_FALSE(secure_is_unlocked()); | 174 | EXPECT_FALSE(secure_is_unlocked()); |
| 190 | secure_request_unlock(); | 175 | secure_request_unlock(); |
| 191 | EXPECT_TRUE(secure_is_unlocking()); | 176 | EXPECT_TRUE(secure_is_unlocking()); |
| 192 | TapKeys(key_a, key_d, key_b, key_c); | 177 | tap_keys(key_a, key_d, key_b, key_c); |
| 193 | EXPECT_TRUE(secure_is_locked()); | 178 | EXPECT_TRUE(secure_is_locked()); |
| 194 | EXPECT_FALSE(secure_is_unlocking()); | 179 | EXPECT_FALSE(secure_is_unlocking()); |
| 195 | EXPECT_FALSE(secure_is_unlocked()); | 180 | EXPECT_FALSE(secure_is_unlocked()); |
| @@ -207,8 +192,8 @@ TEST_F(Secure, test_unlock_request_on_layer) { | |||
| 207 | 192 | ||
| 208 | set_keymap({key_mo, key_a, key_b, key_c, key_d}); | 193 | set_keymap({key_mo, key_a, key_b, key_c, key_d}); |
| 209 | 194 | ||
| 210 | // Allow any number of empty reports. | 195 | // Don't allow empty reports. |
| 211 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())).Times(0); | 196 | EXPECT_NO_REPORT(driver); |
| 212 | 197 | ||
| 213 | EXPECT_TRUE(secure_is_locked()); | 198 | EXPECT_TRUE(secure_is_locked()); |
| 214 | key_mo.press(); | 199 | key_mo.press(); |
| @@ -217,7 +202,7 @@ TEST_F(Secure, test_unlock_request_on_layer) { | |||
| 217 | key_mo.release(); | 202 | key_mo.release(); |
| 218 | run_one_scan_loop(); | 203 | run_one_scan_loop(); |
| 219 | EXPECT_TRUE(secure_is_unlocking()); | 204 | EXPECT_TRUE(secure_is_unlocking()); |
| 220 | TapKeys(key_a, key_b, key_c, key_d); | 205 | tap_keys(key_a, key_b, key_c, key_d); |
| 221 | EXPECT_TRUE(secure_is_unlocked()); | 206 | EXPECT_TRUE(secure_is_unlocked()); |
| 222 | EXPECT_FALSE(layer_state_is(1)); | 207 | EXPECT_FALSE(layer_state_is(1)); |
| 223 | 208 | ||
| @@ -234,9 +219,8 @@ TEST_F(Secure, test_unlock_request_mid_stroke) { | |||
| 234 | 219 | ||
| 235 | set_keymap({key_e, key_a, key_b, key_c, key_d}); | 220 | set_keymap({key_e, key_a, key_b, key_c, key_d}); |
| 236 | 221 | ||
| 237 | // Allow any number of empty reports. | 222 | EXPECT_REPORT(driver, (KC_E)); |
| 238 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(KC_E))); | 223 | EXPECT_EMPTY_REPORT(driver); |
| 239 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 240 | EXPECT_TRUE(secure_is_locked()); | 224 | EXPECT_TRUE(secure_is_locked()); |
| 241 | key_e.press(); | 225 | key_e.press(); |
| 242 | run_one_scan_loop(); | 226 | run_one_scan_loop(); |
| @@ -244,7 +228,7 @@ TEST_F(Secure, test_unlock_request_mid_stroke) { | |||
| 244 | key_e.release(); | 228 | key_e.release(); |
| 245 | run_one_scan_loop(); | 229 | run_one_scan_loop(); |
| 246 | EXPECT_TRUE(secure_is_unlocking()); | 230 | EXPECT_TRUE(secure_is_unlocking()); |
| 247 | TapKeys(key_a, key_b, key_c, key_d); | 231 | tap_keys(key_a, key_b, key_c, key_d); |
| 248 | EXPECT_TRUE(secure_is_unlocked()); | 232 | EXPECT_TRUE(secure_is_unlocked()); |
| 249 | 233 | ||
| 250 | testing::Mock::VerifyAndClearExpectations(&driver); | 234 | testing::Mock::VerifyAndClearExpectations(&driver); |
| @@ -260,9 +244,8 @@ TEST_F(Secure, test_unlock_request_mods) { | |||
| 260 | 244 | ||
| 261 | set_keymap({key_lsft, key_a, key_b, key_c, key_d}); | 245 | set_keymap({key_lsft, key_a, key_b, key_c, key_d}); |
| 262 | 246 | ||
| 263 | // Allow any number of empty reports. | 247 | EXPECT_REPORT(driver, (key_lsft.report_code)); |
| 264 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport(key_lsft.report_code))); | 248 | EXPECT_EMPTY_REPORT(driver); |
| 265 | EXPECT_CALL(driver, send_keyboard_mock(KeyboardReport())); | ||
| 266 | EXPECT_TRUE(secure_is_locked()); | 249 | EXPECT_TRUE(secure_is_locked()); |
| 267 | key_lsft.press(); | 250 | key_lsft.press(); |
| 268 | run_one_scan_loop(); | 251 | run_one_scan_loop(); |
| @@ -270,7 +253,7 @@ TEST_F(Secure, test_unlock_request_mods) { | |||
| 270 | key_lsft.release(); | 253 | key_lsft.release(); |
| 271 | run_one_scan_loop(); | 254 | run_one_scan_loop(); |
| 272 | EXPECT_TRUE(secure_is_unlocking()); | 255 | EXPECT_TRUE(secure_is_unlocking()); |
| 273 | TapKeys(key_a, key_b, key_c, key_d); | 256 | tap_keys(key_a, key_b, key_c, key_d); |
| 274 | EXPECT_TRUE(secure_is_unlocked()); | 257 | EXPECT_TRUE(secure_is_unlocked()); |
| 275 | 258 | ||
| 276 | testing::Mock::VerifyAndClearExpectations(&driver); | 259 | testing::Mock::VerifyAndClearExpectations(&driver); |
