blob: 451d02556992a4f1aa7a5f46c7a529051563c158 [file] [log] [blame]
Avi Drissmand878a5012022-09-12 19:13:301// Copyright 2018 The Chromium Authors
Daniel Nicoara9bc4d3b2018-02-27 19:33:092// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromecast/browser/cast_touch_device_manager.h"
6#include "testing/gtest/include/gtest/gtest.h"
7#include "ui/events/devices/device_data_manager.h"
8#include "ui/events/devices/device_hotplug_event_observer.h"
9#include "ui/gfx/geometry/rect.h"
10
11namespace {
12
13constexpr int64_t kDisplayId = 1;
14constexpr int kTouchDeviceId = 100;
15
16} // namespace
17
18class CastTouchDeviceManagerTest : public testing::Test {
19 public:
20 CastTouchDeviceManagerTest() {}
21
22 void SetUp() override {
23 ui::DeviceDataManager::CreateInstance();
24 touch_device_manager_ =
25 std::make_unique<chromecast::shell::CastTouchDeviceManager>();
26 }
27
28 void TearDown() override {
29 touch_device_manager_.reset();
30 ui::DeviceDataManager::DeleteInstance();
31 }
32
33 ui::DeviceHotplugEventObserver* GetHotplugObserver() {
34 return ui::DeviceDataManager::GetInstance();
35 }
36
37 protected:
38 std::unique_ptr<chromecast::shell::CastTouchDeviceManager>
39 touch_device_manager_;
40};
41
42TEST_F(CastTouchDeviceManagerTest, CheckOneToOneMapping) {
43 std::vector<ui::TouchscreenDevice> touchscreens;
44 const gfx::Size display_size = gfx::Size(1280, 720);
45 touch_device_manager_->OnDisplayConfigured(
46 kDisplayId, display::Display::ROTATE_0, gfx::Rect(display_size));
47 touchscreens.push_back(ui::TouchscreenDevice(kTouchDeviceId,
48 ui::INPUT_DEVICE_INTERNAL,
49 "Touchscreen", display_size, 1));
50 GetHotplugObserver()->OnTouchscreenDevicesUpdated(touchscreens);
51
52 // 1:1 mapping for touch coordinates to display coordinates.
53 {
54 float x = display_size.width(), y = display_size.height();
55 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
56 &x, &y);
57 EXPECT_EQ(display_size.width(), x);
58 EXPECT_EQ(display_size.height(), y);
59 }
60
61 {
62 float x = display_size.width(), y = 0;
63 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
64 &x, &y);
65 EXPECT_EQ(display_size.width(), x);
66 EXPECT_EQ(0, y);
67 }
68
69 {
70 float x = 0, y = display_size.height();
71 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
72 &x, &y);
73 EXPECT_EQ(0, x);
74 EXPECT_EQ(display_size.height(), y);
75 }
76
77 {
78 float x = display_size.width() / 2, y = display_size.height() / 2;
79 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(1, &x, &y);
80 EXPECT_EQ(display_size.width() / 2, x);
81 EXPECT_EQ(display_size.height() / 2, y);
82 }
83}
84
85TEST_F(CastTouchDeviceManagerTest, CheckMappingWithLargerTouchscreen) {
86 std::vector<ui::TouchscreenDevice> touchscreens;
87 const gfx::Size display_size = gfx::Size(1280, 720);
88 touch_device_manager_->OnDisplayConfigured(
89 kDisplayId, display::Display::ROTATE_0, gfx::Rect(display_size));
90 touchscreens.push_back(ui::TouchscreenDevice(
91 kTouchDeviceId, ui::INPUT_DEVICE_INTERNAL, "Touchscreen",
92 gfx::ScaleToRoundedSize(display_size, 2, 2), 1));
93 GetHotplugObserver()->OnTouchscreenDevicesUpdated(touchscreens);
94
95 // Touch screen is twice the size, so transformed events will be half the
96 // reported value.
97 {
98 float x = display_size.width(), y = display_size.height();
99 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
100 &x, &y);
101 EXPECT_EQ(display_size.width() / 2, x);
102 EXPECT_EQ(display_size.height() / 2, y);
103 }
104
105 {
106 float x = display_size.width(), y = 0;
107 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
108 &x, &y);
109 EXPECT_EQ(display_size.width() / 2, x);
110 EXPECT_EQ(0, y);
111 }
112
113 {
114 float x = 0, y = display_size.height();
115 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
116 &x, &y);
117 EXPECT_EQ(0, x);
118 EXPECT_EQ(display_size.height() / 2, y);
119 }
120
121 {
122 float x = display_size.width() / 2, y = display_size.height() / 2;
123 ui::DeviceDataManager::GetInstance()->ApplyTouchTransformer(kTouchDeviceId,
124 &x, &y);
125 EXPECT_EQ(display_size.width() / 4, x);
126 EXPECT_EQ(display_size.height() / 4, y);
127 }
128}