logo

qmk_firmware

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

test_pointing.cpp (4152B)


  1. // Copyright 2024 Dasky (@daskygit)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "gtest/gtest.h"
  4. #include "mouse_report_util.hpp"
  5. #include "test_common.hpp"
  6. #include "test_pointing_device_driver.h"
  7. #include "mousekey.h"
  8. using testing::_;
  9. class Pointing : public TestFixture {};
  10. class PointingButtonsViaMousekeysParametrized : public ::testing::WithParamInterface<std::pair<KeymapKey, uint8_t>>, public Pointing {};
  11. TEST_F(Pointing, SendMouseIsNotCalledWithNoInput) {
  12. TestDriver driver;
  13. EXPECT_NO_MOUSE_REPORT(driver);
  14. run_one_scan_loop();
  15. }
  16. TEST_F(Pointing, Xnegative) {
  17. TestDriver driver;
  18. pd_set_x(-10);
  19. EXPECT_MOUSE_REPORT(driver, (-10, 0, 0, 0, 0));
  20. run_one_scan_loop();
  21. pd_clear_movement();
  22. // EXPECT_EMPTY_MOUSE_REPORT(driver);
  23. run_one_scan_loop();
  24. VERIFY_AND_CLEAR(driver);
  25. }
  26. TEST_F(Pointing, Xpositive) {
  27. TestDriver driver;
  28. pd_set_x(10);
  29. EXPECT_MOUSE_REPORT(driver, (10, 0, 0, 0, 0));
  30. run_one_scan_loop();
  31. pd_clear_movement();
  32. // EXPECT_EMPTY_MOUSE_REPORT(driver);
  33. run_one_scan_loop();
  34. VERIFY_AND_CLEAR(driver);
  35. }
  36. TEST_F(Pointing, Ynegative) {
  37. TestDriver driver;
  38. pd_set_y(-20);
  39. EXPECT_MOUSE_REPORT(driver, (0, -20, 0, 0, 0));
  40. run_one_scan_loop();
  41. pd_clear_movement();
  42. // EXPECT_EMPTY_MOUSE_REPORT(driver);
  43. run_one_scan_loop();
  44. VERIFY_AND_CLEAR(driver);
  45. }
  46. TEST_F(Pointing, Ypositive) {
  47. TestDriver driver;
  48. pd_set_y(20);
  49. EXPECT_MOUSE_REPORT(driver, (0, 20, 0, 0, 0));
  50. run_one_scan_loop();
  51. pd_clear_movement();
  52. // EXPECT_EMPTY_MOUSE_REPORT(driver);
  53. run_one_scan_loop();
  54. VERIFY_AND_CLEAR(driver);
  55. }
  56. TEST_F(Pointing, XandY) {
  57. TestDriver driver;
  58. pd_set_x(-50);
  59. pd_set_y(100);
  60. EXPECT_MOUSE_REPORT(driver, (-50, 100, 0, 0, 0));
  61. run_one_scan_loop();
  62. pd_clear_movement();
  63. // EXPECT_EMPTY_MOUSE_REPORT(driver);
  64. run_one_scan_loop();
  65. VERIFY_AND_CLEAR(driver);
  66. }
  67. TEST_F(Pointing, CorrectButtonIsReportedWhenPressed) {
  68. TestDriver driver;
  69. EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, 1));
  70. pd_press_button(POINTING_DEVICE_BUTTON1);
  71. run_one_scan_loop();
  72. EXPECT_EMPTY_MOUSE_REPORT(driver);
  73. pd_release_button(POINTING_DEVICE_BUTTON1);
  74. run_one_scan_loop();
  75. EXPECT_NO_MOUSE_REPORT(driver);
  76. run_one_scan_loop();
  77. pd_clear_all_buttons();
  78. run_one_scan_loop();
  79. VERIFY_AND_CLEAR(driver);
  80. }
  81. TEST_F(Pointing, CorrectButtonIsReportedWhenKeyPressed) {
  82. TestDriver driver;
  83. auto key = KeymapKey(0, 0, 0, KC_MS_BTN1);
  84. set_keymap({key});
  85. EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, 1));
  86. key.press();
  87. run_one_scan_loop();
  88. EXPECT_EMPTY_MOUSE_REPORT(driver);
  89. key.release();
  90. run_one_scan_loop();
  91. EXPECT_NO_MOUSE_REPORT(driver);
  92. run_one_scan_loop();
  93. VERIFY_AND_CLEAR(driver);
  94. }
  95. TEST_P(PointingButtonsViaMousekeysParametrized, MouseKeysViaPointingDriver) {
  96. TestDriver driver;
  97. KeymapKey mouse_key = GetParam().first;
  98. uint8_t button_mask = GetParam().second;
  99. set_keymap({mouse_key});
  100. EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, button_mask));
  101. mouse_key.press();
  102. run_one_scan_loop();
  103. EXPECT_EMPTY_MOUSE_REPORT(driver);
  104. mouse_key.release();
  105. run_one_scan_loop();
  106. EXPECT_NO_MOUSE_REPORT(driver);
  107. run_one_scan_loop();
  108. VERIFY_AND_CLEAR(driver);
  109. }
  110. // clang-format off
  111. INSTANTIATE_TEST_CASE_P(
  112. ButtonsOneToEight,
  113. PointingButtonsViaMousekeysParametrized,
  114. ::testing::Values(
  115. // Key , Buttons Mask
  116. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_1}, 1),
  117. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_2}, 2),
  118. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_3}, 4),
  119. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_4}, 8),
  120. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_5}, 16),
  121. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_6}, 32),
  122. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_7}, 64),
  123. std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_8}, 128)
  124. ));
  125. // clang-format on