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

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

Issue 1645613007: Redefined the bit WebTouchEvent.causesScrollingIfUncanceled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed an aura unittest. Created 4 years, 10 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/filtered_gesture_provider_unittest.cc
diff --git a/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
index 4514946ccc7eca5d3e5398f927d65554f417baac..d3e10f637dbea59549228a9054b4e446e27da460 100644
--- a/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
+++ b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
@@ -22,63 +22,133 @@ class FilteredGestureProviderTest : public GestureProviderClient,
base::MessageLoopForUI message_loop_;
};
-TEST_F(FilteredGestureProviderTest, TouchDidGenerateScroll) {
+// Single touch drag test: After touch-start, the moved_beyond_slop_region bit
+// should stay unset as long as the touch movement is confined to the slop
+// region. Once the touch moves beyond the slop region, the bit should remain
+// set until (incl) touch-end.
+TEST_F(FilteredGestureProviderTest, TouchMovedBeyondSlopRegion_SingleTouch) {
GestureProvider::Config config;
FilteredGestureProvider provider(config, this);
const float kSlopRegion = config.gesture_detector_config.touch_slop;
test::MockMotionEvent event;
+
event.set_event_time(base::TimeTicks::Now());
event.PressPoint(0, 0);
auto result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_FALSE(result.did_generate_scroll);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
event.MovePoint(0, kSlopRegion / 2.f, 0);
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_FALSE(result.did_generate_scroll);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
- // Exceeding the slop should triggering scrolling and be reflected in the API.
event.MovePoint(0, kSlopRegion * 2.f, 0);
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_TRUE(result.did_generate_scroll);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
- // No movement should indicate no scrolling.
event.MovePoint(0, kSlopRegion * 2.f, 0);
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_FALSE(result.did_generate_scroll);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
- // Nonzero movement should reflect scrolling after exceeding the slop region.
event.MovePoint(0, 0, 0);
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_TRUE(result.did_generate_scroll);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
- // Ending a touch with no fling should not indicate scrolling.
event.ReleasePoint();
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_FALSE(result.did_generate_scroll);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
- // Ending a touch with a fling *should* indicate scrolling.
+ // A new touch sequence should reset the bit.
base::TimeTicks time = base::TimeTicks::Now();
event.PressPoint(0, 0);
event.set_event_time(time);
- ASSERT_TRUE(provider.OnTouchEvent(event).succeeded);
+ result = provider.OnTouchEvent(event);
+ ASSERT_TRUE(result.succeeded);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
+ // A fling should set the bit right away.
time += base::TimeDelta::FromMilliseconds(10);
event.MovePoint(0, kSlopRegion * 50, 0);
event.set_event_time(time);
- ASSERT_TRUE(provider.OnTouchEvent(event).succeeded);
+ result = provider.OnTouchEvent(event);
+ ASSERT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
event.ReleasePoint();
result = provider.OnTouchEvent(event);
EXPECT_TRUE(result.succeeded);
- EXPECT_TRUE(result.did_generate_scroll);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+}
+
+// Multi-touch: The moved_beyond_slop_region bit should stay unset as long as
+// all touch-points are stationary, and should be set after (including) the
+// first movement in any touch-point.
+TEST_F(FilteredGestureProviderTest, TouchMovedBeyondSlopRegion_MultiTouch) {
+ GestureProvider::Config config;
+ FilteredGestureProvider provider(config, this);
+
+ const float kSlopRegion = config.gesture_detector_config.touch_slop;
+
+ test::MockMotionEvent event;
+
+ float x = 0;
+ const float y0 = 0;
+ const float y1 = kSlopRegion * 10.f;
+ const float y2 = kSlopRegion * 20.f;
+
+ event.set_event_time(base::TimeTicks::Now());
+ event.PressPoint(x, y0);
+ auto result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
+
+ event.PressPoint(x, y1);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
+
+ event.PressPoint(x, y2);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_FALSE(result.moved_beyond_slop_region);
+
+ for (float multiplier = 0.5f; multiplier < 3.f; multiplier += 2.f) {
+ x = kSlopRegion * multiplier;
+
+ event.MovePoint(0, x, y0);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+
+ event.MovePoint(0, x, y0);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+
+ event.MovePoint(2, x, y2);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+
+ event.MovePoint(1, x, y1);
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+ }
+
+ for(int i = 0; i < 3; i++) {
+ event.ReleasePoint();
+ result = provider.OnTouchEvent(event);
+ EXPECT_TRUE(result.succeeded);
+ EXPECT_TRUE(result.moved_beyond_slop_region);
+ }
}
} // namespace ui
« no previous file with comments | « ui/events/gesture_detection/filtered_gesture_provider.cc ('k') | ui/events/gestures/gesture_provider_aura.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698