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 12870a92a22db4cd5f0171cda5092d33718c4c95..7df65066924fba222ec6faa335f0a08e6d1b189e 100644 |
--- a/ui/events/gesture_detection/gesture_provider_unittest.cc |
+++ b/ui/events/gesture_detection/gesture_provider_unittest.cc |
@@ -74,6 +74,30 @@ 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, |
jdduke (slow)
2014/05/28 16:26:00
Hmm, I don't actually see where the 4 pointer case
tdresser
2014/05/29 14:26:21
Oh goodness, you're right. I was using 4 for the b
|
+ MotionEvent::Action action, |
+ float x0, |
+ float y0, |
+ float x1, |
+ float y1, |
+ float x2, |
+ float y2, |
+ float x3, |
+ float y3) { |
+ return MockMotionEvent(action, event_time, x0, y0, x1, y1, x2, y2, x3, y3); |
+ } |
+ |
static MockMotionEvent ObtainMotionEvent( |
base::TimeTicks event_time, |
MotionEvent::Action action, |
@@ -98,8 +122,20 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient { |
positions[1].y(), |
positions[2].x(), |
positions[2].y()); |
+ case 4: |
+ return MockMotionEvent(action, |
+ event_time, |
+ positions[0].x(), |
+ positions[0].y(), |
+ positions[1].x(), |
+ positions[1].y(), |
+ positions[2].x(), |
+ positions[2].y(), |
+ positions[3].x(), |
+ positions[3].y()); |
+ |
default: |
- CHECK(false) << "MockMotionEvent only supports 1-3 pointers"; |
+ CHECK(false) << "MockMotionEvent only supports 1-4 pointers"; |
return MockMotionEvent(); |
} |
} |
@@ -1389,6 +1425,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, |
@@ -1679,84 +1719,154 @@ 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); |
+} |
+ |
+// 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(); |
- event = ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
+ 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) { |