Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: ui/events/gesture_detection/gesture_provider_unittest.cc

Issue 1287103004: Sync ui/events to chromium @ https://codereview.chromium.org/1210203002 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 bf483ef4f99c85d8e337c15287ebc53765f80441..ecffe2289623c70e665e39ef4a147f3e18d95863 100644
--- a/ui/events/gesture_detection/gesture_provider_unittest.cc
+++ b/ui/events/gesture_detection/gesture_provider_unittest.cc
@@ -12,7 +12,7 @@
#include "ui/events/gesture_detection/gesture_event_data.h"
#include "ui/events/gesture_detection/gesture_provider.h"
#include "ui/events/gesture_detection/motion_event.h"
-#include "ui/events/test/mock_motion_event.h"
+#include "ui/events/test/motion_event_test_utils.h"
#include "ui/gfx/geometry/point_f.h"
using base::TimeDelta;
@@ -143,9 +143,10 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
}
void ResetGestureDetection() {
- CancelActiveTouchSequence();
+ gesture_provider_->ResetDetection();
gestures_.clear();
}
+
bool CancelActiveTouchSequence() {
if (!gesture_provider_->current_down_event())
return false;
@@ -273,12 +274,12 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
base::TimeTicks event_time = base::TimeTicks::Now();
const float scroll_to_x = kFakeCoordX + 100;
const float scroll_to_y = kFakeCoordY + 100;
- int motion_event_id = 0;
+ int motion_event_id = 3;
int motion_event_flags = EF_SHIFT_DOWN | EF_CAPS_LOCK_DOWN;
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -289,7 +290,7 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
scroll_to_x,
scroll_to_y);
event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -314,7 +315,7 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
event = ObtainMotionEvent(
event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y);
event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
gesture_provider_->OnTouchEvent(event);
EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
@@ -415,7 +416,7 @@ class GestureProviderTest : public testing::Test, public GestureProviderClient {
// Verify that a DOWN followed shortly by an UP will trigger a single tap.
TEST_F(GestureProviderTest, GestureTap) {
base::TimeTicks event_time = base::TimeTicks::Now();
- int motion_event_id = 0;
+ int motion_event_id = 6;
int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN;
gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
@@ -423,7 +424,7 @@ TEST_F(GestureProviderTest, GestureTap) {
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -438,7 +439,7 @@ TEST_F(GestureProviderTest, GestureTap) {
event = ObtainMotionEvent(event_time + kOneMicrosecond,
MotionEvent::ACTION_UP);
event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -458,14 +459,14 @@ TEST_F(GestureProviderTest, GestureTap) {
// a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled.
TEST_F(GestureProviderTest, GestureTapWithDelay) {
base::TimeTicks event_time = base::TimeTicks::Now();
- int motion_event_id = 0;
+ int motion_event_id = 6;
int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN | EF_CAPS_LOCK_DOWN;
gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -478,7 +479,7 @@ TEST_F(GestureProviderTest, GestureTapWithDelay) {
event = ObtainMotionEvent(event_time + kOneMicrosecond,
MotionEvent::ACTION_UP);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -490,22 +491,25 @@ TEST_F(GestureProviderTest, GestureTapWithDelay) {
EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
GetMostRecentGestureEvent().details.bounding_box());
+ EXPECT_EQ(event.GetEventTime(), GetMostRecentGestureEvent().time);
EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP));
RunTasksAndWait(GetDoubleTapTimeout());
EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP));
+ EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
+ EXPECT_EQ(event.GetEventTime(), GetMostRecentGestureEvent().time);
}
// Verify that a DOWN followed by a MOVE will trigger fling (but not LONG).
TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
base::TimeTicks event_time = TimeTicks::Now();
base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
- int motion_event_id = 0;
+ int motion_event_id = 6;
int motion_event_flags = EF_ALT_DOWN;
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -518,7 +522,7 @@ TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
MotionEvent::ACTION_MOVE,
kFakeCoordX * 10,
kFakeCoordY * 10);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -526,7 +530,7 @@ TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
MotionEvent::ACTION_UP,
kFakeCoordX * 10,
kFakeCoordY * 10);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.set_flags(motion_event_flags);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -563,11 +567,11 @@ TEST_F(GestureProviderTest, ScrollEventActionCancelSequence) {
TEST_F(GestureProviderTest, FlingEventSequence) {
base::TimeTicks event_time = base::TimeTicks::Now();
base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
- int motion_event_id = 0;
+ int motion_event_id = 6;
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
@@ -575,7 +579,7 @@ TEST_F(GestureProviderTest, FlingEventSequence) {
MotionEvent::ACTION_MOVE,
kFakeCoordX * 5,
kFakeCoordY * 5);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
@@ -597,7 +601,7 @@ TEST_F(GestureProviderTest, FlingEventSequence) {
MotionEvent::ACTION_UP,
kFakeCoordX * 10,
kFakeCoordY * 10);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
@@ -609,7 +613,7 @@ TEST_F(GestureProviderTest, FlingEventSequence) {
<< "FlingStart should have the time of the ACTION_UP";
}
-TEST_F(GestureProviderTest, GestureCancelledWhenWindowFocusLost) {
+TEST_F(GestureProviderTest, GestureCancelledOnCancelEvent) {
const base::TimeTicks event_time = TimeTicks::Now();
MockMotionEvent event =
@@ -622,7 +626,8 @@ TEST_F(GestureProviderTest, GestureCancelledWhenWindowFocusLost) {
EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS));
EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
- // The long press triggers window focus loss by opening a context menu.
+ // A cancellation event may be triggered for a number of reasons, e.g.,
+ // from a context-menu-triggering long press resulting in loss of focus.
EXPECT_TRUE(CancelActiveTouchSequence());
EXPECT_FALSE(HasDownEvent());
@@ -632,6 +637,28 @@ TEST_F(GestureProviderTest, GestureCancelledWhenWindowFocusLost) {
EXPECT_FALSE(gesture_provider_->OnTouchEvent(event));
}
+TEST_F(GestureProviderTest, GestureCancelledOnDetectionReset) {
+ const base::TimeTicks event_time = TimeTicks::Now();
+
+ MockMotionEvent event =
+ ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
+ EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
+ EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
+
+ RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() +
+ kOneMicrosecond);
+ EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS));
+ EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
+
+ ResetGestureDetection();
+ EXPECT_FALSE(HasDownEvent());
+
+ // A final ACTION_UP should have no effect.
+ event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
+ MotionEvent::ACTION_UP);
+ EXPECT_FALSE(gesture_provider_->OnTouchEvent(event));
+}
+
TEST_F(GestureProviderTest, NoTapAfterScrollBegins) {
base::TimeTicks event_time = base::TimeTicks::Now();
@@ -841,7 +868,7 @@ TEST_F(GestureProviderTest, FractionalScroll) {
// Now move up slowly, mostly vertically but with a (fractional) bit of
// horizontal motion.
- for(int i = 1; i <= 10; i++) {
+ for (int i = 1; i <= 10; i++) {
event = ObtainMotionEvent(event_time + kOneMicrosecond * i,
MotionEvent::ACTION_MOVE,
kFakeCoordX + delta_x * i,
@@ -898,7 +925,7 @@ TEST_F(GestureProviderTest, ScrollBeginValues) {
EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
const GestureEventData* scroll_begin_gesture = GetActiveScrollBeginEvent();
- ASSERT_TRUE(!!scroll_begin_gesture);
+ ASSERT_TRUE(scroll_begin_gesture);
EXPECT_EQ(delta_x, scroll_begin_gesture->details.scroll_x_hint());
EXPECT_EQ(delta_y, scroll_begin_gesture->details.scroll_y_hint());
}
@@ -985,7 +1012,7 @@ TEST_F(GestureProviderTest, GestureLongPressDoesNotPreventScrolling) {
TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
base::TimeTicks event_time = base::TimeTicks::Now();
- int motion_event_id = 0;
+ int motion_event_id = 6;
MockMotionEvent event = ObtainMotionEvent(
event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
@@ -1018,7 +1045,7 @@ TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
MotionEvent::ACTION_MOVE,
kFakeCoordX + 20,
kFakeCoordY + 20);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
@@ -1030,7 +1057,7 @@ TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
MotionEvent::ACTION_UP,
kFakeCoordX,
kFakeCoordY + 1);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
@@ -1464,7 +1491,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
const float touch_slop = GetTouchSlop();
const float raw_offset_x = 3.2f;
const float raw_offset_y = 4.3f;
- int motion_event_id = 0;
+ int motion_event_id = 6;
gesture_provider_->SetDoubleTapSupportForPageEnabled(false);
gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
@@ -1475,7 +1502,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.SetRawOffset(raw_offset_x, raw_offset_y);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
@@ -1496,7 +1523,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
kFakeCoordY,
secondary_coord_x,
secondary_coord_y);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.SetRawOffset(raw_offset_x, raw_offset_y);
gesture_provider_->OnTouchEvent(event);
@@ -1513,7 +1540,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
kFakeCoordY,
secondary_coord_x,
secondary_coord_y);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
event.SetRawOffset(raw_offset_x, raw_offset_y);
// Toggling double-tap support should not take effect until the next sequence.
@@ -1548,7 +1575,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
kFakeCoordY,
secondary_coord_x,
secondary_coord_y);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
// Toggling double-tap support should not take effect until the next sequence.
gesture_provider_->SetDoubleTapSupportForPageEnabled(true);
@@ -1572,7 +1599,7 @@ TEST_F(GestureProviderTest, PinchZoom) {
kFakeCoordY,
secondary_coord_x,
secondary_coord_y);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
@@ -1811,14 +1838,14 @@ TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) {
// gesture sequence cancellation.
TEST_F(GestureProviderTest, CancelActiveTouchSequence) {
base::TimeTicks event_time = base::TimeTicks::Now();
- int motion_event_id = 0;
+ int motion_event_id = 6;
EXPECT_FALSE(CancelActiveTouchSequence());
EXPECT_EQ(0U, GetReceivedGestureCount());
MockMotionEvent event =
ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
- event.set_id(++motion_event_id);
+ event.SetPrimaryPointerId(motion_event_id);
EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
@@ -2126,13 +2153,14 @@ TEST_F(GestureProviderTest, TwoFingerTap) {
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(0).type());
EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type());
- EXPECT_EQ(ET_GESTURE_TWO_FINGER_TAP, GetReceivedGesture(2).type());
- EXPECT_EQ(3U, GetReceivedGestureCount());
+ EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetReceivedGesture(2).type());
+ EXPECT_EQ(ET_GESTURE_TWO_FINGER_TAP, GetReceivedGesture(3).type());
+ EXPECT_EQ(4U, GetReceivedGestureCount());
EXPECT_EQ(kMockTouchRadius * 2,
- GetReceivedGesture(2).details.first_finger_width());
+ GetReceivedGesture(3).details.first_finger_width());
EXPECT_EQ(kMockTouchRadius * 2,
- GetReceivedGesture(2).details.first_finger_height());
+ GetReceivedGesture(3).details.first_finger_height());
}
// Test preventing a two finger tap via finger movement.
@@ -2171,7 +2199,11 @@ TEST_F(GestureProviderTest, TwoFingerTapCancelledByFingerMovement) {
EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(0).type());
EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type());
- EXPECT_EQ(2U, GetReceivedGestureCount());
+ EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetReceivedGesture(2).type());
+ EXPECT_FLOAT_EQ((scaled_touch_slop + 0.1) / 2,
+ GetReceivedGesture(2).details.scroll_x());
+ EXPECT_EQ(0, GetReceivedGesture(2).details.scroll_y());
+ EXPECT_EQ(3U, GetReceivedGestureCount());
}
// Test preventing a two finger tap by waiting too long before releasing the
« no previous file with comments | « ui/events/gesture_detection/gesture_provider_config_helper.cc ('k') | ui/events/gesture_detection/motion_event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698