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 <errno.h> | 5 #include <errno.h> |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <linux/input.h> | 7 #include <linux/input.h> |
8 #include <unistd.h> | 8 #include <unistd.h> |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
14 #include "base/memory/scoped_vector.h" | 14 #include "base/memory/scoped_vector.h" |
15 #include "base/posix/eintr_wrapper.h" | 15 #include "base/posix/eintr_wrapper.h" |
16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "ui/events/devices/device_data_manager.h" | 19 #include "ui/events/devices/device_data_manager.h" |
| 20 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" |
20 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" | 21 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" |
21 #include "ui/events/platform/platform_event_dispatcher.h" | 22 #include "ui/events/platform/platform_event_dispatcher.h" |
22 #include "ui/events/platform/platform_event_source.h" | 23 #include "ui/events/platform/platform_event_source.h" |
23 | 24 |
24 namespace { | 25 namespace { |
25 | 26 |
26 static int SetNonBlocking(int fd) { | 27 static int SetNonBlocking(int fd) { |
27 int flags = fcntl(fd, F_GETFL, 0); | 28 int flags = fcntl(fd, F_GETFL, 0); |
28 if (flags == -1) | 29 if (flags == -1) |
29 flags = 0; | 30 flags = 0; |
30 return fcntl(fd, F_SETFL, flags | O_NONBLOCK); | 31 return fcntl(fd, F_SETFL, flags | O_NONBLOCK); |
31 } | 32 } |
32 | 33 |
33 const char kTestDevicePath[] = "/dev/input/test-device"; | 34 const char kTestDevicePath[] = "/dev/input/test-device"; |
34 | 35 |
35 } // namespace | 36 } // namespace |
36 | 37 |
37 namespace ui { | 38 namespace ui { |
38 | 39 |
39 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev { | 40 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev { |
40 public: | 41 public: |
41 MockTouchEventConverterEvdev(int fd, base::FilePath path); | 42 MockTouchEventConverterEvdev(int fd, |
| 43 base::FilePath path, |
| 44 DeviceEventDispatcherEvdev* dispatcher); |
42 ~MockTouchEventConverterEvdev() override {} | 45 ~MockTouchEventConverterEvdev() override {} |
43 | 46 |
44 void ConfigureReadMock(struct input_event* queue, | 47 void ConfigureReadMock(struct input_event* queue, |
45 long read_this_many, | 48 long read_this_many, |
46 long queue_index); | 49 long queue_index); |
47 | 50 |
48 unsigned size() { return dispatched_events_.size(); } | |
49 const TouchEventParams& event(unsigned index) { | |
50 DCHECK_GT(dispatched_events_.size(), index); | |
51 return dispatched_events_[index]; | |
52 } | |
53 | |
54 // Actually dispatch the event reader code. | 51 // Actually dispatch the event reader code. |
55 void ReadNow() { | 52 void ReadNow() { |
56 OnFileCanReadWithoutBlocking(read_pipe_); | 53 OnFileCanReadWithoutBlocking(read_pipe_); |
57 base::RunLoop().RunUntilIdle(); | 54 base::RunLoop().RunUntilIdle(); |
58 } | 55 } |
59 | 56 |
60 void DispatchCallback(const TouchEventParams& params) { | |
61 dispatched_events_.push_back(params); | |
62 } | |
63 | |
64 void Initialize(const EventDeviceInfo& device_info) override {} | 57 void Initialize(const EventDeviceInfo& device_info) override {} |
65 bool Reinitialize() override { return true; } | 58 bool Reinitialize() override { return true; } |
66 | 59 |
67 private: | 60 private: |
68 int read_pipe_; | 61 int read_pipe_; |
69 int write_pipe_; | 62 int write_pipe_; |
70 | 63 |
71 std::vector<TouchEventParams> dispatched_events_; | |
72 | |
73 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev); | 64 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev); |
74 }; | 65 }; |
75 | 66 |
76 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev(int fd, | 67 class MockDeviceEventDispatcherEvdev : public DeviceEventDispatcherEvdev { |
77 base::FilePath path) | 68 public: |
78 : TouchEventConverterEvdev( | 69 MockDeviceEventDispatcherEvdev( |
79 fd, | 70 const base::Callback<void(const TouchEventParams& params)>& callback) |
80 path, | 71 : callback_(callback) {} |
81 1, | 72 ~MockDeviceEventDispatcherEvdev() {} |
82 INPUT_DEVICE_UNKNOWN, | 73 |
83 base::Bind(&MockTouchEventConverterEvdev::DispatchCallback, | 74 // DeviceEventDispatcherEvdev: |
84 base::Unretained(this))) { | 75 void DispatchKeyEvent(const KeyEventParams& params) override {} |
| 76 void DispatchMouseMoveEvent(const MouseMoveEventParams& params) override {} |
| 77 void DispatchMouseButtonEvent(const MouseButtonEventParams& params) override { |
| 78 } |
| 79 void DispatchMouseWheelEvent(const MouseWheelEventParams& params) override {} |
| 80 void DispatchScrollEvent(const ScrollEventParams& params) override {} |
| 81 void DispatchTouchEvent(const TouchEventParams& params) override { |
| 82 callback_.Run(params); |
| 83 } |
| 84 |
| 85 private: |
| 86 base::Callback<void(const TouchEventParams& params)> callback_; |
| 87 }; |
| 88 |
| 89 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev( |
| 90 int fd, |
| 91 base::FilePath path, |
| 92 DeviceEventDispatcherEvdev* dispatcher) |
| 93 : TouchEventConverterEvdev(fd, path, 1, INPUT_DEVICE_UNKNOWN, dispatcher) { |
85 pressure_min_ = 30; | 94 pressure_min_ = 30; |
86 pressure_max_ = 60; | 95 pressure_max_ = 60; |
87 | 96 |
88 // TODO(rjkroege): Check test axes. | 97 // TODO(rjkroege): Check test axes. |
89 x_min_tuxels_ = 0; | 98 x_min_tuxels_ = 0; |
90 x_num_tuxels_ = std::numeric_limits<int>::max(); | 99 x_num_tuxels_ = std::numeric_limits<int>::max(); |
91 y_min_tuxels_ = 0; | 100 y_min_tuxels_ = 0; |
92 y_num_tuxels_ = std::numeric_limits<int>::max(); | 101 y_num_tuxels_ = std::numeric_limits<int>::max(); |
93 | 102 |
94 int fds[2]; | 103 int fds[2]; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 // Set up pipe to satisfy message pump (unused). | 136 // Set up pipe to satisfy message pump (unused). |
128 int evdev_io[2]; | 137 int evdev_io[2]; |
129 if (pipe(evdev_io)) | 138 if (pipe(evdev_io)) |
130 PLOG(FATAL) << "failed pipe"; | 139 PLOG(FATAL) << "failed pipe"; |
131 events_in_ = evdev_io[0]; | 140 events_in_ = evdev_io[0]; |
132 events_out_ = evdev_io[1]; | 141 events_out_ = evdev_io[1]; |
133 | 142 |
134 // Device creation happens on a worker thread since it may involve blocking | 143 // Device creation happens on a worker thread since it may involve blocking |
135 // operations. Simulate that by creating it before creating a UI message | 144 // operations. Simulate that by creating it before creating a UI message |
136 // loop. | 145 // loop. |
| 146 dispatcher_.reset(new ui::MockDeviceEventDispatcherEvdev( |
| 147 base::Bind(&TouchEventConverterEvdevTest::DispatchCallback, |
| 148 base::Unretained(this)))); |
137 device_ = new ui::MockTouchEventConverterEvdev( | 149 device_ = new ui::MockTouchEventConverterEvdev( |
138 events_in_, base::FilePath(kTestDevicePath)); | 150 events_in_, base::FilePath(kTestDevicePath), dispatcher_.get()); |
139 loop_ = new base::MessageLoopForUI; | 151 loop_ = new base::MessageLoopForUI; |
140 | 152 |
141 ui::DeviceDataManager::CreateInstance(); | 153 ui::DeviceDataManager::CreateInstance(); |
142 } | 154 } |
143 | 155 |
144 void TearDown() override { | 156 void TearDown() override { |
145 delete device_; | 157 delete device_; |
146 delete loop_; | 158 delete loop_; |
147 } | 159 } |
148 | 160 |
149 ui::MockTouchEventConverterEvdev* device() { return device_; } | 161 ui::MockTouchEventConverterEvdev* device() { return device_; } |
150 | 162 |
| 163 unsigned size() { return dispatched_events_.size(); } |
| 164 const ui::TouchEventParams& dispatched_event(unsigned index) { |
| 165 DCHECK_GT(dispatched_events_.size(), index); |
| 166 return dispatched_events_[index]; |
| 167 } |
| 168 |
151 private: | 169 private: |
152 base::MessageLoop* loop_; | 170 base::MessageLoop* loop_; |
153 ui::MockTouchEventConverterEvdev* device_; | 171 ui::MockTouchEventConverterEvdev* device_; |
| 172 scoped_ptr<ui::MockDeviceEventDispatcherEvdev> dispatcher_; |
154 | 173 |
155 int events_out_; | 174 int events_out_; |
156 int events_in_; | 175 int events_in_; |
157 | 176 |
| 177 void DispatchCallback(const ui::TouchEventParams& params) { |
| 178 dispatched_events_.push_back(params); |
| 179 } |
| 180 std::vector<ui::TouchEventParams> dispatched_events_; |
| 181 |
158 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); | 182 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); |
159 }; | 183 }; |
160 | 184 |
161 // TODO(rjkroege): Test for valid handling of time stamps. | 185 // TODO(rjkroege): Test for valid handling of time stamps. |
162 TEST_F(TouchEventConverterEvdevTest, TouchDown) { | 186 TEST_F(TouchEventConverterEvdevTest, TouchDown) { |
163 ui::MockTouchEventConverterEvdev* dev = device(); | 187 ui::MockTouchEventConverterEvdev* dev = device(); |
164 | 188 |
165 struct input_event mock_kernel_queue[] = { | 189 struct input_event mock_kernel_queue[] = { |
166 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 190 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
167 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 191 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
168 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 192 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
169 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 193 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
170 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 194 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
171 }; | 195 }; |
172 | 196 |
173 dev->ConfigureReadMock(mock_kernel_queue, 1, 0); | 197 dev->ConfigureReadMock(mock_kernel_queue, 1, 0); |
174 dev->ReadNow(); | 198 dev->ReadNow(); |
175 EXPECT_EQ(0u, dev->size()); | 199 EXPECT_EQ(0u, size()); |
176 | 200 |
177 dev->ConfigureReadMock(mock_kernel_queue, 2, 1); | 201 dev->ConfigureReadMock(mock_kernel_queue, 2, 1); |
178 dev->ReadNow(); | 202 dev->ReadNow(); |
179 EXPECT_EQ(0u, dev->size()); | 203 EXPECT_EQ(0u, size()); |
180 | 204 |
181 dev->ConfigureReadMock(mock_kernel_queue, 3, 3); | 205 dev->ConfigureReadMock(mock_kernel_queue, 3, 3); |
182 dev->ReadNow(); | 206 dev->ReadNow(); |
183 EXPECT_EQ(1u, dev->size()); | 207 EXPECT_EQ(1u, size()); |
184 | 208 |
185 ui::TouchEventParams event = dev->event(0); | 209 ui::TouchEventParams event = dispatched_event(0); |
186 | 210 |
187 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); | 211 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); |
188 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 212 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
189 EXPECT_EQ(42, event.location.x()); | 213 EXPECT_EQ(42, event.location.x()); |
190 EXPECT_EQ(51, event.location.y()); | 214 EXPECT_EQ(51, event.location.y()); |
191 EXPECT_EQ(0, event.touch_id); | 215 EXPECT_EQ(0, event.touch_id); |
192 EXPECT_FLOAT_EQ(1.5f, event.radii.x()); | 216 EXPECT_FLOAT_EQ(1.5f, event.radii.x()); |
193 EXPECT_FLOAT_EQ(.5f, event.pressure); | 217 EXPECT_FLOAT_EQ(.5f, event.pressure); |
194 } | 218 } |
195 | 219 |
196 TEST_F(TouchEventConverterEvdevTest, NoEvents) { | 220 TEST_F(TouchEventConverterEvdevTest, NoEvents) { |
197 ui::MockTouchEventConverterEvdev* dev = device(); | 221 ui::MockTouchEventConverterEvdev* dev = device(); |
198 dev->ConfigureReadMock(NULL, 0, 0); | 222 dev->ConfigureReadMock(NULL, 0, 0); |
199 EXPECT_EQ(0u, dev->size()); | 223 EXPECT_EQ(0u, size()); |
200 } | 224 } |
201 | 225 |
202 TEST_F(TouchEventConverterEvdevTest, TouchMove) { | 226 TEST_F(TouchEventConverterEvdevTest, TouchMove) { |
203 ui::MockTouchEventConverterEvdev* dev = device(); | 227 ui::MockTouchEventConverterEvdev* dev = device(); |
204 | 228 |
205 struct input_event mock_kernel_queue_press[] = { | 229 struct input_event mock_kernel_queue_press[] = { |
206 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 230 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
207 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 231 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
208 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 232 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
209 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 233 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
210 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 234 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
211 }; | 235 }; |
212 | 236 |
213 struct input_event mock_kernel_queue_move1[] = { | 237 struct input_event mock_kernel_queue_move1[] = { |
214 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, | 238 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, |
215 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 239 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
216 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 240 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
217 }; | 241 }; |
218 | 242 |
219 struct input_event mock_kernel_queue_move2[] = { | 243 struct input_event mock_kernel_queue_move2[] = { |
220 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 244 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
221 }; | 245 }; |
222 | 246 |
223 // Setup and discard a press. | 247 // Setup and discard a press. |
224 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); | 248 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); |
225 dev->ReadNow(); | 249 dev->ReadNow(); |
226 EXPECT_EQ(1u, dev->size()); | 250 EXPECT_EQ(1u, size()); |
227 | 251 |
228 dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); | 252 dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); |
229 dev->ReadNow(); | 253 dev->ReadNow(); |
230 EXPECT_EQ(2u, dev->size()); | 254 EXPECT_EQ(2u, size()); |
231 ui::TouchEventParams event = dev->event(1); | 255 ui::TouchEventParams event = dispatched_event(1); |
232 | 256 |
233 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); | 257 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); |
234 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 258 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
235 EXPECT_EQ(42, event.location.x()); | 259 EXPECT_EQ(42, event.location.x()); |
236 EXPECT_EQ(43, event.location.y()); | 260 EXPECT_EQ(43, event.location.y()); |
237 EXPECT_EQ(0, event.touch_id); | 261 EXPECT_EQ(0, event.touch_id); |
238 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); | 262 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); |
239 | 263 |
240 dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0); | 264 dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0); |
241 dev->ReadNow(); | 265 dev->ReadNow(); |
242 EXPECT_EQ(3u, dev->size()); | 266 EXPECT_EQ(3u, size()); |
243 event = dev->event(2); | 267 event = dispatched_event(2); |
244 | 268 |
245 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); | 269 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); |
246 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 270 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
247 EXPECT_EQ(42, event.location.x()); | 271 EXPECT_EQ(42, event.location.x()); |
248 EXPECT_EQ(42, event.location.y()); | 272 EXPECT_EQ(42, event.location.y()); |
249 EXPECT_EQ(0, event.touch_id); | 273 EXPECT_EQ(0, event.touch_id); |
250 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); | 274 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); |
251 } | 275 } |
252 | 276 |
253 TEST_F(TouchEventConverterEvdevTest, TouchRelease) { | 277 TEST_F(TouchEventConverterEvdevTest, TouchRelease) { |
254 ui::MockTouchEventConverterEvdev* dev = device(); | 278 ui::MockTouchEventConverterEvdev* dev = device(); |
255 | 279 |
256 struct input_event mock_kernel_queue_press[] = { | 280 struct input_event mock_kernel_queue_press[] = { |
257 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 281 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
258 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 282 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
259 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 283 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
260 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 284 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
261 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 285 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
262 }; | 286 }; |
263 | 287 |
264 struct input_event mock_kernel_queue_release[] = { | 288 struct input_event mock_kernel_queue_release[] = { |
265 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 289 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
266 }; | 290 }; |
267 | 291 |
268 // Setup and discard a press. | 292 // Setup and discard a press. |
269 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); | 293 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); |
270 dev->ReadNow(); | 294 dev->ReadNow(); |
271 EXPECT_EQ(1u, dev->size()); | 295 EXPECT_EQ(1u, size()); |
272 ui::TouchEventParams event = dev->event(0); | 296 ui::TouchEventParams event = dispatched_event(0); |
273 | 297 |
274 dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0); | 298 dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0); |
275 dev->ReadNow(); | 299 dev->ReadNow(); |
276 EXPECT_EQ(2u, dev->size()); | 300 EXPECT_EQ(2u, size()); |
277 event = dev->event(1); | 301 event = dispatched_event(1); |
278 | 302 |
279 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); | 303 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); |
280 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 304 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
281 EXPECT_EQ(42, event.location.x()); | 305 EXPECT_EQ(42, event.location.x()); |
282 EXPECT_EQ(51, event.location.y()); | 306 EXPECT_EQ(51, event.location.y()); |
283 EXPECT_EQ(0, event.touch_id); | 307 EXPECT_EQ(0, event.touch_id); |
284 EXPECT_FLOAT_EQ(.5f, event.pressure); | 308 EXPECT_FLOAT_EQ(.5f, event.pressure); |
285 } | 309 } |
286 | 310 |
287 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { | 311 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { |
288 ui::MockTouchEventConverterEvdev* dev = device(); | 312 ui::MockTouchEventConverterEvdev* dev = device(); |
289 | 313 |
290 struct input_event mock_kernel_queue_press0[] = { | 314 struct input_event mock_kernel_queue_press0[] = { |
291 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 315 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
292 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 316 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
293 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 317 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
294 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 318 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
295 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 319 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
296 }; | 320 }; |
297 // Setup and discard a press. | 321 // Setup and discard a press. |
298 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); | 322 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); |
299 dev->ReadNow(); | 323 dev->ReadNow(); |
300 EXPECT_EQ(1u, dev->size()); | 324 EXPECT_EQ(1u, size()); |
301 | 325 |
302 struct input_event mock_kernel_queue_move0[] = { | 326 struct input_event mock_kernel_queue_move0[] = { |
303 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 327 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
304 }; | 328 }; |
305 // Setup and discard a move. | 329 // Setup and discard a move. |
306 dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0); | 330 dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0); |
307 dev->ReadNow(); | 331 dev->ReadNow(); |
308 EXPECT_EQ(2u, dev->size()); | 332 EXPECT_EQ(2u, size()); |
309 | 333 |
310 struct input_event mock_kernel_queue_move0press1[] = { | 334 struct input_event mock_kernel_queue_move0press1[] = { |
311 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 335 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
312 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686}, | 336 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686}, |
313 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 337 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
314 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 338 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
315 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101}, | 339 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101}, |
316 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 340 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
317 }; | 341 }; |
318 // Move on 0, press on 1. | 342 // Move on 0, press on 1. |
319 dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0); | 343 dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0); |
320 dev->ReadNow(); | 344 dev->ReadNow(); |
321 EXPECT_EQ(4u, dev->size()); | 345 EXPECT_EQ(4u, size()); |
322 ui::TouchEventParams ev0 = dev->event(2); | 346 ui::TouchEventParams ev0 = dispatched_event(2); |
323 ui::TouchEventParams ev1 = dev->event(3); | 347 ui::TouchEventParams ev1 = dispatched_event(3); |
324 | 348 |
325 // Move | 349 // Move |
326 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 350 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
327 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 351 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
328 EXPECT_EQ(40, ev0.location.x()); | 352 EXPECT_EQ(40, ev0.location.x()); |
329 EXPECT_EQ(51, ev0.location.y()); | 353 EXPECT_EQ(51, ev0.location.y()); |
330 EXPECT_EQ(0, ev0.touch_id); | 354 EXPECT_EQ(0, ev0.touch_id); |
331 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 355 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
332 | 356 |
333 // Press | 357 // Press |
334 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); | 358 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); |
335 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 359 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
336 EXPECT_EQ(101, ev1.location.x()); | 360 EXPECT_EQ(101, ev1.location.x()); |
337 EXPECT_EQ(102, ev1.location.y()); | 361 EXPECT_EQ(102, ev1.location.y()); |
338 EXPECT_EQ(1, ev1.touch_id); | 362 EXPECT_EQ(1, ev1.touch_id); |
339 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 363 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
340 | 364 |
341 // Stationary 0, Moves 1. | 365 // Stationary 0, Moves 1. |
342 struct input_event mock_kernel_queue_stationary0_move1[] = { | 366 struct input_event mock_kernel_queue_stationary0_move1[] = { |
343 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 367 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
344 }; | 368 }; |
345 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); | 369 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); |
346 dev->ReadNow(); | 370 dev->ReadNow(); |
347 EXPECT_EQ(5u, dev->size()); | 371 EXPECT_EQ(5u, size()); |
348 ev1 = dev->event(4); | 372 ev1 = dispatched_event(4); |
349 | 373 |
350 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 374 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
351 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 375 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
352 EXPECT_EQ(40, ev1.location.x()); | 376 EXPECT_EQ(40, ev1.location.x()); |
353 EXPECT_EQ(102, ev1.location.y()); | 377 EXPECT_EQ(102, ev1.location.y()); |
354 EXPECT_EQ(1, ev1.touch_id); | 378 EXPECT_EQ(1, ev1.touch_id); |
355 | 379 |
356 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 380 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
357 | 381 |
358 // Move 0, stationary 1. | 382 // Move 0, stationary 1. |
359 struct input_event mock_kernel_queue_move0_stationary1[] = { | 383 struct input_event mock_kernel_queue_move0_stationary1[] = { |
360 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, | 384 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, |
361 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 385 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
362 }; | 386 }; |
363 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); | 387 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); |
364 dev->ReadNow(); | 388 dev->ReadNow(); |
365 EXPECT_EQ(6u, dev->size()); | 389 EXPECT_EQ(6u, size()); |
366 ev0 = dev->event(5); | 390 ev0 = dispatched_event(5); |
367 | 391 |
368 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 392 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
369 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 393 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
370 EXPECT_EQ(39, ev0.location.x()); | 394 EXPECT_EQ(39, ev0.location.x()); |
371 EXPECT_EQ(51, ev0.location.y()); | 395 EXPECT_EQ(51, ev0.location.y()); |
372 EXPECT_EQ(0, ev0.touch_id); | 396 EXPECT_EQ(0, ev0.touch_id); |
373 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 397 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
374 | 398 |
375 // Release 0, move 1. | 399 // Release 0, move 1. |
376 struct input_event mock_kernel_queue_release0_move1[] = { | 400 struct input_event mock_kernel_queue_release0_move1[] = { |
377 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, | 401 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, |
378 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 402 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
379 }; | 403 }; |
380 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); | 404 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); |
381 dev->ReadNow(); | 405 dev->ReadNow(); |
382 EXPECT_EQ(8u, dev->size()); | 406 EXPECT_EQ(8u, size()); |
383 ev0 = dev->event(6); | 407 ev0 = dispatched_event(6); |
384 ev1 = dev->event(7); | 408 ev1 = dispatched_event(7); |
385 | 409 |
386 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); | 410 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); |
387 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 411 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
388 EXPECT_EQ(39, ev0.location.x()); | 412 EXPECT_EQ(39, ev0.location.x()); |
389 EXPECT_EQ(51, ev0.location.y()); | 413 EXPECT_EQ(51, ev0.location.y()); |
390 EXPECT_EQ(0, ev0.touch_id); | 414 EXPECT_EQ(0, ev0.touch_id); |
391 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 415 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
392 | 416 |
393 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 417 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
394 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 418 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
395 EXPECT_EQ(38, ev1.location.x()); | 419 EXPECT_EQ(38, ev1.location.x()); |
396 EXPECT_EQ(102, ev1.location.y()); | 420 EXPECT_EQ(102, ev1.location.y()); |
397 EXPECT_EQ(1, ev1.touch_id); | 421 EXPECT_EQ(1, ev1.touch_id); |
398 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 422 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
399 | 423 |
400 // Release 1. | 424 // Release 1. |
401 struct input_event mock_kernel_queue_release1[] = { | 425 struct input_event mock_kernel_queue_release1[] = { |
402 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 426 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
403 }; | 427 }; |
404 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); | 428 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); |
405 dev->ReadNow(); | 429 dev->ReadNow(); |
406 EXPECT_EQ(9u, dev->size()); | 430 EXPECT_EQ(9u, size()); |
407 ev1 = dev->event(8); | 431 ev1 = dispatched_event(8); |
408 | 432 |
409 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); | 433 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); |
410 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 434 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
411 EXPECT_EQ(38, ev1.location.x()); | 435 EXPECT_EQ(38, ev1.location.x()); |
412 EXPECT_EQ(102, ev1.location.y()); | 436 EXPECT_EQ(102, ev1.location.y()); |
413 EXPECT_EQ(1, ev1.touch_id); | 437 EXPECT_EQ(1, ev1.touch_id); |
414 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 438 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
415 } | 439 } |
416 | 440 |
417 TEST_F(TouchEventConverterEvdevTest, TypeA) { | 441 TEST_F(TouchEventConverterEvdevTest, TypeA) { |
418 ui::MockTouchEventConverterEvdev* dev = device(); | 442 ui::MockTouchEventConverterEvdev* dev = device(); |
419 | 443 |
420 struct input_event mock_kernel_queue_press0[] = { | 444 struct input_event mock_kernel_queue_press0[] = { |
421 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 445 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
422 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 446 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
423 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 447 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
424 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, | 448 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, |
425 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, | 449 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, |
426 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 450 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
427 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 61}, | 451 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 61}, |
428 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 71}, | 452 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 71}, |
429 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, | 453 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, |
430 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 454 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
431 }; | 455 }; |
432 | 456 |
433 // Check that two events are generated. | 457 // Check that two events are generated. |
434 dev->ConfigureReadMock(mock_kernel_queue_press0, 10, 0); | 458 dev->ConfigureReadMock(mock_kernel_queue_press0, 10, 0); |
435 dev->ReadNow(); | 459 dev->ReadNow(); |
436 EXPECT_EQ(2u, dev->size()); | 460 EXPECT_EQ(2u, size()); |
437 } | 461 } |
438 | 462 |
439 TEST_F(TouchEventConverterEvdevTest, Unsync) { | 463 TEST_F(TouchEventConverterEvdevTest, Unsync) { |
440 ui::MockTouchEventConverterEvdev* dev = device(); | 464 ui::MockTouchEventConverterEvdev* dev = device(); |
441 | 465 |
442 struct input_event mock_kernel_queue_press0[] = { | 466 struct input_event mock_kernel_queue_press0[] = { |
443 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 467 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
444 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 468 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
445 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 469 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
446 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 470 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
447 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 471 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
448 }; | 472 }; |
449 | 473 |
450 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); | 474 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); |
451 dev->ReadNow(); | 475 dev->ReadNow(); |
452 EXPECT_EQ(1u, dev->size()); | 476 EXPECT_EQ(1u, size()); |
453 | 477 |
454 // Prepare a move with a drop. | 478 // Prepare a move with a drop. |
455 struct input_event mock_kernel_queue_move0[] = { | 479 struct input_event mock_kernel_queue_move0[] = { |
456 {{0, 0}, EV_SYN, SYN_DROPPED, 0}, | 480 {{0, 0}, EV_SYN, SYN_DROPPED, 0}, |
457 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 481 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
458 }; | 482 }; |
459 | 483 |
460 // Verify that we didn't receive it/ | 484 // Verify that we didn't receive it/ |
461 dev->ConfigureReadMock(mock_kernel_queue_move0, 3, 0); | 485 dev->ConfigureReadMock(mock_kernel_queue_move0, 3, 0); |
462 dev->ReadNow(); | 486 dev->ReadNow(); |
463 EXPECT_EQ(1u, dev->size()); | 487 EXPECT_EQ(1u, size()); |
464 | 488 |
465 struct input_event mock_kernel_queue_move1[] = { | 489 struct input_event mock_kernel_queue_move1[] = { |
466 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 490 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
467 }; | 491 }; |
468 | 492 |
469 // Verify that it re-syncs after a SYN_REPORT. | 493 // Verify that it re-syncs after a SYN_REPORT. |
470 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0); | 494 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0); |
471 dev->ReadNow(); | 495 dev->ReadNow(); |
472 EXPECT_EQ(2u, dev->size()); | 496 EXPECT_EQ(2u, size()); |
473 } | 497 } |
474 | 498 |
475 // crbug.com/407386 | 499 // crbug.com/407386 |
476 TEST_F(TouchEventConverterEvdevTest, | 500 TEST_F(TouchEventConverterEvdevTest, |
477 DontChangeMultitouchPositionFromLegacyAxes) { | 501 DontChangeMultitouchPositionFromLegacyAxes) { |
478 ui::MockTouchEventConverterEvdev* dev = device(); | 502 ui::MockTouchEventConverterEvdev* dev = device(); |
479 | 503 |
480 struct input_event mock_kernel_queue[] = { | 504 struct input_event mock_kernel_queue[] = { |
481 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, | 505 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, |
482 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, | 506 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, |
483 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, | 507 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, |
484 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, | 508 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, |
485 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, | 509 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, |
486 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, | 510 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, |
487 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, | 511 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, |
488 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, | 512 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, |
489 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, | 513 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, |
490 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, | 514 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, |
491 {{0, 0}, EV_ABS, ABS_X, 999}, | 515 {{0, 0}, EV_ABS, ABS_X, 999}, |
492 {{0, 0}, EV_ABS, ABS_Y, 888}, | 516 {{0, 0}, EV_ABS, ABS_Y, 888}, |
493 {{0, 0}, EV_ABS, ABS_PRESSURE, 55}, | 517 {{0, 0}, EV_ABS, ABS_PRESSURE, 55}, |
494 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 518 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
495 }; | 519 }; |
496 | 520 |
497 // Check that two events are generated. | 521 // Check that two events are generated. |
498 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 522 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
499 dev->ReadNow(); | 523 dev->ReadNow(); |
500 | 524 |
501 const unsigned int kExpectedEventCount = 2; | 525 const unsigned int kExpectedEventCount = 2; |
502 EXPECT_EQ(kExpectedEventCount, dev->size()); | 526 EXPECT_EQ(kExpectedEventCount, size()); |
503 if (kExpectedEventCount != dev->size()) | 527 if (kExpectedEventCount != size()) |
504 return; | 528 return; |
505 | 529 |
506 ui::TouchEventParams ev0 = dev->event(0); | 530 ui::TouchEventParams ev0 = dispatched_event(0); |
507 ui::TouchEventParams ev1 = dev->event(1); | 531 ui::TouchEventParams ev1 = dispatched_event(1); |
508 | 532 |
509 EXPECT_EQ(0, ev0.touch_id); | 533 EXPECT_EQ(0, ev0.touch_id); |
510 EXPECT_EQ(999, ev0.location.x()); | 534 EXPECT_EQ(999, ev0.location.x()); |
511 EXPECT_EQ(888, ev0.location.y()); | 535 EXPECT_EQ(888, ev0.location.y()); |
512 EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure); | 536 EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure); |
513 | 537 |
514 EXPECT_EQ(1, ev1.touch_id); | 538 EXPECT_EQ(1, ev1.touch_id); |
515 EXPECT_EQ(777, ev1.location.x()); | 539 EXPECT_EQ(777, ev1.location.x()); |
516 EXPECT_EQ(666, ev1.location.y()); | 540 EXPECT_EQ(666, ev1.location.y()); |
517 EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure); | 541 EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure); |
(...skipping 11 matching lines...) Expand all Loading... |
529 {{0, 0}, EV_ABS, ABS_MT_SLOT, ui::TouchEventConverterEvdev::MAX_FINGERS}, | 553 {{0, 0}, EV_ABS, ABS_MT_SLOT, ui::TouchEventConverterEvdev::MAX_FINGERS}, |
530 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, | 554 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, |
531 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, | 555 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, |
532 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, | 556 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, |
533 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 557 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
534 }; | 558 }; |
535 | 559 |
536 // Check that one 1 event is generated | 560 // Check that one 1 event is generated |
537 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 561 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
538 dev->ReadNow(); | 562 dev->ReadNow(); |
539 EXPECT_EQ(1u, dev->size()); | 563 EXPECT_EQ(1u, size()); |
540 } | 564 } |
OLD | NEW |