Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc

Issue 1019803006: ozone: evdev: Use real initializer MockTouchEventConverterEvdev (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove stray event Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/command_line.h" 13 #include "base/command_line.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/scoped_vector.h" 15 #include "base/memory/scoped_vector.h"
16 #include "base/posix/eintr_wrapper.h" 16 #include "base/posix/eintr_wrapper.h"
17 #include "base/run_loop.h" 17 #include "base/run_loop.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 #include "ui/events/devices/device_data_manager.h" 20 #include "ui/events/devices/device_data_manager.h"
21 #include "ui/events/event_switches.h" 21 #include "ui/events/event_switches.h"
22 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" 22 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h"
23 #include "ui/events/ozone/evdev/event_device_test_util.h"
23 #include "ui/events/ozone/evdev/touch_evdev_types.h" 24 #include "ui/events/ozone/evdev/touch_evdev_types.h"
24 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" 25 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h"
25 #include "ui/events/ozone/evdev/touch_noise/touch_noise_filter.h" 26 #include "ui/events/ozone/evdev/touch_noise/touch_noise_filter.h"
26 #include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h" 27 #include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h"
27 #include "ui/events/platform/platform_event_dispatcher.h" 28 #include "ui/events/platform/platform_event_dispatcher.h"
28 #include "ui/events/platform/platform_event_source.h" 29 #include "ui/events/platform/platform_event_source.h"
29 30
30 namespace ui { 31 namespace ui {
31 32
32 namespace { 33 namespace {
33 34
34 static int SetNonBlocking(int fd) { 35 static int SetNonBlocking(int fd) {
35 int flags = fcntl(fd, F_GETFL, 0); 36 int flags = fcntl(fd, F_GETFL, 0);
36 if (flags == -1) 37 if (flags == -1)
37 flags = 0; 38 flags = 0;
38 return fcntl(fd, F_SETFL, flags | O_NONBLOCK); 39 return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
39 } 40 }
40 41
41 const char kTestDevicePath[] = "/dev/input/test-device"; 42 const char kTestDevicePath[] = "/dev/input/test-device";
42 43
44 void InitPixelTouchscreen(TouchEventConverterEvdev* device) {
45 EventDeviceInfo devinfo;
46 EXPECT_TRUE(CapabilitiesToDeviceInfo(kLinkTouchscreen, &devinfo));
47 device->Initialize(devinfo);
48 }
49
43 } // namespace 50 } // namespace
44 51
45 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev { 52 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev {
46 public: 53 public:
47 MockTouchEventConverterEvdev(int fd, 54 MockTouchEventConverterEvdev(int fd,
48 base::FilePath path, 55 base::FilePath path,
49 DeviceEventDispatcherEvdev* dispatcher); 56 DeviceEventDispatcherEvdev* dispatcher);
50 ~MockTouchEventConverterEvdev() override {} 57 ~MockTouchEventConverterEvdev() override {}
51 58
52 void ConfigureReadMock(struct input_event* queue, 59 void ConfigureReadMock(struct input_event* queue,
53 long read_this_many, 60 long read_this_many,
54 long queue_index); 61 long queue_index);
55 62
56 // Actually dispatch the event reader code. 63 // Actually dispatch the event reader code.
57 void ReadNow() { 64 void ReadNow() {
58 OnFileCanReadWithoutBlocking(read_pipe_); 65 OnFileCanReadWithoutBlocking(read_pipe_);
59 base::RunLoop().RunUntilIdle(); 66 base::RunLoop().RunUntilIdle();
60 } 67 }
61 68
62 void Initialize(const EventDeviceInfo& device_info) override {}
63 bool Reinitialize() override { return true; } 69 bool Reinitialize() override { return true; }
64 70
65 TouchNoiseFinder* touch_noise_finder() { return touch_noise_finder_.get(); } 71 TouchNoiseFinder* touch_noise_finder() { return touch_noise_finder_.get(); }
66 72
67 private: 73 private:
68 int read_pipe_; 74 int read_pipe_;
69 int write_pipe_; 75 int write_pipe_;
70 76
71 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev); 77 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev);
72 }; 78 };
(...skipping 27 matching lines...) Expand all
100 106
101 private: 107 private:
102 base::Callback<void(const TouchEventParams& params)> callback_; 108 base::Callback<void(const TouchEventParams& params)> callback_;
103 }; 109 };
104 110
105 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev( 111 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev(
106 int fd, 112 int fd,
107 base::FilePath path, 113 base::FilePath path,
108 DeviceEventDispatcherEvdev* dispatcher) 114 DeviceEventDispatcherEvdev* dispatcher)
109 : TouchEventConverterEvdev(fd, path, 1, INPUT_DEVICE_UNKNOWN, dispatcher) { 115 : TouchEventConverterEvdev(fd, path, 1, INPUT_DEVICE_UNKNOWN, dispatcher) {
110 pressure_min_ = 30;
111 pressure_max_ = 60;
112
113 // TODO(rjkroege): Check test axes.
114 x_min_tuxels_ = 0;
115 x_num_tuxels_ = std::numeric_limits<int>::max();
116 y_min_tuxels_ = 0;
117 y_num_tuxels_ = std::numeric_limits<int>::max();
118
119 int fds[2]; 116 int fds[2];
120 117
121 if (pipe(fds)) 118 if (pipe(fds))
122 PLOG(FATAL) << "failed pipe"; 119 PLOG(FATAL) << "failed pipe";
123 120
124 EXPECT_FALSE(SetNonBlocking(fds[0]) || SetNonBlocking(fds[1])) 121 EXPECT_FALSE(SetNonBlocking(fds[0]) || SetNonBlocking(fds[1]))
125 << "failed to set non-blocking: " << strerror(errno); 122 << "failed to set non-blocking: " << strerror(errno);
126 123
127 read_pipe_ = fds[0]; 124 read_pipe_ = fds[0];
128 write_pipe_ = fds[1]; 125 write_pipe_ = fds[1];
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 int events_in_; 193 int events_in_;
197 194
198 void DispatchCallback(const ui::TouchEventParams& params) { 195 void DispatchCallback(const ui::TouchEventParams& params) {
199 dispatched_events_.push_back(params); 196 dispatched_events_.push_back(params);
200 } 197 }
201 std::vector<ui::TouchEventParams> dispatched_events_; 198 std::vector<ui::TouchEventParams> dispatched_events_;
202 199
203 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); 200 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest);
204 }; 201 };
205 202
206 // TODO(rjkroege): Test for valid handling of time stamps.
207 TEST_F(TouchEventConverterEvdevTest, TouchDown) {
208 ui::MockTouchEventConverterEvdev* dev = device();
209
210 struct input_event mock_kernel_queue[] = {
211 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
212 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
213 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
214 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
215 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
216 };
217
218 dev->ConfigureReadMock(mock_kernel_queue, 1, 0);
219 dev->ReadNow();
220 EXPECT_EQ(0u, size());
221
222 dev->ConfigureReadMock(mock_kernel_queue, 2, 1);
223 dev->ReadNow();
224 EXPECT_EQ(0u, size());
225
226 dev->ConfigureReadMock(mock_kernel_queue, 3, 3);
227 dev->ReadNow();
228 EXPECT_EQ(1u, size());
229
230 ui::TouchEventParams event = dispatched_event(0);
231
232 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type);
233 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
234 EXPECT_EQ(42, event.location.x());
235 EXPECT_EQ(51, event.location.y());
236 EXPECT_EQ(0, event.touch_id);
237 EXPECT_FLOAT_EQ(1.5f, event.radii.x());
238 EXPECT_FLOAT_EQ(.5f, event.pressure);
239 }
240
241 TEST_F(TouchEventConverterEvdevTest, NoEvents) { 203 TEST_F(TouchEventConverterEvdevTest, NoEvents) {
242 ui::MockTouchEventConverterEvdev* dev = device(); 204 ui::MockTouchEventConverterEvdev* dev = device();
243 dev->ConfigureReadMock(NULL, 0, 0); 205 dev->ConfigureReadMock(NULL, 0, 0);
244 EXPECT_EQ(0u, size()); 206 EXPECT_EQ(0u, size());
245 } 207 }
246 208
247 TEST_F(TouchEventConverterEvdevTest, TouchMove) { 209 TEST_F(TouchEventConverterEvdevTest, TouchMove) {
248 ui::MockTouchEventConverterEvdev* dev = device(); 210 ui::MockTouchEventConverterEvdev* dev = device();
249 211
212 InitPixelTouchscreen(dev);
213
214 // Captured from Chromebook Pixel (Link).
215 timeval time;
216 time = {1427323282, 19203};
250 struct input_event mock_kernel_queue_press[] = { 217 struct input_event mock_kernel_queue_press[] = {
251 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 218 {time, EV_ABS, ABS_MT_TRACKING_ID, 3},
252 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 219 {time, EV_ABS, ABS_MT_POSITION_X, 295},
253 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 220 {time, EV_ABS, ABS_MT_POSITION_Y, 421},
254 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 221 {time, EV_ABS, ABS_MT_PRESSURE, 34},
255 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 222 {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 116},
223 {time, EV_KEY, BTN_TOUCH, 1},
224 {time, EV_ABS, ABS_X, 295},
225 {time, EV_ABS, ABS_Y, 421},
226 {time, EV_ABS, ABS_PRESSURE, 34},
227 {time, EV_SYN, SYN_REPORT, 0},
228 };
229 time = {1427323282, 34693};
230 struct input_event mock_kernel_queue_move[] = {
231 {time, EV_ABS, ABS_MT_POSITION_X, 312},
232 {time, EV_ABS, ABS_MT_POSITION_Y, 432},
233 {time, EV_ABS, ABS_MT_PRESSURE, 43},
234 {time, EV_ABS, ABS_MT_TOUCH_MAJOR, 100},
235 {time, EV_ABS, ABS_X, 312},
236 {time, EV_ABS, ABS_Y, 432},
237 {time, EV_ABS, ABS_PRESSURE, 43},
238 {time, EV_SYN, SYN_REPORT, 0},
239 };
240 time = {1427323282, 144540};
241 struct input_event mock_kernel_queue_release[] = {
242 {time, EV_ABS, ABS_MT_TRACKING_ID, -1},
243 {time, EV_KEY, BTN_TOUCH, 0},
244 {time, EV_ABS, ABS_PRESSURE, 0},
245 {time, EV_SYN, SYN_REPORT, 0},
256 }; 246 };
257 247
258 struct input_event mock_kernel_queue_move1[] = { 248 // Press.
259 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, 249 dev->ConfigureReadMock(mock_kernel_queue_press,
260 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 250 arraysize(mock_kernel_queue_press), 0);
261 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
262 };
263
264 struct input_event mock_kernel_queue_move2[] = {
265 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
266 };
267
268 // Setup and discard a press.
269 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
270 dev->ReadNow(); 251 dev->ReadNow();
271 EXPECT_EQ(1u, size()); 252 EXPECT_EQ(1u, size());
253 ui::TouchEventParams event = dispatched_event(0);
254 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type);
255 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282019203),
256 event.timestamp);
257 EXPECT_EQ(295, event.location.x());
258 EXPECT_EQ(421, event.location.y());
259 EXPECT_EQ(0, event.touch_id);
260 EXPECT_FLOAT_EQ(58.f, event.radii.x());
261 EXPECT_FLOAT_EQ(0.13333334f, event.pressure);
272 262
273 dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); 263 // Move.
264 dev->ConfigureReadMock(mock_kernel_queue_move,
265 arraysize(mock_kernel_queue_move), 0);
274 dev->ReadNow(); 266 dev->ReadNow();
275 EXPECT_EQ(2u, size()); 267 EXPECT_EQ(2u, size());
276 ui::TouchEventParams event = dispatched_event(1); 268 event = dispatched_event(1);
269 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type);
270 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282034693),
271 event.timestamp);
272 EXPECT_EQ(312, event.location.x());
273 EXPECT_EQ(432, event.location.y());
274 EXPECT_EQ(0, event.touch_id);
275 EXPECT_FLOAT_EQ(50.f, event.radii.x());
276 EXPECT_FLOAT_EQ(0.16862745f, event.pressure);
277 277
278 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); 278 // Release.
279 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); 279 dev->ConfigureReadMock(mock_kernel_queue_release,
280 EXPECT_EQ(42, event.location.x()); 280 arraysize(mock_kernel_queue_release), 0);
281 EXPECT_EQ(43, event.location.y());
282 EXPECT_EQ(0, event.touch_id);
283 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure);
284
285 dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0);
286 dev->ReadNow(); 281 dev->ReadNow();
287 EXPECT_EQ(3u, size()); 282 EXPECT_EQ(3u, size());
288 event = dispatched_event(2); 283 event = dispatched_event(2);
289 284 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type);
290 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); 285 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282144540),
291 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); 286 event.timestamp);
292 EXPECT_EQ(42, event.location.x()); 287 EXPECT_EQ(312, event.location.x());
293 EXPECT_EQ(42, event.location.y()); 288 EXPECT_EQ(432, event.location.y());
294 EXPECT_EQ(0, event.touch_id); 289 EXPECT_EQ(0, event.touch_id);
295 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); 290 EXPECT_FLOAT_EQ(50.f, event.radii.x());
296 } 291 EXPECT_FLOAT_EQ(0.16862745f, event.pressure);
297
298 TEST_F(TouchEventConverterEvdevTest, TouchRelease) {
299 ui::MockTouchEventConverterEvdev* dev = device();
300
301 struct input_event mock_kernel_queue_press[] = {
302 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
303 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
304 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
305 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
306 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
307 };
308
309 struct input_event mock_kernel_queue_release[] = {
310 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
311 };
312
313 // Setup and discard a press.
314 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0);
315 dev->ReadNow();
316 EXPECT_EQ(1u, size());
317 ui::TouchEventParams event = dispatched_event(0);
318
319 dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0);
320 dev->ReadNow();
321 EXPECT_EQ(2u, size());
322 event = dispatched_event(1);
323
324 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type);
325 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp);
326 EXPECT_EQ(42, event.location.x());
327 EXPECT_EQ(51, event.location.y());
328 EXPECT_EQ(0, event.touch_id);
329 EXPECT_FLOAT_EQ(.5f, event.pressure);
330 } 292 }
331 293
332 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { 294 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) {
333 ui::MockTouchEventConverterEvdev* dev = device(); 295 ui::MockTouchEventConverterEvdev* dev = device();
334 296
297 InitPixelTouchscreen(dev);
298
335 struct input_event mock_kernel_queue_press0[] = { 299 struct input_event mock_kernel_queue_press0[] = {
336 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 300 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
337 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 301 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
338 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 302 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
339 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 303 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
340 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 304 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
341 }; 305 };
342 // Setup and discard a press. 306 // Setup and discard a press.
343 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); 307 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0);
344 dev->ReadNow(); 308 dev->ReadNow();
(...skipping 21 matching lines...) Expand all
366 EXPECT_EQ(4u, size()); 330 EXPECT_EQ(4u, size());
367 ui::TouchEventParams ev0 = dispatched_event(2); 331 ui::TouchEventParams ev0 = dispatched_event(2);
368 ui::TouchEventParams ev1 = dispatched_event(3); 332 ui::TouchEventParams ev1 = dispatched_event(3);
369 333
370 // Move 334 // Move
371 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); 335 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type);
372 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); 336 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp);
373 EXPECT_EQ(40, ev0.location.x()); 337 EXPECT_EQ(40, ev0.location.x());
374 EXPECT_EQ(51, ev0.location.y()); 338 EXPECT_EQ(51, ev0.location.y());
375 EXPECT_EQ(0, ev0.touch_id); 339 EXPECT_EQ(0, ev0.touch_id);
376 EXPECT_FLOAT_EQ(.5f, ev0.pressure); 340 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
377 341
378 // Press 342 // Press
379 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); 343 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type);
380 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); 344 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp);
381 EXPECT_EQ(101, ev1.location.x()); 345 EXPECT_EQ(101, ev1.location.x());
382 EXPECT_EQ(102, ev1.location.y()); 346 EXPECT_EQ(102, ev1.location.y());
383 EXPECT_EQ(1, ev1.touch_id); 347 EXPECT_EQ(1, ev1.touch_id);
384 EXPECT_FLOAT_EQ(.5f, ev1.pressure); 348 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
385 349
386 // Stationary 0, Moves 1. 350 // Stationary 0, Moves 1.
387 struct input_event mock_kernel_queue_stationary0_move1[] = { 351 struct input_event mock_kernel_queue_stationary0_move1[] = {
388 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 352 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
389 }; 353 };
390 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); 354 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0);
391 dev->ReadNow(); 355 dev->ReadNow();
392 EXPECT_EQ(5u, size()); 356 EXPECT_EQ(5u, size());
393 ev1 = dispatched_event(4); 357 ev1 = dispatched_event(4);
394 358
395 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); 359 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type);
396 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); 360 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp);
397 EXPECT_EQ(40, ev1.location.x()); 361 EXPECT_EQ(40, ev1.location.x());
398 EXPECT_EQ(102, ev1.location.y()); 362 EXPECT_EQ(102, ev1.location.y());
399 EXPECT_EQ(1, ev1.touch_id); 363 EXPECT_EQ(1, ev1.touch_id);
400 364 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
401 EXPECT_FLOAT_EQ(.5f, ev1.pressure);
402 365
403 // Move 0, stationary 1. 366 // Move 0, stationary 1.
404 struct input_event mock_kernel_queue_move0_stationary1[] = { 367 struct input_event mock_kernel_queue_move0_stationary1[] = {
405 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, 368 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39},
406 {{0, 0}, EV_SYN, SYN_REPORT, 0} 369 {{0, 0}, EV_SYN, SYN_REPORT, 0}
407 }; 370 };
408 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); 371 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0);
409 dev->ReadNow(); 372 dev->ReadNow();
410 EXPECT_EQ(6u, size()); 373 EXPECT_EQ(6u, size());
411 ev0 = dispatched_event(5); 374 ev0 = dispatched_event(5);
412 375
413 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); 376 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type);
414 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); 377 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp);
415 EXPECT_EQ(39, ev0.location.x()); 378 EXPECT_EQ(39, ev0.location.x());
416 EXPECT_EQ(51, ev0.location.y()); 379 EXPECT_EQ(51, ev0.location.y());
417 EXPECT_EQ(0, ev0.touch_id); 380 EXPECT_EQ(0, ev0.touch_id);
418 EXPECT_FLOAT_EQ(.5f, ev0.pressure); 381 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
419 382
420 // Release 0, move 1. 383 // Release 0, move 1.
421 struct input_event mock_kernel_queue_release0_move1[] = { 384 struct input_event mock_kernel_queue_release0_move1[] = {
422 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, 385 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1},
423 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 386 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
424 }; 387 };
425 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); 388 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0);
426 dev->ReadNow(); 389 dev->ReadNow();
427 EXPECT_EQ(8u, size()); 390 EXPECT_EQ(8u, size());
428 ev0 = dispatched_event(6); 391 ev0 = dispatched_event(6);
429 ev1 = dispatched_event(7); 392 ev1 = dispatched_event(7);
430 393
431 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); 394 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type);
432 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); 395 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp);
433 EXPECT_EQ(39, ev0.location.x()); 396 EXPECT_EQ(39, ev0.location.x());
434 EXPECT_EQ(51, ev0.location.y()); 397 EXPECT_EQ(51, ev0.location.y());
435 EXPECT_EQ(0, ev0.touch_id); 398 EXPECT_EQ(0, ev0.touch_id);
436 EXPECT_FLOAT_EQ(.5f, ev0.pressure); 399 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure);
437 400
438 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); 401 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type);
439 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); 402 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp);
440 EXPECT_EQ(38, ev1.location.x()); 403 EXPECT_EQ(38, ev1.location.x());
441 EXPECT_EQ(102, ev1.location.y()); 404 EXPECT_EQ(102, ev1.location.y());
442 EXPECT_EQ(1, ev1.touch_id); 405 EXPECT_EQ(1, ev1.touch_id);
443 EXPECT_FLOAT_EQ(.5f, ev1.pressure); 406 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
444 407
445 // Release 1. 408 // Release 1.
446 struct input_event mock_kernel_queue_release1[] = { 409 struct input_event mock_kernel_queue_release1[] = {
447 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, 410 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0},
448 }; 411 };
449 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); 412 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0);
450 dev->ReadNow(); 413 dev->ReadNow();
451 EXPECT_EQ(9u, size()); 414 EXPECT_EQ(9u, size());
452 ev1 = dispatched_event(8); 415 ev1 = dispatched_event(8);
453 416
454 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); 417 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type);
455 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); 418 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp);
456 EXPECT_EQ(38, ev1.location.x()); 419 EXPECT_EQ(38, ev1.location.x());
457 EXPECT_EQ(102, ev1.location.y()); 420 EXPECT_EQ(102, ev1.location.y());
458 EXPECT_EQ(1, ev1.touch_id); 421 EXPECT_EQ(1, ev1.touch_id);
459 EXPECT_FLOAT_EQ(.5f, ev1.pressure); 422 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure);
460 } 423 }
461 424
462 TEST_F(TouchEventConverterEvdevTest, Unsync) { 425 TEST_F(TouchEventConverterEvdevTest, Unsync) {
463 ui::MockTouchEventConverterEvdev* dev = device(); 426 ui::MockTouchEventConverterEvdev* dev = device();
464 427
428 InitPixelTouchscreen(dev);
429
465 struct input_event mock_kernel_queue_press0[] = { 430 struct input_event mock_kernel_queue_press0[] = {
466 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, 431 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684},
467 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, 432 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3},
468 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, 433 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45},
469 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, 434 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42},
470 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} 435 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0}
471 }; 436 };
472 437
473 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); 438 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0);
474 dev->ReadNow(); 439 dev->ReadNow();
(...skipping 18 matching lines...) Expand all
493 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0); 458 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0);
494 dev->ReadNow(); 459 dev->ReadNow();
495 EXPECT_EQ(2u, size()); 460 EXPECT_EQ(2u, size());
496 } 461 }
497 462
498 // crbug.com/407386 463 // crbug.com/407386
499 TEST_F(TouchEventConverterEvdevTest, 464 TEST_F(TouchEventConverterEvdevTest,
500 DontChangeMultitouchPositionFromLegacyAxes) { 465 DontChangeMultitouchPositionFromLegacyAxes) {
501 ui::MockTouchEventConverterEvdev* dev = device(); 466 ui::MockTouchEventConverterEvdev* dev = device();
502 467
468 InitPixelTouchscreen(dev);
469
503 struct input_event mock_kernel_queue[] = { 470 struct input_event mock_kernel_queue[] = {
504 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, 471 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0},
505 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, 472 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100},
506 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, 473 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999},
507 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, 474 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888},
508 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, 475 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55},
509 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, 476 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1},
510 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, 477 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200},
511 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, 478 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44},
512 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, 479 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777},
(...skipping 12 matching lines...) Expand all
525 EXPECT_EQ(kExpectedEventCount, size()); 492 EXPECT_EQ(kExpectedEventCount, size());
526 if (kExpectedEventCount != size()) 493 if (kExpectedEventCount != size())
527 return; 494 return;
528 495
529 ui::TouchEventParams ev0 = dispatched_event(0); 496 ui::TouchEventParams ev0 = dispatched_event(0);
530 ui::TouchEventParams ev1 = dispatched_event(1); 497 ui::TouchEventParams ev1 = dispatched_event(1);
531 498
532 EXPECT_EQ(0, ev0.touch_id); 499 EXPECT_EQ(0, ev0.touch_id);
533 EXPECT_EQ(999, ev0.location.x()); 500 EXPECT_EQ(999, ev0.location.x());
534 EXPECT_EQ(888, ev0.location.y()); 501 EXPECT_EQ(888, ev0.location.y());
535 EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure); 502 EXPECT_FLOAT_EQ(0.21568628f, ev0.pressure);
536 503
537 EXPECT_EQ(1, ev1.touch_id); 504 EXPECT_EQ(1, ev1.touch_id);
538 EXPECT_EQ(777, ev1.location.x()); 505 EXPECT_EQ(777, ev1.location.x());
539 EXPECT_EQ(666, ev1.location.y()); 506 EXPECT_EQ(666, ev1.location.y());
540 EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure); 507 EXPECT_FLOAT_EQ(0.17254902f, ev1.pressure);
541 } 508 }
542 509
543 // crbug.com/446939 510 // crbug.com/446939
544 TEST_F(TouchEventConverterEvdevTest, CheckSlotLimit) { 511 TEST_F(TouchEventConverterEvdevTest, CheckSlotLimit) {
545 ui::MockTouchEventConverterEvdev* dev = device(); 512 ui::MockTouchEventConverterEvdev* dev = device();
546 513
547 struct input_event mock_kernel_queue[] = { 514 struct input_event mock_kernel_queue[] = {
548 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, 515 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0},
549 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, 516 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100},
550 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, 517 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999},
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 ASSERT_EQ(0u, size()); 688 ASSERT_EQ(0u, size());
722 689
723 EventTypeTouchNoiseFilter* filter = 690 EventTypeTouchNoiseFilter* filter =
724 static_cast<EventTypeTouchNoiseFilter*>(first_filter()); 691 static_cast<EventTypeTouchNoiseFilter*>(first_filter());
725 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED)); 692 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED));
726 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED)); 693 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED));
727 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED)); 694 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED));
728 } 695 }
729 696
730 } // namespace ui 697 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698