test_combo.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2023 Stefan Kerkmann (@KarlK90)
  2. // Copyright 2023 @filterpaper
  3. // SPDX-License-Identifier: GPL-2.0-or-later
  4. #include "keyboard_report_util.hpp"
  5. #include "quantum.h"
  6. #include "keycode.h"
  7. #include "test_common.h"
  8. #include "test_driver.hpp"
  9. #include "test_fixture.hpp"
  10. #include "test_keymap_key.hpp"
  11. extern "C" {
  12. enum combos { modtest, osmshift, COMBO_LENGTH };
  13. uint16_t COMBO_LEN = COMBO_LENGTH;
  14. uint16_t const modtest_combo[] = {KC_Y, KC_U, COMBO_END};
  15. uint16_t const osmshift_combo[] = {KC_Z, KC_X, COMBO_END};
  16. // clang-format off
  17. combo_t key_combos[] = {
  18. [modtest] = COMBO(modtest_combo, RSFT_T(KC_SPACE)),
  19. [osmshift] = COMBO(osmshift_combo, OSM(MOD_LSFT))
  20. };
  21. // clang-format on
  22. }
  23. using testing::_;
  24. using testing::InSequence;
  25. class Combo : public TestFixture {};
  26. TEST_F(Combo, combo_modtest_tapped) {
  27. TestDriver driver;
  28. KeymapKey key_y(0, 0, 1, KC_Y);
  29. KeymapKey key_u(0, 0, 2, KC_U);
  30. set_keymap({key_y, key_u});
  31. EXPECT_REPORT(driver, (KC_SPACE));
  32. EXPECT_EMPTY_REPORT(driver);
  33. tap_combo({key_y, key_u});
  34. VERIFY_AND_CLEAR(driver);
  35. }
  36. TEST_F(Combo, combo_modtest_held_longer_than_tapping_term) {
  37. TestDriver driver;
  38. KeymapKey key_y(0, 0, 1, KC_Y);
  39. KeymapKey key_u(0, 0, 2, KC_U);
  40. set_keymap({key_y, key_u});
  41. EXPECT_REPORT(driver, (KC_RIGHT_SHIFT));
  42. EXPECT_EMPTY_REPORT(driver);
  43. tap_combo({key_y, key_u}, TAPPING_TERM + 1);
  44. VERIFY_AND_CLEAR(driver);
  45. }
  46. TEST_F(Combo, combo_osmshift_tapped) {
  47. TestDriver driver;
  48. KeymapKey key_z(0, 0, 1, KC_Z);
  49. KeymapKey key_x(0, 0, 2, KC_X);
  50. KeymapKey key_i(0, 0, 3, KC_I);
  51. set_keymap({key_z, key_x, key_i});
  52. EXPECT_NO_REPORT(driver);
  53. tap_combo({key_z, key_x});
  54. VERIFY_AND_CLEAR(driver);
  55. EXPECT_REPORT(driver, (KC_I, KC_LEFT_SHIFT));
  56. EXPECT_EMPTY_REPORT(driver);
  57. tap_key(key_i);
  58. VERIFY_AND_CLEAR(driver);
  59. }