mirror of
https://github.com/qmk/qmk_firmware.git
synced 2024-12-11 20:31:02 +00:00
60 lines
2.2 KiB
C++
60 lines
2.2 KiB
C++
// Copyright 2024 Dasky (@daskygit)
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "mouse_report_util.hpp"
|
|
#include "test_common.hpp"
|
|
#include "test_pointing_device_driver.h"
|
|
|
|
using testing::_;
|
|
|
|
struct SimpleReport {
|
|
int16_t x;
|
|
int16_t y;
|
|
int16_t h;
|
|
int16_t v;
|
|
};
|
|
|
|
class Pointing : public TestFixture {};
|
|
class PointingInvertAndRotateParametrized : public ::testing::WithParamInterface<std::pair<SimpleReport, SimpleReport>>, public Pointing {};
|
|
|
|
TEST_P(PointingInvertAndRotateParametrized, PointingInvertAndRotateOrder) {
|
|
TestDriver driver;
|
|
SimpleReport input = GetParam().first;
|
|
SimpleReport expectations = GetParam().second;
|
|
|
|
pd_set_x(input.x);
|
|
pd_set_y(input.y);
|
|
pd_set_h(input.h);
|
|
pd_set_v(input.v);
|
|
|
|
EXPECT_MOUSE_REPORT(driver, (expectations.x, expectations.y, expectations.h, expectations.v, 0));
|
|
run_one_scan_loop();
|
|
|
|
// EXPECT_EMPTY_MOUSE_REPORT(driver);
|
|
pd_clear_movement();
|
|
run_one_scan_loop();
|
|
|
|
EXPECT_NO_MOUSE_REPORT(driver);
|
|
run_one_scan_loop();
|
|
|
|
VERIFY_AND_CLEAR(driver);
|
|
}
|
|
// clang-format off
|
|
INSTANTIATE_TEST_CASE_P(
|
|
InvertAndRotate,
|
|
PointingInvertAndRotateParametrized,
|
|
::testing::Values(
|
|
// Input Expected // Actual Result - Rotate 90 then Invert X
|
|
std::make_pair(SimpleReport{ -1, 0, 0, 0}, SimpleReport{ 0, 1, 0, 0}), // LEFT - DOWN
|
|
std::make_pair(SimpleReport{ 0, -1, 0, 0}, SimpleReport{ 1, 0, 0, 0}), // UP - RIGHT
|
|
std::make_pair(SimpleReport{ 1, 0, 0, 0}, SimpleReport{ 0, -1, 0, 0}), // RIGHT - UP
|
|
std::make_pair(SimpleReport{ 0, 1, 0, 0}, SimpleReport{ -1, 0, 0, 0}) // DOWN - LEFT
|
|
// Input Expected // Invert X then Rotate 90
|
|
// std::make_pair(SimpleReport{ -1, 0, 0, 0}, SimpleReport{ 0, -1, 0, 0}), // LEFT - UP
|
|
// std::make_pair(SimpleReport{ 0, -1, 0, 0}, SimpleReport{ -1, 0, 0, 0}), // UP - LEFT
|
|
// std::make_pair(SimpleReport{ 1, 0, 0, 0}, SimpleReport{ 0, 1, 0, 0}), // RIGHT - DOWN
|
|
// std::make_pair(SimpleReport{ 0, 1, 0, 0}, SimpleReport{ 1, 0, 0, 0}) // DOWN - RIGHT
|
|
));
|
|
// clang-format on
|