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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 | 267 |
268 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } | 268 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } |
269 | 269 |
270 protected: | 270 protected: |
271 void CheckScrollEventSequenceForEndActionType( | 271 void CheckScrollEventSequenceForEndActionType( |
272 MotionEvent::Action end_action_type) { | 272 MotionEvent::Action end_action_type) { |
273 base::TimeTicks event_time = base::TimeTicks::Now(); | 273 base::TimeTicks event_time = base::TimeTicks::Now(); |
274 const float scroll_to_x = kFakeCoordX + 100; | 274 const float scroll_to_x = kFakeCoordX + 100; |
275 const float scroll_to_y = kFakeCoordY + 100; | 275 const float scroll_to_y = kFakeCoordY + 100; |
276 int motion_event_id = 0; | 276 int motion_event_id = 0; |
| 277 int motion_event_flags = EF_SHIFT_DOWN | EF_CAPS_LOCK_DOWN; |
277 | 278 |
278 MockMotionEvent event = | 279 MockMotionEvent event = |
279 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 280 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
280 event.set_id(++motion_event_id); | 281 event.set_id(++motion_event_id); |
| 282 event.set_flags(motion_event_flags); |
281 | 283 |
282 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 284 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 285 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
283 | 286 |
284 event = ObtainMotionEvent(event_time + kOneSecond, | 287 event = ObtainMotionEvent(event_time + kOneSecond, |
285 MotionEvent::ACTION_MOVE, | 288 MotionEvent::ACTION_MOVE, |
286 scroll_to_x, | 289 scroll_to_x, |
287 scroll_to_y); | 290 scroll_to_y); |
288 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); | 291 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); |
289 event.set_id(++motion_event_id); | 292 event.set_id(++motion_event_id); |
| 293 event.set_flags(motion_event_flags); |
290 | 294 |
291 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 295 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
292 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); | 296 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); |
293 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); | 297 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); |
294 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 298 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 299 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
295 EXPECT_EQ(event.GetToolType(0), | 300 EXPECT_EQ(event.GetToolType(0), |
296 GetMostRecentGestureEvent().primary_tool_type); | 301 GetMostRecentGestureEvent().primary_tool_type); |
297 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); | 302 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); |
298 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), | 303 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), |
299 GetMostRecentGestureEvent().details.bounding_box()); | 304 GetMostRecentGestureEvent().details.bounding_box()); |
300 ASSERT_EQ(3U, GetReceivedGestureCount()) << "Only TapDown, " | 305 ASSERT_EQ(3U, GetReceivedGestureCount()) << "Only TapDown, " |
301 "ScrollBegin and ScrollBy " | 306 "ScrollBegin and ScrollBy " |
302 "should have been sent"; | 307 "should have been sent"; |
303 | 308 |
304 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type()); | 309 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type()); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 std::vector<GestureEventData> gestures_; | 409 std::vector<GestureEventData> gestures_; |
405 scoped_ptr<GestureProvider> gesture_provider_; | 410 scoped_ptr<GestureProvider> gesture_provider_; |
406 scoped_ptr<GestureEventData> active_scroll_begin_event_; | 411 scoped_ptr<GestureEventData> active_scroll_begin_event_; |
407 base::MessageLoopForUI message_loop_; | 412 base::MessageLoopForUI message_loop_; |
408 }; | 413 }; |
409 | 414 |
410 // Verify that a DOWN followed shortly by an UP will trigger a single tap. | 415 // Verify that a DOWN followed shortly by an UP will trigger a single tap. |
411 TEST_F(GestureProviderTest, GestureTap) { | 416 TEST_F(GestureProviderTest, GestureTap) { |
412 base::TimeTicks event_time = base::TimeTicks::Now(); | 417 base::TimeTicks event_time = base::TimeTicks::Now(); |
413 int motion_event_id = 0; | 418 int motion_event_id = 0; |
| 419 int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN; |
414 | 420 |
415 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); | 421 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); |
416 | 422 |
417 MockMotionEvent event = | 423 MockMotionEvent event = |
418 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 424 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
419 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); | 425 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); |
420 event.set_id(++motion_event_id); | 426 event.set_id(++motion_event_id); |
| 427 event.set_flags(motion_event_flags); |
421 | 428 |
422 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 429 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
423 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 430 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
424 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 431 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
425 EXPECT_EQ(event.GetToolType(0), | 432 EXPECT_EQ(event.GetToolType(0), |
426 GetMostRecentGestureEvent().primary_tool_type); | 433 GetMostRecentGestureEvent().primary_tool_type); |
| 434 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
427 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), | 435 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), |
428 GetMostRecentGestureEvent().details.bounding_box()); | 436 GetMostRecentGestureEvent().details.bounding_box()); |
429 | 437 |
430 event = ObtainMotionEvent(event_time + kOneMicrosecond, | 438 event = ObtainMotionEvent(event_time + kOneMicrosecond, |
431 MotionEvent::ACTION_UP); | 439 MotionEvent::ACTION_UP); |
432 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); | 440 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); |
433 event.set_id(++motion_event_id); | 441 event.set_id(++motion_event_id); |
| 442 event.set_flags(motion_event_flags); |
434 | 443 |
435 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 444 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
436 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | 445 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); |
437 // Ensure tap details have been set. | 446 // Ensure tap details have been set. |
438 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); | 447 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); |
439 EXPECT_EQ(event.GetToolType(0), | 448 EXPECT_EQ(event.GetToolType(0), |
440 GetMostRecentGestureEvent().primary_tool_type); | 449 GetMostRecentGestureEvent().primary_tool_type); |
441 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 450 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 451 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
442 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 452 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
443 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), | 453 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), |
444 GetMostRecentGestureEvent().details.bounding_box()); | 454 GetMostRecentGestureEvent().details.bounding_box()); |
445 } | 455 } |
446 | 456 |
447 // Verify that a DOWN followed shortly by an UP will trigger | 457 // Verify that a DOWN followed shortly by an UP will trigger |
448 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled. | 458 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled. |
449 TEST_F(GestureProviderTest, GestureTapWithDelay) { | 459 TEST_F(GestureProviderTest, GestureTapWithDelay) { |
450 base::TimeTicks event_time = base::TimeTicks::Now(); | 460 base::TimeTicks event_time = base::TimeTicks::Now(); |
451 int motion_event_id = 0; | 461 int motion_event_id = 0; |
| 462 int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN | EF_CAPS_LOCK_DOWN; |
452 | 463 |
453 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true); | 464 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true); |
454 | 465 |
455 MockMotionEvent event = | 466 MockMotionEvent event = |
456 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 467 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
457 event.set_id(++motion_event_id); | 468 event.set_id(++motion_event_id); |
| 469 event.set_flags(motion_event_flags); |
458 | 470 |
459 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 471 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
460 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 472 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
461 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 473 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 474 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
462 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
463 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), | 476 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), |
464 GetMostRecentGestureEvent().details.bounding_box()); | 477 GetMostRecentGestureEvent().details.bounding_box()); |
465 | 478 |
466 event = ObtainMotionEvent(event_time + kOneMicrosecond, | 479 event = ObtainMotionEvent(event_time + kOneMicrosecond, |
467 MotionEvent::ACTION_UP); | 480 MotionEvent::ACTION_UP); |
468 event.set_id(++motion_event_id); | 481 event.set_id(++motion_event_id); |
| 482 event.set_flags(motion_event_flags); |
469 | 483 |
470 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 484 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
471 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); | 485 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); |
472 // Ensure tap details have been set. | 486 // Ensure tap details have been set. |
473 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); | 487 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); |
474 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 488 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 489 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 490 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
476 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), | 491 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), |
477 GetMostRecentGestureEvent().details.bounding_box()); | 492 GetMostRecentGestureEvent().details.bounding_box()); |
478 | 493 |
479 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP)); | 494 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP)); |
480 RunTasksAndWait(GetDoubleTapTimeout()); | 495 RunTasksAndWait(GetDoubleTapTimeout()); |
481 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP)); | 496 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP)); |
482 } | 497 } |
483 | 498 |
484 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG). | 499 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG). |
485 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) { | 500 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) { |
486 base::TimeTicks event_time = TimeTicks::Now(); | 501 base::TimeTicks event_time = TimeTicks::Now(); |
487 base::TimeDelta delta_time = kDeltaTimeForFlingSequences; | 502 base::TimeDelta delta_time = kDeltaTimeForFlingSequences; |
488 int motion_event_id = 0; | 503 int motion_event_id = 0; |
| 504 int motion_event_flags = EF_ALT_DOWN; |
489 | 505 |
490 MockMotionEvent event = | 506 MockMotionEvent event = |
491 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 507 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
492 event.set_id(++motion_event_id); | 508 event.set_id(++motion_event_id); |
| 509 event.set_flags(motion_event_flags); |
493 | 510 |
494 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 511 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
495 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 512 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
496 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 513 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 514 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
497 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 515 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
498 | 516 |
499 event = ObtainMotionEvent(event_time + delta_time, | 517 event = ObtainMotionEvent(event_time + delta_time, |
500 MotionEvent::ACTION_MOVE, | 518 MotionEvent::ACTION_MOVE, |
501 kFakeCoordX * 10, | 519 kFakeCoordX * 10, |
502 kFakeCoordY * 10); | 520 kFakeCoordY * 10); |
503 event.set_id(++motion_event_id); | 521 event.set_id(++motion_event_id); |
| 522 event.set_flags(motion_event_flags); |
504 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 523 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
505 | 524 |
506 event = ObtainMotionEvent(event_time + delta_time * 2, | 525 event = ObtainMotionEvent(event_time + delta_time * 2, |
507 MotionEvent::ACTION_UP, | 526 MotionEvent::ACTION_UP, |
508 kFakeCoordX * 10, | 527 kFakeCoordX * 10, |
509 kFakeCoordY * 10); | 528 kFakeCoordY * 10); |
510 event.set_id(++motion_event_id); | 529 event.set_id(++motion_event_id); |
| 530 event.set_flags(motion_event_flags); |
511 | 531 |
512 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 532 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
513 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); | 533 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); |
514 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 534 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 535 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags); |
515 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 536 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
516 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS)); | 537 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS)); |
517 EXPECT_EQ( | 538 EXPECT_EQ( |
518 BoundsForSingleMockTouchAtLocation(kFakeCoordX * 10, kFakeCoordY * 10), | 539 BoundsForSingleMockTouchAtLocation(kFakeCoordX * 10, kFakeCoordY * 10), |
519 GetMostRecentGestureEvent().details.bounding_box()); | 540 GetMostRecentGestureEvent().details.bounding_box()); |
520 } | 541 } |
521 | 542 |
522 // Verify that for a normal scroll the following events are sent: | 543 // Verify that for a normal scroll the following events are sent: |
523 // - ET_GESTURE_SCROLL_BEGIN | 544 // - ET_GESTURE_SCROLL_BEGIN |
524 // - ET_GESTURE_SCROLL_UPDATE | 545 // - ET_GESTURE_SCROLL_UPDATE |
(...skipping 1947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2472 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 2493 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
2473 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | 2494 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); |
2474 | 2495 |
2475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); | 2496 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); |
2476 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 2497 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
2477 EXPECT_EQ(gfx::RectF(0, 0, 20, 20), | 2498 EXPECT_EQ(gfx::RectF(0, 0, 20, 20), |
2478 GetMostRecentGestureEvent().details.bounding_box()); | 2499 GetMostRecentGestureEvent().details.bounding_box()); |
2479 } | 2500 } |
2480 | 2501 |
2481 } // namespace ui | 2502 } // namespace ui |
OLD | NEW |