| 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 |