59 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			59 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
 |