logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

test_leader.cpp (5370B)


  1. // Copyright 2023 QMK
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "keyboard_report_util.hpp"
  4. #include "keycode.h"
  5. #include "test_common.hpp"
  6. #include "test_keymap_key.hpp"
  7. using testing::_;
  8. class Leader : public TestFixture {};
  9. TEST_F(Leader, triggers_one_key_sequence) {
  10. TestDriver driver;
  11. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  12. auto key_a = KeymapKey(0, 1, 0, KC_A);
  13. set_keymap({key_leader, key_a});
  14. EXPECT_EQ(leader_sequence_active(), false);
  15. EXPECT_NO_REPORT(driver);
  16. tap_key(key_leader);
  17. EXPECT_EQ(leader_sequence_active(), true);
  18. EXPECT_REPORT(driver, (KC_1));
  19. EXPECT_EMPTY_REPORT(driver);
  20. tap_key(key_a);
  21. EXPECT_EQ(leader_sequence_timed_out(), false);
  22. idle_for(300);
  23. EXPECT_EQ(leader_sequence_active(), false);
  24. EXPECT_EQ(leader_sequence_timed_out(), true);
  25. EXPECT_REPORT(driver, (KC_A));
  26. EXPECT_EMPTY_REPORT(driver);
  27. tap_key(key_a);
  28. }
  29. TEST_F(Leader, triggers_two_key_sequence) {
  30. TestDriver driver;
  31. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  32. auto key_a = KeymapKey(0, 1, 0, KC_A);
  33. auto key_b = KeymapKey(0, 2, 0, KC_B);
  34. set_keymap({key_leader, key_a, key_b});
  35. EXPECT_EQ(leader_sequence_active(), false);
  36. EXPECT_NO_REPORT(driver);
  37. tap_key(key_leader);
  38. EXPECT_EQ(leader_sequence_active(), true);
  39. EXPECT_REPORT(driver, (KC_2));
  40. EXPECT_EMPTY_REPORT(driver);
  41. tap_key(key_a);
  42. tap_key(key_b);
  43. EXPECT_EQ(leader_sequence_timed_out(), false);
  44. idle_for(300);
  45. EXPECT_EQ(leader_sequence_active(), false);
  46. EXPECT_EQ(leader_sequence_timed_out(), true);
  47. EXPECT_REPORT(driver, (KC_A));
  48. EXPECT_EMPTY_REPORT(driver);
  49. tap_key(key_a);
  50. }
  51. TEST_F(Leader, triggers_three_key_sequence) {
  52. TestDriver driver;
  53. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  54. auto key_a = KeymapKey(0, 1, 0, KC_A);
  55. auto key_b = KeymapKey(0, 2, 0, KC_B);
  56. auto key_c = KeymapKey(0, 3, 0, KC_C);
  57. set_keymap({key_leader, key_a, key_b, key_c});
  58. EXPECT_EQ(leader_sequence_active(), false);
  59. EXPECT_NO_REPORT(driver);
  60. tap_key(key_leader);
  61. EXPECT_EQ(leader_sequence_active(), true);
  62. EXPECT_REPORT(driver, (KC_3));
  63. EXPECT_EMPTY_REPORT(driver);
  64. tap_key(key_a);
  65. tap_key(key_b);
  66. tap_key(key_c);
  67. EXPECT_EQ(leader_sequence_timed_out(), false);
  68. idle_for(300);
  69. EXPECT_EQ(leader_sequence_active(), false);
  70. EXPECT_EQ(leader_sequence_timed_out(), true);
  71. EXPECT_REPORT(driver, (KC_A));
  72. EXPECT_EMPTY_REPORT(driver);
  73. tap_key(key_a);
  74. }
  75. TEST_F(Leader, triggers_four_key_sequence) {
  76. TestDriver driver;
  77. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  78. auto key_a = KeymapKey(0, 1, 0, KC_A);
  79. auto key_b = KeymapKey(0, 2, 0, KC_B);
  80. auto key_c = KeymapKey(0, 3, 0, KC_C);
  81. auto key_d = KeymapKey(0, 4, 0, KC_D);
  82. set_keymap({key_leader, key_a, key_b, key_c, key_d});
  83. EXPECT_EQ(leader_sequence_active(), false);
  84. EXPECT_NO_REPORT(driver);
  85. tap_key(key_leader);
  86. EXPECT_EQ(leader_sequence_active(), true);
  87. EXPECT_REPORT(driver, (KC_4));
  88. EXPECT_EMPTY_REPORT(driver);
  89. tap_key(key_a);
  90. tap_key(key_b);
  91. tap_key(key_c);
  92. tap_key(key_d);
  93. EXPECT_EQ(leader_sequence_timed_out(), false);
  94. idle_for(300);
  95. EXPECT_EQ(leader_sequence_active(), false);
  96. EXPECT_EQ(leader_sequence_timed_out(), true);
  97. EXPECT_REPORT(driver, (KC_A));
  98. EXPECT_EMPTY_REPORT(driver);
  99. tap_key(key_a);
  100. }
  101. TEST_F(Leader, triggers_five_key_sequence) {
  102. TestDriver driver;
  103. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  104. auto key_a = KeymapKey(0, 1, 0, KC_A);
  105. auto key_b = KeymapKey(0, 2, 0, KC_B);
  106. auto key_c = KeymapKey(0, 3, 0, KC_C);
  107. auto key_d = KeymapKey(0, 4, 0, KC_D);
  108. auto key_e = KeymapKey(0, 5, 0, KC_E);
  109. set_keymap({key_leader, key_a, key_b, key_c, key_d, key_e});
  110. EXPECT_EQ(leader_sequence_active(), false);
  111. EXPECT_NO_REPORT(driver);
  112. tap_key(key_leader);
  113. EXPECT_EQ(leader_sequence_active(), true);
  114. EXPECT_REPORT(driver, (KC_5));
  115. EXPECT_EMPTY_REPORT(driver);
  116. tap_key(key_a);
  117. tap_key(key_b);
  118. tap_key(key_c);
  119. tap_key(key_d);
  120. tap_key(key_e);
  121. EXPECT_EQ(leader_sequence_timed_out(), false);
  122. idle_for(300);
  123. EXPECT_EQ(leader_sequence_active(), false);
  124. EXPECT_EQ(leader_sequence_timed_out(), true);
  125. EXPECT_REPORT(driver, (KC_A));
  126. EXPECT_EMPTY_REPORT(driver);
  127. tap_key(key_a);
  128. }
  129. TEST_F(Leader, extracts_mod_tap_keycode) {
  130. TestDriver driver;
  131. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  132. auto key_mt = KeymapKey(0, 1, 0, LSFT_T(KC_A));
  133. set_keymap({key_leader, key_mt});
  134. tap_key(key_leader);
  135. EXPECT_REPORT(driver, (KC_1));
  136. EXPECT_EMPTY_REPORT(driver);
  137. tap_key(key_mt);
  138. EXPECT_EQ(leader_sequence_one_key(KC_A), true);
  139. idle_for(300);
  140. }
  141. TEST_F(Leader, extracts_layer_tap_keycode) {
  142. TestDriver driver;
  143. auto key_leader = KeymapKey(0, 0, 0, QK_LEADER);
  144. auto key_lt = KeymapKey(0, 1, 0, LT(1, KC_A));
  145. set_keymap({key_leader, key_lt});
  146. tap_key(key_leader);
  147. EXPECT_REPORT(driver, (KC_1));
  148. EXPECT_EMPTY_REPORT(driver);
  149. tap_key(key_lt);
  150. EXPECT_EQ(leader_sequence_one_key(KC_A), true);
  151. idle_for(300);
  152. }