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> |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 dev->ConfigureReadMock(mock_kernel_queue_press, | 249 dev->ConfigureReadMock(mock_kernel_queue_press, |
250 arraysize(mock_kernel_queue_press), 0); | 250 arraysize(mock_kernel_queue_press), 0); |
251 dev->ReadNow(); | 251 dev->ReadNow(); |
252 EXPECT_EQ(1u, size()); | 252 EXPECT_EQ(1u, size()); |
253 ui::TouchEventParams event = dispatched_event(0); | 253 ui::TouchEventParams event = dispatched_event(0); |
254 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); | 254 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); |
255 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282019203), | 255 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282019203), |
256 event.timestamp); | 256 event.timestamp); |
257 EXPECT_EQ(295, event.location.x()); | 257 EXPECT_EQ(295, event.location.x()); |
258 EXPECT_EQ(421, event.location.y()); | 258 EXPECT_EQ(421, event.location.y()); |
259 EXPECT_EQ(0, event.touch_id); | 259 EXPECT_EQ(0, event.slot); |
260 EXPECT_FLOAT_EQ(58.f, event.radii.x()); | 260 EXPECT_FLOAT_EQ(58.f, event.radii.x()); |
261 EXPECT_FLOAT_EQ(0.13333334f, event.pressure); | 261 EXPECT_FLOAT_EQ(0.13333334f, event.pressure); |
262 | 262 |
263 // Move. | 263 // Move. |
264 dev->ConfigureReadMock(mock_kernel_queue_move, | 264 dev->ConfigureReadMock(mock_kernel_queue_move, |
265 arraysize(mock_kernel_queue_move), 0); | 265 arraysize(mock_kernel_queue_move), 0); |
266 dev->ReadNow(); | 266 dev->ReadNow(); |
267 EXPECT_EQ(2u, size()); | 267 EXPECT_EQ(2u, size()); |
268 event = dispatched_event(1); | 268 event = dispatched_event(1); |
269 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); | 269 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); |
270 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282034693), | 270 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282034693), |
271 event.timestamp); | 271 event.timestamp); |
272 EXPECT_EQ(312, event.location.x()); | 272 EXPECT_EQ(312, event.location.x()); |
273 EXPECT_EQ(432, event.location.y()); | 273 EXPECT_EQ(432, event.location.y()); |
274 EXPECT_EQ(0, event.touch_id); | 274 EXPECT_EQ(0, event.slot); |
275 EXPECT_FLOAT_EQ(50.f, event.radii.x()); | 275 EXPECT_FLOAT_EQ(50.f, event.radii.x()); |
276 EXPECT_FLOAT_EQ(0.16862745f, event.pressure); | 276 EXPECT_FLOAT_EQ(0.16862745f, event.pressure); |
277 | 277 |
278 // Release. | 278 // Release. |
279 dev->ConfigureReadMock(mock_kernel_queue_release, | 279 dev->ConfigureReadMock(mock_kernel_queue_release, |
280 arraysize(mock_kernel_queue_release), 0); | 280 arraysize(mock_kernel_queue_release), 0); |
281 dev->ReadNow(); | 281 dev->ReadNow(); |
282 EXPECT_EQ(3u, size()); | 282 EXPECT_EQ(3u, size()); |
283 event = dispatched_event(2); | 283 event = dispatched_event(2); |
284 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); | 284 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); |
285 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282144540), | 285 EXPECT_EQ(base::TimeDelta::FromMicroseconds(1427323282144540), |
286 event.timestamp); | 286 event.timestamp); |
287 EXPECT_EQ(312, event.location.x()); | 287 EXPECT_EQ(312, event.location.x()); |
288 EXPECT_EQ(432, event.location.y()); | 288 EXPECT_EQ(432, event.location.y()); |
289 EXPECT_EQ(0, event.touch_id); | 289 EXPECT_EQ(0, event.slot); |
290 EXPECT_FLOAT_EQ(50.f, event.radii.x()); | 290 EXPECT_FLOAT_EQ(50.f, event.radii.x()); |
291 EXPECT_FLOAT_EQ(0.16862745f, event.pressure); | 291 EXPECT_FLOAT_EQ(0.16862745f, event.pressure); |
292 } | 292 } |
293 | 293 |
294 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { | 294 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { |
295 ui::MockTouchEventConverterEvdev* dev = device(); | 295 ui::MockTouchEventConverterEvdev* dev = device(); |
296 | 296 |
297 InitPixelTouchscreen(dev); | 297 InitPixelTouchscreen(dev); |
298 | 298 |
299 struct input_event mock_kernel_queue_press0[] = { | 299 struct input_event mock_kernel_queue_press0[] = { |
(...skipping 29 matching lines...) Expand all Loading... |
329 dev->ReadNow(); | 329 dev->ReadNow(); |
330 EXPECT_EQ(4u, size()); | 330 EXPECT_EQ(4u, size()); |
331 ui::TouchEventParams ev0 = dispatched_event(2); | 331 ui::TouchEventParams ev0 = dispatched_event(2); |
332 ui::TouchEventParams ev1 = dispatched_event(3); | 332 ui::TouchEventParams ev1 = dispatched_event(3); |
333 | 333 |
334 // Move | 334 // Move |
335 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 335 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
336 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 336 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
337 EXPECT_EQ(40, ev0.location.x()); | 337 EXPECT_EQ(40, ev0.location.x()); |
338 EXPECT_EQ(51, ev0.location.y()); | 338 EXPECT_EQ(51, ev0.location.y()); |
339 EXPECT_EQ(0, ev0.touch_id); | 339 EXPECT_EQ(0, ev0.slot); |
340 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); | 340 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); |
341 | 341 |
342 // Press | 342 // Press |
343 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); | 343 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); |
344 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 344 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
345 EXPECT_EQ(101, ev1.location.x()); | 345 EXPECT_EQ(101, ev1.location.x()); |
346 EXPECT_EQ(102, ev1.location.y()); | 346 EXPECT_EQ(102, ev1.location.y()); |
347 EXPECT_EQ(1, ev1.touch_id); | 347 EXPECT_EQ(1, ev1.slot); |
348 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); | 348 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); |
349 | 349 |
350 // Stationary 0, Moves 1. | 350 // Stationary 0, Moves 1. |
351 struct input_event mock_kernel_queue_stationary0_move1[] = { | 351 struct input_event mock_kernel_queue_stationary0_move1[] = { |
352 {{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} |
353 }; | 353 }; |
354 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); | 354 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); |
355 dev->ReadNow(); | 355 dev->ReadNow(); |
356 EXPECT_EQ(5u, size()); | 356 EXPECT_EQ(5u, size()); |
357 ev1 = dispatched_event(4); | 357 ev1 = dispatched_event(4); |
358 | 358 |
359 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 359 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
360 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 360 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
361 EXPECT_EQ(40, ev1.location.x()); | 361 EXPECT_EQ(40, ev1.location.x()); |
362 EXPECT_EQ(102, ev1.location.y()); | 362 EXPECT_EQ(102, ev1.location.y()); |
363 EXPECT_EQ(1, ev1.touch_id); | 363 EXPECT_EQ(1, ev1.slot); |
364 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); | 364 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); |
365 | 365 |
366 // Move 0, stationary 1. | 366 // Move 0, stationary 1. |
367 struct input_event mock_kernel_queue_move0_stationary1[] = { | 367 struct input_event mock_kernel_queue_move0_stationary1[] = { |
368 {{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}, |
369 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 369 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
370 }; | 370 }; |
371 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); | 371 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); |
372 dev->ReadNow(); | 372 dev->ReadNow(); |
373 EXPECT_EQ(6u, size()); | 373 EXPECT_EQ(6u, size()); |
374 ev0 = dispatched_event(5); | 374 ev0 = dispatched_event(5); |
375 | 375 |
376 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 376 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
377 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 377 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
378 EXPECT_EQ(39, ev0.location.x()); | 378 EXPECT_EQ(39, ev0.location.x()); |
379 EXPECT_EQ(51, ev0.location.y()); | 379 EXPECT_EQ(51, ev0.location.y()); |
380 EXPECT_EQ(0, ev0.touch_id); | 380 EXPECT_EQ(0, ev0.slot); |
381 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); | 381 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); |
382 | 382 |
383 // Release 0, move 1. | 383 // Release 0, move 1. |
384 struct input_event mock_kernel_queue_release0_move1[] = { | 384 struct input_event mock_kernel_queue_release0_move1[] = { |
385 {{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}, |
386 {{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} |
387 }; | 387 }; |
388 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); | 388 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); |
389 dev->ReadNow(); | 389 dev->ReadNow(); |
390 EXPECT_EQ(8u, size()); | 390 EXPECT_EQ(8u, size()); |
391 ev0 = dispatched_event(6); | 391 ev0 = dispatched_event(6); |
392 ev1 = dispatched_event(7); | 392 ev1 = dispatched_event(7); |
393 | 393 |
394 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); | 394 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); |
395 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 395 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
396 EXPECT_EQ(39, ev0.location.x()); | 396 EXPECT_EQ(39, ev0.location.x()); |
397 EXPECT_EQ(51, ev0.location.y()); | 397 EXPECT_EQ(51, ev0.location.y()); |
398 EXPECT_EQ(0, ev0.touch_id); | 398 EXPECT_EQ(0, ev0.slot); |
399 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); | 399 EXPECT_FLOAT_EQ(0.17647059f, ev0.pressure); |
400 | 400 |
401 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 401 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
402 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 402 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
403 EXPECT_EQ(38, ev1.location.x()); | 403 EXPECT_EQ(38, ev1.location.x()); |
404 EXPECT_EQ(102, ev1.location.y()); | 404 EXPECT_EQ(102, ev1.location.y()); |
405 EXPECT_EQ(1, ev1.touch_id); | 405 EXPECT_EQ(1, ev1.slot); |
406 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); | 406 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); |
407 | 407 |
408 // Release 1. | 408 // Release 1. |
409 struct input_event mock_kernel_queue_release1[] = { | 409 struct input_event mock_kernel_queue_release1[] = { |
410 {{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}, |
411 }; | 411 }; |
412 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); | 412 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); |
413 dev->ReadNow(); | 413 dev->ReadNow(); |
414 EXPECT_EQ(9u, size()); | 414 EXPECT_EQ(9u, size()); |
415 ev1 = dispatched_event(8); | 415 ev1 = dispatched_event(8); |
416 | 416 |
417 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); | 417 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); |
418 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 418 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
419 EXPECT_EQ(38, ev1.location.x()); | 419 EXPECT_EQ(38, ev1.location.x()); |
420 EXPECT_EQ(102, ev1.location.y()); | 420 EXPECT_EQ(102, ev1.location.y()); |
421 EXPECT_EQ(1, ev1.touch_id); | 421 EXPECT_EQ(1, ev1.slot); |
422 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); | 422 EXPECT_FLOAT_EQ(0.17647059f, ev1.pressure); |
423 } | 423 } |
424 | 424 |
425 TEST_F(TouchEventConverterEvdevTest, Unsync) { | 425 TEST_F(TouchEventConverterEvdevTest, Unsync) { |
426 ui::MockTouchEventConverterEvdev* dev = device(); | 426 ui::MockTouchEventConverterEvdev* dev = device(); |
427 | 427 |
428 InitPixelTouchscreen(dev); | 428 InitPixelTouchscreen(dev); |
429 | 429 |
430 struct input_event mock_kernel_queue_press0[] = { | 430 struct input_event mock_kernel_queue_press0[] = { |
431 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 431 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 481 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
482 }; | 482 }; |
483 | 483 |
484 dev->ConfigureReadMock(mock_kernel_queue_empty_report, | 484 dev->ConfigureReadMock(mock_kernel_queue_empty_report, |
485 arraysize(mock_kernel_queue_empty_report), 0); | 485 arraysize(mock_kernel_queue_empty_report), 0); |
486 dev->ReadNow(); | 486 dev->ReadNow(); |
487 EXPECT_EQ(1u, size()); | 487 EXPECT_EQ(1u, size()); |
488 | 488 |
489 ui::TouchEventParams ev = dispatched_event(0); | 489 ui::TouchEventParams ev = dispatched_event(0); |
490 EXPECT_EQ(ET_TOUCH_PRESSED, ev.type); | 490 EXPECT_EQ(ET_TOUCH_PRESSED, ev.type); |
491 EXPECT_EQ(0, ev.touch_id); | 491 EXPECT_EQ(0, ev.slot); |
492 EXPECT_FLOAT_EQ(50.f, ev.radii.x()); | 492 EXPECT_FLOAT_EQ(50.f, ev.radii.x()); |
493 EXPECT_FLOAT_EQ(0.f, ev.radii.y()); | 493 EXPECT_FLOAT_EQ(0.f, ev.radii.y()); |
494 EXPECT_FLOAT_EQ(0.50196081f, ev.pressure); | 494 EXPECT_FLOAT_EQ(0.50196081f, ev.pressure); |
495 } | 495 } |
496 | 496 |
497 // crbug.com/407386 | 497 // crbug.com/407386 |
498 TEST_F(TouchEventConverterEvdevTest, | 498 TEST_F(TouchEventConverterEvdevTest, |
499 DontChangeMultitouchPositionFromLegacyAxes) { | 499 DontChangeMultitouchPositionFromLegacyAxes) { |
500 ui::MockTouchEventConverterEvdev* dev = device(); | 500 ui::MockTouchEventConverterEvdev* dev = device(); |
501 | 501 |
(...skipping 21 matching lines...) Expand all Loading... |
523 dev->ReadNow(); | 523 dev->ReadNow(); |
524 | 524 |
525 const unsigned int kExpectedEventCount = 2; | 525 const unsigned int kExpectedEventCount = 2; |
526 EXPECT_EQ(kExpectedEventCount, size()); | 526 EXPECT_EQ(kExpectedEventCount, size()); |
527 if (kExpectedEventCount != size()) | 527 if (kExpectedEventCount != size()) |
528 return; | 528 return; |
529 | 529 |
530 ui::TouchEventParams ev0 = dispatched_event(0); | 530 ui::TouchEventParams ev0 = dispatched_event(0); |
531 ui::TouchEventParams ev1 = dispatched_event(1); | 531 ui::TouchEventParams ev1 = dispatched_event(1); |
532 | 532 |
533 EXPECT_EQ(0, ev0.touch_id); | 533 EXPECT_EQ(0, ev0.slot); |
534 EXPECT_EQ(999, ev0.location.x()); | 534 EXPECT_EQ(999, ev0.location.x()); |
535 EXPECT_EQ(888, ev0.location.y()); | 535 EXPECT_EQ(888, ev0.location.y()); |
536 EXPECT_FLOAT_EQ(0.21568628f, ev0.pressure); | 536 EXPECT_FLOAT_EQ(0.21568628f, ev0.pressure); |
537 | 537 |
538 EXPECT_EQ(1, ev1.touch_id); | 538 EXPECT_EQ(1, ev1.slot); |
539 EXPECT_EQ(777, ev1.location.x()); | 539 EXPECT_EQ(777, ev1.location.x()); |
540 EXPECT_EQ(666, ev1.location.y()); | 540 EXPECT_EQ(666, ev1.location.y()); |
541 EXPECT_FLOAT_EQ(0.17254902f, ev1.pressure); | 541 EXPECT_FLOAT_EQ(0.17254902f, ev1.pressure); |
542 } | 542 } |
543 | 543 |
544 // crbug.com/446939 | 544 // crbug.com/446939 |
545 TEST_F(TouchEventConverterEvdevTest, CheckSlotLimit) { | 545 TEST_F(TouchEventConverterEvdevTest, CheckSlotLimit) { |
546 ui::MockTouchEventConverterEvdev* dev = device(); | 546 ui::MockTouchEventConverterEvdev* dev = device(); |
547 | 547 |
548 struct input_event mock_kernel_queue[] = { | 548 struct input_event mock_kernel_queue[] = { |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 ASSERT_EQ(0u, size()); | 722 ASSERT_EQ(0u, size()); |
723 | 723 |
724 EventTypeTouchNoiseFilter* filter = | 724 EventTypeTouchNoiseFilter* filter = |
725 static_cast<EventTypeTouchNoiseFilter*>(first_filter()); | 725 static_cast<EventTypeTouchNoiseFilter*>(first_filter()); |
726 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED)); | 726 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_PRESSED)); |
727 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED)); | 727 EXPECT_EQ(2u, filter->num_events(ET_TOUCH_MOVED)); |
728 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED)); | 728 EXPECT_EQ(1u, filter->num_events(ET_TOUCH_RELEASED)); |
729 } | 729 } |
730 | 730 |
731 } // namespace ui | 731 } // namespace ui |
OLD | NEW |