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 3a56227a80fb60a318828080bd16f24ab1f1b8e6..925f2b1efdd131d6ac8262213c78872d3401bda0 100644 |
--- a/ui/events/gesture_detection/gesture_provider_unittest.cc |
+++ b/ui/events/gesture_detection/gesture_provider_unittest.cc |
@@ -74,6 +74,17 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient { |
return MockMotionEvent(action, event_time, x0, y0, x1, y1); |
} |
+ static MockMotionEvent ObtainMotionEvent(base::TimeTicks event_time, |
+ MotionEvent::Action action, |
+ float x0, |
+ float y0, |
+ float x1, |
+ float y1, |
+ float x2, |
+ float y2) { |
+ return MockMotionEvent(action, event_time, x0, y0, x1, y1, x2, y2); |
+ } |
+ |
static MockMotionEvent ObtainMotionEvent( |
base::TimeTicks event_time, |
MotionEvent::Action action, |
@@ -1395,6 +1406,10 @@ TEST_F(GestureProviderTest, PinchZoom) { |
EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN)); |
EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); |
EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE)); |
+ |
+ EXPECT_EQ((kFakeCoordX + secondary_coord_x) / 2, GetReceivedGesture(3).x); |
+ EXPECT_EQ((kFakeCoordY + secondary_coord_y) / 2, GetReceivedGesture(3).y); |
+ |
EXPECT_EQ( |
gfx::RectF(kFakeCoordX - kMockTouchRadius, |
kFakeCoordY - kMockTouchRadius, |
@@ -1714,85 +1729,155 @@ TEST_F(GestureProviderTest, GestureBeginAndEnd) { |
EXPECT_EQ(0U, GetReceivedGestureCount()); |
MockMotionEvent event = |
- ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
+ ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN, 1, 1); |
event.pointer_count = 1; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); |
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
EXPECT_EQ(2U, GetReceivedGestureCount()); |
EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
- EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, |
- kFakeCoordY - kMockTouchRadius, |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().y); |
+ EXPECT_EQ(gfx::RectF(1 - kMockTouchRadius, |
+ 1 - kMockTouchRadius, |
kMockTouchRadius * 2, |
kMockTouchRadius * 2), |
GetMostRecentGestureEvent().details.bounding_box()); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_DOWN, 1, 1, 2, 2); |
event.pointer_count = 2; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); |
EXPECT_EQ(3U, GetReceivedGestureCount()); |
EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_DOWN, 1, 1, 2, 2, 3, 3); |
event.pointer_count = 3; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); |
EXPECT_EQ(4U, GetReceivedGestureCount()); |
EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_UP, 1, 1, 2, 2, 3, 3); |
event.pointer_count = 2; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
EXPECT_EQ(5U, GetReceivedGestureCount()); |
EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_DOWN, 2, 2, 3, 3, 4, 4); |
event.pointer_count = 3; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); |
EXPECT_EQ(6U, GetReceivedGestureCount()); |
EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(4, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(4, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_UP, 2, 2, 3, 3, 4, 4); |
event.pointer_count = 2; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
EXPECT_EQ(7U, GetReceivedGestureCount()); |
EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); |
+ event = |
+ ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP, 3, 3, 4, 4); |
event.pointer_count = 1; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
EXPECT_EQ(8U, GetReceivedGestureCount()); |
EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP); |
+ |
+ event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP, 4, 4); |
event.pointer_count = 1; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
EXPECT_EQ(9U, GetReceivedGestureCount()); |
EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(4, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(4, GetMostRecentGestureEvent().y); |
+} |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
+// Verify that gesture begin and gesture end events are dispatched correctly |
+// when an ACTION_CANCEL is received. |
+TEST_F(GestureProviderTest, GestureBeginAndEndOnCancel) { |
+ EnableBeginEndTypes(); |
+ base::TimeTicks event_time = base::TimeTicks::Now(); |
+ |
+ EXPECT_EQ(0U, GetReceivedGestureCount()); |
+ MockMotionEvent event = |
+ ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN, 1, 1); |
event.pointer_count = 1; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
- EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(9).type); |
+ EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); |
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
- EXPECT_EQ(11U, GetReceivedGestureCount()); |
+ EXPECT_EQ(2U, GetReceivedGestureCount()); |
EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(gfx::RectF(1 - kMockTouchRadius, |
+ 1 - kMockTouchRadius, |
+ kMockTouchRadius * 2, |
+ kMockTouchRadius * 2), |
+ GetMostRecentGestureEvent().details.bounding_box()); |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(1, GetMostRecentGestureEvent().y); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL); |
- event.pointer_count = 1; |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_DOWN, 1, 1, 2, 2); |
+ event.pointer_count = 2; |
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
- EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
- EXPECT_EQ(12U, GetReceivedGestureCount()); |
- EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
-} |
+ EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); |
+ EXPECT_EQ(3U, GetReceivedGestureCount()); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(2, GetMostRecentGestureEvent().y); |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_POINTER_DOWN, 1, 1, 2, 2, 3, 3); |
+ event.pointer_count = 3; |
+ EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
+ EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); |
+ EXPECT_EQ(4U, GetReceivedGestureCount()); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().x); |
+ EXPECT_EQ(3, GetMostRecentGestureEvent().y); |
+ |
+ event = ObtainMotionEvent( |
+ event_time, MotionEvent::ACTION_CANCEL, 1, 1, 2, 2, 3, 3); |
+ event.pointer_count = 3; |
+ EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
+ EXPECT_EQ(7U, GetReceivedGestureCount()); |
+ EXPECT_EQ(3, GetReceivedGesture(4).details.touch_points()); |
+ EXPECT_EQ(ET_GESTURE_END, GetReceivedGesture(4).details.type()); |
+ EXPECT_EQ(2, GetReceivedGesture(5).details.touch_points()); |
+ EXPECT_EQ(ET_GESTURE_END, GetReceivedGesture(5).details.type()); |
+ EXPECT_EQ(1, GetReceivedGesture(6).details.touch_points()); |
+ EXPECT_EQ(ET_GESTURE_END, GetReceivedGesture(6).details.type()); |
+ EXPECT_EQ(1, GetReceivedGesture(4).x); |
+ EXPECT_EQ(1, GetReceivedGesture(4).y); |
+ EXPECT_EQ(2, GetReceivedGesture(5).x); |
+ EXPECT_EQ(2, GetReceivedGesture(5).y); |
+ EXPECT_EQ(3, GetReceivedGesture(6).x); |
+ EXPECT_EQ(3, GetReceivedGesture(6).y); |
+} |
+ |
// Test a simple two finger tap |
TEST_F(GestureProviderTest, TwoFingerTap) { |
// The time between ACTION_POINTER_DOWN and ACTION_POINTER_UP must be <= the |