| Index: ui/events/gesture_detection/gesture_provider_unittest.cc
|
| diff --git a/ui/events/gesture_detection/gesture_provider_unittest.cc b/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| index 78a84b94ae9c5cc07953c5b1464055996bc2294e..e45d1782390a702b2f6b7fd2bfd621785fef12bd 100644
|
| --- a/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| +++ b/ui/events/gesture_detection/gesture_provider_unittest.cc
|
| @@ -178,6 +178,10 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
|
| return GetDefaultConfig().gesture_detector_config.touch_slop;
|
| }
|
|
|
| + float GetDoubleTapSlop() const {
|
| + return GetDefaultConfig().gesture_detector_config.double_tap_slop;
|
| + }
|
| +
|
| float GetMinSwipeVelocity() const {
|
| return GetDefaultConfig().gesture_detector_config.minimum_swipe_velocity;
|
| }
|
| @@ -1910,4 +1914,98 @@ TEST_F(GestureProviderTest, TwoFingerTapCancelledByDistanceBetweenPointers) {
|
| EXPECT_EQ(1U, GetReceivedGestureCount());
|
| }
|
|
|
| +TEST_F(GestureProviderTest, TripleTap) {
|
| + const float slop = GetDoubleTapSlop();
|
| + gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
|
| + base::TimeTicks event_time = base::TimeTicks::Now();
|
| +
|
| + // First Tap.
|
| + MockMotionEvent event =
|
| + ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| +
|
| + EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
|
| +
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(
|
| + event_time, MotionEvent::ACTION_UP, kFakeCoordX, kFakeCoordY);
|
| + gesture_provider_->OnTouchEvent(event);
|
| + EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
|
| +
|
| + // Second Tap.
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(
|
| + event_time, MotionEvent::ACTION_DOWN, kFakeCoordX + slop, kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
|
| +
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(
|
| + event_time, MotionEvent::ACTION_UP, kFakeCoordX + slop, kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| +
|
| + const GestureEventData& second_tap = GetMostRecentGestureEvent();
|
| + EXPECT_EQ(ET_GESTURE_TAP, second_tap.type);
|
| + // Ensure tap details have been set.
|
| + EXPECT_EQ(10, second_tap.details.bounding_box().width());
|
| + EXPECT_EQ(10, second_tap.details.bounding_box().height());
|
| + EXPECT_EQ(2, second_tap.details.tap_count());
|
| +
|
| + // Third, Fourth and Fifth Taps. Taps after the third should still get a
|
| + // tap_count of 3, as 3 is the maximum.
|
| + for (int i = 0; i < 3; ++i) {
|
| + event_time += kOneMicrosecond;
|
| + // We keep tapping inside the previous tap's slop region.
|
| + event = ObtainMotionEvent(event_time,
|
| + MotionEvent::ACTION_DOWN,
|
| + kFakeCoordX + slop * (2 + i),
|
| + kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
|
| +
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(event_time,
|
| + MotionEvent::ACTION_UP,
|
| + kFakeCoordX + slop * (2 + i),
|
| + kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| +
|
| + const GestureEventData& third_tap = GetMostRecentGestureEvent();
|
| + EXPECT_EQ(ET_GESTURE_TAP, third_tap.type);
|
| + // Ensure tap details have been set.
|
| + EXPECT_EQ(10, third_tap.details.bounding_box().width());
|
| + EXPECT_EQ(10, third_tap.details.bounding_box().height());
|
| + EXPECT_EQ(3, third_tap.details.tap_count());
|
| + }
|
| +
|
| + // Tap outside of the slop area. This should reset the |tap_count| to 1.
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(event_time,
|
| + MotionEvent::ACTION_DOWN,
|
| + kFakeCoordX,
|
| + kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| + EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
|
| + EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
|
| +
|
| + event_time += kOneMicrosecond;
|
| + event = ObtainMotionEvent(event_time,
|
| + MotionEvent::ACTION_UP,
|
| + kFakeCoordX,
|
| + kFakeCoordY);
|
| + EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
|
| +
|
| + const GestureEventData& final_tap = GetMostRecentGestureEvent();
|
| + EXPECT_EQ(ET_GESTURE_TAP, final_tap.type);
|
| + // Ensure tap details have been set.
|
| + EXPECT_EQ(10, final_tap.details.bounding_box().width());
|
| + EXPECT_EQ(10, final_tap.details.bounding_box().height());
|
| + EXPECT_EQ(1, final_tap.details.tap_count());
|
| +}
|
| +
|
| } // namespace ui
|
|
|