at master 224 lines 5.4 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 11class Leader : public TestFixture {}; 12 13TEST_F(Leader, triggers_one_key_sequence) { 14 TestDriver driver; 15 16 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 17 auto key_a = KeymapKey(0, 1, 0, KC_A); 18 19 set_keymap({key_leader, key_a}); 20 21 EXPECT_EQ(leader_sequence_active(), false); 22 23 EXPECT_NO_REPORT(driver); 24 tap_key(key_leader); 25 26 EXPECT_EQ(leader_sequence_active(), true); 27 28 EXPECT_REPORT(driver, (KC_1)); 29 EXPECT_EMPTY_REPORT(driver); 30 tap_key(key_a); 31 32 EXPECT_EQ(leader_sequence_timed_out(), false); 33 34 idle_for(300); 35 36 EXPECT_EQ(leader_sequence_active(), false); 37 EXPECT_EQ(leader_sequence_timed_out(), true); 38 39 EXPECT_REPORT(driver, (KC_A)); 40 EXPECT_EMPTY_REPORT(driver); 41 tap_key(key_a); 42} 43 44TEST_F(Leader, triggers_two_key_sequence) { 45 TestDriver driver; 46 47 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 48 auto key_a = KeymapKey(0, 1, 0, KC_A); 49 auto key_b = KeymapKey(0, 2, 0, KC_B); 50 51 set_keymap({key_leader, key_a, key_b}); 52 53 EXPECT_EQ(leader_sequence_active(), false); 54 55 EXPECT_NO_REPORT(driver); 56 tap_key(key_leader); 57 58 EXPECT_EQ(leader_sequence_active(), true); 59 60 EXPECT_REPORT(driver, (KC_2)); 61 EXPECT_EMPTY_REPORT(driver); 62 tap_key(key_a); 63 tap_key(key_b); 64 65 EXPECT_EQ(leader_sequence_timed_out(), false); 66 67 idle_for(300); 68 69 EXPECT_EQ(leader_sequence_active(), false); 70 EXPECT_EQ(leader_sequence_timed_out(), true); 71 72 EXPECT_REPORT(driver, (KC_A)); 73 EXPECT_EMPTY_REPORT(driver); 74 tap_key(key_a); 75} 76 77TEST_F(Leader, triggers_three_key_sequence) { 78 TestDriver driver; 79 80 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 81 auto key_a = KeymapKey(0, 1, 0, KC_A); 82 auto key_b = KeymapKey(0, 2, 0, KC_B); 83 auto key_c = KeymapKey(0, 3, 0, KC_C); 84 85 set_keymap({key_leader, key_a, key_b, key_c}); 86 87 EXPECT_EQ(leader_sequence_active(), false); 88 89 EXPECT_NO_REPORT(driver); 90 tap_key(key_leader); 91 92 EXPECT_EQ(leader_sequence_active(), true); 93 94 EXPECT_REPORT(driver, (KC_3)); 95 EXPECT_EMPTY_REPORT(driver); 96 tap_key(key_a); 97 tap_key(key_b); 98 tap_key(key_c); 99 100 EXPECT_EQ(leader_sequence_timed_out(), false); 101 102 idle_for(300); 103 104 EXPECT_EQ(leader_sequence_active(), false); 105 EXPECT_EQ(leader_sequence_timed_out(), true); 106 107 EXPECT_REPORT(driver, (KC_A)); 108 EXPECT_EMPTY_REPORT(driver); 109 tap_key(key_a); 110} 111 112TEST_F(Leader, triggers_four_key_sequence) { 113 TestDriver driver; 114 115 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 116 auto key_a = KeymapKey(0, 1, 0, KC_A); 117 auto key_b = KeymapKey(0, 2, 0, KC_B); 118 auto key_c = KeymapKey(0, 3, 0, KC_C); 119 auto key_d = KeymapKey(0, 4, 0, KC_D); 120 121 set_keymap({key_leader, key_a, key_b, key_c, key_d}); 122 123 EXPECT_EQ(leader_sequence_active(), false); 124 125 EXPECT_NO_REPORT(driver); 126 tap_key(key_leader); 127 128 EXPECT_EQ(leader_sequence_active(), true); 129 130 EXPECT_REPORT(driver, (KC_4)); 131 EXPECT_EMPTY_REPORT(driver); 132 tap_key(key_a); 133 tap_key(key_b); 134 tap_key(key_c); 135 tap_key(key_d); 136 137 EXPECT_EQ(leader_sequence_timed_out(), false); 138 139 idle_for(300); 140 141 EXPECT_EQ(leader_sequence_active(), false); 142 EXPECT_EQ(leader_sequence_timed_out(), true); 143 144 EXPECT_REPORT(driver, (KC_A)); 145 EXPECT_EMPTY_REPORT(driver); 146 tap_key(key_a); 147} 148 149TEST_F(Leader, triggers_five_key_sequence) { 150 TestDriver driver; 151 152 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 153 auto key_a = KeymapKey(0, 1, 0, KC_A); 154 auto key_b = KeymapKey(0, 2, 0, KC_B); 155 auto key_c = KeymapKey(0, 3, 0, KC_C); 156 auto key_d = KeymapKey(0, 4, 0, KC_D); 157 auto key_e = KeymapKey(0, 5, 0, KC_E); 158 159 set_keymap({key_leader, key_a, key_b, key_c, key_d, key_e}); 160 161 EXPECT_EQ(leader_sequence_active(), false); 162 163 EXPECT_NO_REPORT(driver); 164 tap_key(key_leader); 165 166 EXPECT_EQ(leader_sequence_active(), true); 167 168 EXPECT_REPORT(driver, (KC_5)); 169 EXPECT_EMPTY_REPORT(driver); 170 tap_key(key_a); 171 tap_key(key_b); 172 tap_key(key_c); 173 tap_key(key_d); 174 tap_key(key_e); 175 176 EXPECT_EQ(leader_sequence_timed_out(), false); 177 178 idle_for(300); 179 180 EXPECT_EQ(leader_sequence_active(), false); 181 EXPECT_EQ(leader_sequence_timed_out(), true); 182 183 EXPECT_REPORT(driver, (KC_A)); 184 EXPECT_EMPTY_REPORT(driver); 185 tap_key(key_a); 186} 187 188TEST_F(Leader, extracts_mod_tap_keycode) { 189 TestDriver driver; 190 191 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 192 auto key_mt = KeymapKey(0, 1, 0, LSFT_T(KC_A)); 193 194 set_keymap({key_leader, key_mt}); 195 196 tap_key(key_leader); 197 198 EXPECT_REPORT(driver, (KC_1)); 199 EXPECT_EMPTY_REPORT(driver); 200 tap_key(key_mt); 201 202 EXPECT_EQ(leader_sequence_one_key(KC_A), true); 203 204 idle_for(300); 205} 206 207TEST_F(Leader, extracts_layer_tap_keycode) { 208 TestDriver driver; 209 210 auto key_leader = KeymapKey(0, 0, 0, QK_LEADER); 211 auto key_lt = KeymapKey(0, 1, 0, LT(1, KC_A)); 212 213 set_keymap({key_leader, key_lt}); 214 215 tap_key(key_leader); 216 217 EXPECT_REPORT(driver, (KC_1)); 218 EXPECT_EMPTY_REPORT(driver); 219 tap_key(key_lt); 220 221 EXPECT_EQ(leader_sequence_one_key(KC_A), true); 222 223 idle_for(300); 224}