OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/display/chromeos/display_configurator.h" | 10 #include "ui/display/chromeos/display_configurator.h" |
11 #include "ui/display/chromeos/test/test_display_snapshot.h" | 11 #include "ui/display/chromeos/test/test_display_snapshot.h" |
12 #include "ui/display/chromeos/touchscreen_delegate_impl.h" | 12 #include "ui/display/chromeos/touchscreen_delegate_impl.h" |
13 #include "ui/display/types/chromeos/touchscreen_device_manager.h" | 13 #include "ui/events/device_data_manager.h" |
| 14 #include "ui/events/device_hotplug_event_observer.h" |
14 | 15 |
15 namespace ui { | 16 namespace ui { |
16 | 17 |
17 namespace { | |
18 | |
19 class MockTouchscreenDeviceManager : public TouchscreenDeviceManager { | |
20 public: | |
21 MockTouchscreenDeviceManager() {} | |
22 virtual ~MockTouchscreenDeviceManager() {} | |
23 | |
24 void AddDevice(const TouchscreenDevice& device) { | |
25 devices_.push_back(device); | |
26 } | |
27 | |
28 // TouchscreenDeviceManager overrides: | |
29 virtual std::vector<TouchscreenDevice> GetDevices() OVERRIDE { | |
30 return devices_; | |
31 } | |
32 | |
33 private: | |
34 std::vector<TouchscreenDevice> devices_; | |
35 | |
36 DISALLOW_COPY_AND_ASSIGN(MockTouchscreenDeviceManager); | |
37 }; | |
38 | |
39 } // namespace | |
40 | |
41 class TouchscreenDelegateImplTest : public testing::Test { | 18 class TouchscreenDelegateImplTest : public testing::Test { |
42 public: | 19 public: |
43 TouchscreenDelegateImplTest() {} | 20 TouchscreenDelegateImplTest() { |
| 21 DeviceDataManager::CreateInstance(); |
| 22 device_delegate_ = DeviceDataManager::GetInstance(); |
| 23 } |
44 virtual ~TouchscreenDelegateImplTest() {} | 24 virtual ~TouchscreenDelegateImplTest() {} |
45 | 25 |
46 virtual void SetUp() OVERRIDE { | 26 virtual void SetUp() OVERRIDE { |
47 device_manager_ = new MockTouchscreenDeviceManager(); | 27 touchscreen_delegate_.reset(new TouchscreenDelegateImpl()); |
48 delegate_.reset(new TouchscreenDelegateImpl( | |
49 scoped_ptr<TouchscreenDeviceManager>(device_manager_))); | |
50 | 28 |
51 // Internal display will always match to internal touchscreen. If internal | 29 // Internal display will always match to internal touchscreen. If internal |
52 // touchscreen can't be detected, it is then associated to a touch screen | 30 // touchscreen can't be detected, it is then associated to a touch screen |
53 // with matching size. | 31 // with matching size. |
54 TestDisplaySnapshot* snapshot = new TestDisplaySnapshot(); | 32 TestDisplaySnapshot* snapshot = new TestDisplaySnapshot(); |
55 DisplayMode* mode = new DisplayMode(gfx::Size(1920, 1080), false, 60.0); | 33 DisplayMode* mode = new DisplayMode(gfx::Size(1920, 1080), false, 60.0); |
56 snapshot->set_type(DISPLAY_CONNECTION_TYPE_INTERNAL); | 34 snapshot->set_type(DISPLAY_CONNECTION_TYPE_INTERNAL); |
57 snapshot->set_modes(std::vector<const DisplayMode*>(1, mode)); | 35 snapshot->set_modes(std::vector<const DisplayMode*>(1, mode)); |
58 snapshot->set_native_mode(mode); | 36 snapshot->set_native_mode(mode); |
59 displays_.push_back(snapshot); | 37 displays_.push_back(snapshot); |
(...skipping 15 matching lines...) Expand all Loading... |
75 } | 53 } |
76 | 54 |
77 virtual void TearDown() OVERRIDE { | 55 virtual void TearDown() OVERRIDE { |
78 // The snapshots do not own the modes, so we need to delete them. | 56 // The snapshots do not own the modes, so we need to delete them. |
79 for (size_t i = 0; i < displays_.size(); ++i) { | 57 for (size_t i = 0; i < displays_.size(); ++i) { |
80 if (displays_[i]->native_mode()) | 58 if (displays_[i]->native_mode()) |
81 delete displays_[i]->native_mode(); | 59 delete displays_[i]->native_mode(); |
82 } | 60 } |
83 | 61 |
84 displays_.clear(); | 62 displays_.clear(); |
| 63 device_delegate_->OnTouchscreenDevicesUpdated( |
| 64 std::vector<TouchscreenDevice>()); |
85 } | 65 } |
86 | 66 |
87 std::vector<DisplayConfigurator::DisplayState> GetDisplayStates() { | 67 std::vector<DisplayConfigurator::DisplayState> GetDisplayStates() { |
88 std::vector<DisplayConfigurator::DisplayState> states(displays_.size()); | 68 std::vector<DisplayConfigurator::DisplayState> states(displays_.size()); |
89 for (size_t i = 0; i < displays_.size(); ++i) | 69 for (size_t i = 0; i < displays_.size(); ++i) |
90 states[i].display = displays_[i]; | 70 states[i].display = displays_[i]; |
91 | 71 |
92 return states; | 72 return states; |
93 } | 73 } |
94 | 74 |
95 protected: | 75 protected: |
96 MockTouchscreenDeviceManager* device_manager_; // Not owned. | 76 scoped_ptr<TouchscreenDelegateImpl> touchscreen_delegate_; |
97 scoped_ptr<TouchscreenDelegateImpl> delegate_; | |
98 ScopedVector<DisplaySnapshot> displays_; | 77 ScopedVector<DisplaySnapshot> displays_; |
| 78 DeviceHotplugEventObserver* device_delegate_; // Not owned. |
99 | 79 |
100 private: | 80 private: |
101 DISALLOW_COPY_AND_ASSIGN(TouchscreenDelegateImplTest); | 81 DISALLOW_COPY_AND_ASSIGN(TouchscreenDelegateImplTest); |
102 }; | 82 }; |
103 | 83 |
104 TEST_F(TouchscreenDelegateImplTest, NoTouchscreens) { | 84 TEST_F(TouchscreenDelegateImplTest, NoTouchscreens) { |
105 std::vector<DisplayConfigurator::DisplayState> display_states = | 85 std::vector<DisplayConfigurator::DisplayState> display_states = |
106 GetDisplayStates(); | 86 GetDisplayStates(); |
107 delegate_->AssociateTouchscreens(&display_states); | 87 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
108 | 88 |
109 for (size_t i = 0; i < display_states.size(); ++i) | 89 for (size_t i = 0; i < display_states.size(); ++i) |
110 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[i].touch_device_id); | 90 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[i].touch_device_id); |
111 } | 91 } |
112 | 92 |
113 TEST_F(TouchscreenDelegateImplTest, OneToOneMapping) { | 93 TEST_F(TouchscreenDelegateImplTest, OneToOneMapping) { |
114 device_manager_->AddDevice(TouchscreenDevice(1, gfx::Size(800, 600), false)); | 94 std::vector<TouchscreenDevice> devices; |
115 device_manager_->AddDevice(TouchscreenDevice(2, gfx::Size(1024, 768), false)); | 95 devices.push_back(TouchscreenDevice(1, gfx::Size(800, 600), false)); |
| 96 devices.push_back(TouchscreenDevice(2, gfx::Size(1024, 768), false)); |
| 97 device_delegate_->OnTouchscreenDevicesUpdated(devices); |
116 | 98 |
117 std::vector<DisplayConfigurator::DisplayState> display_states = | 99 std::vector<DisplayConfigurator::DisplayState> display_states = |
118 GetDisplayStates(); | 100 GetDisplayStates(); |
119 delegate_->AssociateTouchscreens(&display_states); | 101 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
120 | 102 |
121 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); | 103 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); |
122 EXPECT_EQ(1, display_states[1].touch_device_id); | 104 EXPECT_EQ(1, display_states[1].touch_device_id); |
123 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); | 105 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); |
124 EXPECT_EQ(2, display_states[3].touch_device_id); | 106 EXPECT_EQ(2, display_states[3].touch_device_id); |
125 } | 107 } |
126 | 108 |
127 TEST_F(TouchscreenDelegateImplTest, MapToCorrectDisplaySize) { | 109 TEST_F(TouchscreenDelegateImplTest, MapToCorrectDisplaySize) { |
128 device_manager_->AddDevice(TouchscreenDevice(2, gfx::Size(1024, 768), false)); | 110 std::vector<TouchscreenDevice> devices; |
| 111 devices.push_back(TouchscreenDevice(2, gfx::Size(1024, 768), false)); |
| 112 device_delegate_->OnTouchscreenDevicesUpdated(devices); |
129 | 113 |
130 std::vector<DisplayConfigurator::DisplayState> display_states = | 114 std::vector<DisplayConfigurator::DisplayState> display_states = |
131 GetDisplayStates(); | 115 GetDisplayStates(); |
132 delegate_->AssociateTouchscreens(&display_states); | 116 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
133 | 117 |
134 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); | 118 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); |
135 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[1].touch_device_id); | 119 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[1].touch_device_id); |
136 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); | 120 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); |
137 EXPECT_EQ(2, display_states[3].touch_device_id); | 121 EXPECT_EQ(2, display_states[3].touch_device_id); |
138 } | 122 } |
139 | 123 |
140 TEST_F(TouchscreenDelegateImplTest, MapWhenSizeDiffersByOne) { | 124 TEST_F(TouchscreenDelegateImplTest, MapWhenSizeDiffersByOne) { |
141 device_manager_->AddDevice(TouchscreenDevice(1, gfx::Size(801, 600), false)); | 125 std::vector<TouchscreenDevice> devices; |
142 device_manager_->AddDevice(TouchscreenDevice(2, gfx::Size(1023, 768), false)); | 126 devices.push_back(TouchscreenDevice(1, gfx::Size(801, 600), false)); |
| 127 devices.push_back(TouchscreenDevice(2, gfx::Size(1023, 768), false)); |
| 128 device_delegate_->OnTouchscreenDevicesUpdated(devices); |
143 | 129 |
144 std::vector<DisplayConfigurator::DisplayState> display_states = | 130 std::vector<DisplayConfigurator::DisplayState> display_states = |
145 GetDisplayStates(); | 131 GetDisplayStates(); |
146 delegate_->AssociateTouchscreens(&display_states); | 132 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
147 | 133 |
148 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); | 134 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); |
149 EXPECT_EQ(1, display_states[1].touch_device_id); | 135 EXPECT_EQ(1, display_states[1].touch_device_id); |
150 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); | 136 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); |
151 EXPECT_EQ(2, display_states[3].touch_device_id); | 137 EXPECT_EQ(2, display_states[3].touch_device_id); |
152 } | 138 } |
153 | 139 |
154 TEST_F(TouchscreenDelegateImplTest, MapWhenSizesDoNotMatch) { | 140 TEST_F(TouchscreenDelegateImplTest, MapWhenSizesDoNotMatch) { |
155 device_manager_->AddDevice(TouchscreenDevice(1, gfx::Size(1022, 768), false)); | 141 std::vector<TouchscreenDevice> devices; |
156 device_manager_->AddDevice(TouchscreenDevice(2, gfx::Size(802, 600), false)); | 142 devices.push_back(TouchscreenDevice(1, gfx::Size(1022, 768), false)); |
| 143 devices.push_back(TouchscreenDevice(2, gfx::Size(802, 600), false)); |
| 144 device_delegate_->OnTouchscreenDevicesUpdated(devices); |
157 | 145 |
158 std::vector<DisplayConfigurator::DisplayState> display_states = | 146 std::vector<DisplayConfigurator::DisplayState> display_states = |
159 GetDisplayStates(); | 147 GetDisplayStates(); |
160 delegate_->AssociateTouchscreens(&display_states); | 148 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
161 | 149 |
162 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); | 150 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[0].touch_device_id); |
163 EXPECT_EQ(1, display_states[1].touch_device_id); | 151 EXPECT_EQ(1, display_states[1].touch_device_id); |
164 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); | 152 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); |
165 EXPECT_EQ(2, display_states[3].touch_device_id); | 153 EXPECT_EQ(2, display_states[3].touch_device_id); |
166 } | 154 } |
167 | 155 |
168 TEST_F(TouchscreenDelegateImplTest, MapInternalTouchscreen) { | 156 TEST_F(TouchscreenDelegateImplTest, MapInternalTouchscreen) { |
169 device_manager_->AddDevice( | 157 std::vector<TouchscreenDevice> devices; |
170 TouchscreenDevice(1, gfx::Size(1920, 1080), false)); | 158 devices.push_back(TouchscreenDevice(1, gfx::Size(1920, 1080), false)); |
171 device_manager_->AddDevice(TouchscreenDevice(2, gfx::Size(9999, 888), true)); | 159 devices.push_back(TouchscreenDevice(2, gfx::Size(9999, 888), true)); |
| 160 device_delegate_->OnTouchscreenDevicesUpdated(devices); |
172 | 161 |
173 std::vector<DisplayConfigurator::DisplayState> display_states = | 162 std::vector<DisplayConfigurator::DisplayState> display_states = |
174 GetDisplayStates(); | 163 GetDisplayStates(); |
175 delegate_->AssociateTouchscreens(&display_states); | 164 touchscreen_delegate_->AssociateTouchscreens(&display_states); |
176 | 165 |
177 // Internal touchscreen is always mapped to internal display. | 166 // Internal touchscreen is always mapped to internal display. |
178 EXPECT_EQ(2, display_states[0].touch_device_id); | 167 EXPECT_EQ(2, display_states[0].touch_device_id); |
179 EXPECT_EQ(1, display_states[1].touch_device_id); | 168 EXPECT_EQ(1, display_states[1].touch_device_id); |
180 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); | 169 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[2].touch_device_id); |
181 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[3].touch_device_id); | 170 EXPECT_EQ(TouchscreenDevice::kInvalidId, display_states[3].touch_device_id); |
182 } | 171 } |
183 | 172 |
184 } // namespace ui | 173 } // namespace ui |
OLD | NEW |