at master 186 lines 4.7 kB view raw
1// Copyright 2024 Dasky (@daskygit) 2// SPDX-License-Identifier: GPL-2.0-or-later 3 4#include "gtest/gtest.h" 5#include "mouse_report_util.hpp" 6#include "test_common.hpp" 7#include "test_pointing_device_driver.h" 8#include "mousekey.h" 9 10using testing::_; 11 12class Pointing : public TestFixture {}; 13class PointingButtonsViaMousekeysParametrized : public ::testing::WithParamInterface<std::pair<KeymapKey, uint8_t>>, public Pointing {}; 14 15TEST_F(Pointing, NoMovementOnInitFailure) { 16 TestDriver driver; 17 18 pointing_device_set_status(POINTING_DEVICE_STATUS_INIT_FAILED); 19 pd_set_x(-50); 20 pd_set_y(100); 21 EXPECT_NO_MOUSE_REPORT(driver); 22 run_one_scan_loop(); 23 24 pointing_device_set_status(POINTING_DEVICE_STATUS_SUCCESS); 25 EXPECT_MOUSE_REPORT(driver, (-50, 100, 0, 0, 0)); 26 run_one_scan_loop(); 27 28 pd_clear_movement(); 29 // EXPECT_EMPTY_MOUSE_REPORT(driver); 30 run_one_scan_loop(); 31 32 VERIFY_AND_CLEAR(driver); 33} 34 35TEST_F(Pointing, SendMouseIsNotCalledWithNoInput) { 36 TestDriver driver; 37 EXPECT_NO_MOUSE_REPORT(driver); 38 run_one_scan_loop(); 39} 40 41TEST_F(Pointing, Xnegative) { 42 TestDriver driver; 43 44 pd_set_x(-10); 45 EXPECT_MOUSE_REPORT(driver, (-10, 0, 0, 0, 0)); 46 run_one_scan_loop(); 47 48 pd_clear_movement(); 49 // EXPECT_EMPTY_MOUSE_REPORT(driver); 50 run_one_scan_loop(); 51 52 VERIFY_AND_CLEAR(driver); 53} 54 55TEST_F(Pointing, Xpositive) { 56 TestDriver driver; 57 58 pd_set_x(10); 59 EXPECT_MOUSE_REPORT(driver, (10, 0, 0, 0, 0)); 60 run_one_scan_loop(); 61 62 pd_clear_movement(); 63 // EXPECT_EMPTY_MOUSE_REPORT(driver); 64 run_one_scan_loop(); 65 66 VERIFY_AND_CLEAR(driver); 67} 68 69TEST_F(Pointing, Ynegative) { 70 TestDriver driver; 71 72 pd_set_y(-20); 73 EXPECT_MOUSE_REPORT(driver, (0, -20, 0, 0, 0)); 74 run_one_scan_loop(); 75 76 pd_clear_movement(); 77 // EXPECT_EMPTY_MOUSE_REPORT(driver); 78 run_one_scan_loop(); 79 80 VERIFY_AND_CLEAR(driver); 81} 82 83TEST_F(Pointing, Ypositive) { 84 TestDriver driver; 85 86 pd_set_y(20); 87 EXPECT_MOUSE_REPORT(driver, (0, 20, 0, 0, 0)); 88 run_one_scan_loop(); 89 90 pd_clear_movement(); 91 // EXPECT_EMPTY_MOUSE_REPORT(driver); 92 run_one_scan_loop(); 93 94 VERIFY_AND_CLEAR(driver); 95} 96 97TEST_F(Pointing, XandY) { 98 TestDriver driver; 99 100 pd_set_x(-50); 101 pd_set_y(100); 102 EXPECT_MOUSE_REPORT(driver, (-50, 100, 0, 0, 0)); 103 run_one_scan_loop(); 104 105 pd_clear_movement(); 106 // EXPECT_EMPTY_MOUSE_REPORT(driver); 107 run_one_scan_loop(); 108 109 VERIFY_AND_CLEAR(driver); 110} 111 112TEST_F(Pointing, CorrectButtonIsReportedWhenPressed) { 113 TestDriver driver; 114 115 EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, 1)); 116 pd_press_button(POINTING_DEVICE_BUTTON1); 117 run_one_scan_loop(); 118 119 EXPECT_EMPTY_MOUSE_REPORT(driver); 120 pd_release_button(POINTING_DEVICE_BUTTON1); 121 run_one_scan_loop(); 122 123 EXPECT_NO_MOUSE_REPORT(driver); 124 run_one_scan_loop(); 125 126 pd_clear_all_buttons(); 127 run_one_scan_loop(); 128 129 VERIFY_AND_CLEAR(driver); 130} 131 132TEST_F(Pointing, CorrectButtonIsReportedWhenKeyPressed) { 133 TestDriver driver; 134 auto key = KeymapKey(0, 0, 0, QK_MOUSE_BUTTON_1); 135 set_keymap({key}); 136 137 EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, 1)); 138 key.press(); 139 run_one_scan_loop(); 140 141 EXPECT_EMPTY_MOUSE_REPORT(driver); 142 key.release(); 143 run_one_scan_loop(); 144 145 EXPECT_NO_MOUSE_REPORT(driver); 146 run_one_scan_loop(); 147 148 VERIFY_AND_CLEAR(driver); 149} 150 151TEST_P(PointingButtonsViaMousekeysParametrized, MouseKeysViaPointingDriver) { 152 TestDriver driver; 153 KeymapKey mouse_key = GetParam().first; 154 uint8_t button_mask = GetParam().second; 155 156 set_keymap({mouse_key}); 157 158 EXPECT_MOUSE_REPORT(driver, (0, 0, 0, 0, button_mask)); 159 mouse_key.press(); 160 run_one_scan_loop(); 161 162 EXPECT_EMPTY_MOUSE_REPORT(driver); 163 mouse_key.release(); 164 run_one_scan_loop(); 165 166 EXPECT_NO_MOUSE_REPORT(driver); 167 run_one_scan_loop(); 168 169 VERIFY_AND_CLEAR(driver); 170} 171// clang-format off 172INSTANTIATE_TEST_CASE_P( 173 ButtonsOneToEight, 174 PointingButtonsViaMousekeysParametrized, 175 ::testing::Values( 176 // Key , Buttons Mask 177 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_1}, 1), 178 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_2}, 2), 179 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_3}, 4), 180 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_4}, 8), 181 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_5}, 16), 182 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_6}, 32), 183 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_7}, 64), 184 std::make_pair(KeymapKey{0, 0, 0, QK_MOUSE_BUTTON_8}, 128) 185 )); 186// clang-format on