1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "ash/display/display_info.h"
8 #include "ash/touch/touchscreen_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace ash {
12
13 class TouchscreenUtilTest : public testing::Test {
14 public:
TouchscreenUtilTest()15 TouchscreenUtilTest() {}
~TouchscreenUtilTest()16 virtual ~TouchscreenUtilTest() {}
17
SetUp()18 virtual void SetUp() OVERRIDE {
19 // Internal display will always match to internal touchscreen. If internal
20 // touchscreen can't be detected, it is then associated to a touch screen
21 // with matching size.
22 {
23 DisplayInfo display(1, std::string(), false);
24 DisplayMode mode(gfx::Size(1920, 1080), 60.0, false, true);
25 mode.native = true;
26 std::vector<DisplayMode> modes(1, mode);
27 display.set_display_modes(modes);
28 displays_.push_back(display);
29 gfx::Display::SetInternalDisplayId(1);
30 }
31
32 {
33 DisplayInfo display(2, std::string(), false);
34 DisplayMode mode(gfx::Size(800, 600), 60.0, false, true);
35 mode.native = true;
36 std::vector<DisplayMode> modes(1, mode);
37 display.set_display_modes(modes);
38 displays_.push_back(display);
39 }
40
41 // Display without native mode. Must not be matched to any touch screen.
42 {
43 DisplayInfo display(3, std::string(), false);
44 displays_.push_back(display);
45 }
46
47 {
48 DisplayInfo display(4, std::string(), false);
49 DisplayMode mode(gfx::Size(1024, 768), 60.0, false, true);
50 mode.native = true;
51 std::vector<DisplayMode> modes(1, mode);
52 display.set_display_modes(modes);
53 displays_.push_back(display);
54 }
55 }
56
TearDown()57 virtual void TearDown() OVERRIDE {
58 displays_.clear();
59 }
60
61 protected:
62 std::vector<DisplayInfo> displays_;
63
64 private:
65 DISALLOW_COPY_AND_ASSIGN(TouchscreenUtilTest);
66 };
67
TEST_F(TouchscreenUtilTest,NoTouchscreens)68 TEST_F(TouchscreenUtilTest, NoTouchscreens) {
69 std::vector<ui::TouchscreenDevice> devices;
70 AssociateTouchscreens(&displays_, devices);
71
72 for (size_t i = 0; i < displays_.size(); ++i)
73 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId,
74 displays_[i].touch_device_id());
75 }
76
TEST_F(TouchscreenUtilTest,OneToOneMapping)77 TEST_F(TouchscreenUtilTest, OneToOneMapping) {
78 std::vector<ui::TouchscreenDevice> devices;
79 devices.push_back(ui::TouchscreenDevice(1, gfx::Size(800, 600), false));
80 devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1024, 768), false));
81
82 AssociateTouchscreens(&displays_, devices);
83
84 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
85 EXPECT_EQ(1, displays_[1].touch_device_id());
86 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
87 EXPECT_EQ(2, displays_[3].touch_device_id());
88 }
89
TEST_F(TouchscreenUtilTest,MapToCorrectDisplaySize)90 TEST_F(TouchscreenUtilTest, MapToCorrectDisplaySize) {
91 std::vector<ui::TouchscreenDevice> devices;
92 devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1024, 768), false));
93
94 AssociateTouchscreens(&displays_, devices);
95
96 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
97 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[1].touch_device_id());
98 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
99 EXPECT_EQ(2, displays_[3].touch_device_id());
100 }
101
TEST_F(TouchscreenUtilTest,MapWhenSizeDiffersByOne)102 TEST_F(TouchscreenUtilTest, MapWhenSizeDiffersByOne) {
103 std::vector<ui::TouchscreenDevice> devices;
104 devices.push_back(ui::TouchscreenDevice(1, gfx::Size(801, 600), false));
105 devices.push_back(ui::TouchscreenDevice(2, gfx::Size(1023, 768), false));
106
107 AssociateTouchscreens(&displays_, devices);
108
109 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
110 EXPECT_EQ(1, displays_[1].touch_device_id());
111 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
112 EXPECT_EQ(2, displays_[3].touch_device_id());
113 }
114
TEST_F(TouchscreenUtilTest,MapWhenSizesDoNotMatch)115 TEST_F(TouchscreenUtilTest, MapWhenSizesDoNotMatch) {
116 std::vector<ui::TouchscreenDevice> devices;
117 devices.push_back(ui::TouchscreenDevice(1, gfx::Size(1022, 768), false));
118 devices.push_back(ui::TouchscreenDevice(2, gfx::Size(802, 600), false));
119
120 AssociateTouchscreens(&displays_, devices);
121
122 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[0].touch_device_id());
123 EXPECT_EQ(1, displays_[1].touch_device_id());
124 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
125 EXPECT_EQ(2, displays_[3].touch_device_id());
126 }
127
TEST_F(TouchscreenUtilTest,MapInternalTouchscreen)128 TEST_F(TouchscreenUtilTest, MapInternalTouchscreen) {
129 std::vector<ui::TouchscreenDevice> devices;
130 devices.push_back(ui::TouchscreenDevice(1, gfx::Size(1920, 1080), false));
131 devices.push_back(ui::TouchscreenDevice(2, gfx::Size(9999, 888), true));
132
133 AssociateTouchscreens(&displays_, devices);
134
135 // Internal touchscreen is always mapped to internal display.
136 EXPECT_EQ(2, displays_[0].touch_device_id());
137 EXPECT_EQ(1, displays_[1].touch_device_id());
138 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[2].touch_device_id());
139 EXPECT_EQ(ui::TouchscreenDevice::kInvalidId, displays_[3].touch_device_id());
140 }
141
142 } // namespace ash
143