OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 | 66 |
67 static MockMotionEvent ObtainMotionEvent(base::TimeTicks event_time, | 67 static MockMotionEvent ObtainMotionEvent(base::TimeTicks event_time, |
68 MotionEvent::Action action, | 68 MotionEvent::Action action, |
69 float x0, | 69 float x0, |
70 float y0, | 70 float y0, |
71 float x1, | 71 float x1, |
72 float y1) { | 72 float y1) { |
73 return MockMotionEvent(action, event_time, x0, y0, x1, y1); | 73 return MockMotionEvent(action, event_time, x0, y0, x1, y1); |
74 } | 74 } |
75 | 75 |
| 76 static MockMotionEvent ObtainMotionEvent( |
| 77 base::TimeTicks event_time, |
| 78 MotionEvent::Action action, |
| 79 const std::vector<gfx::PointF>& positions) { |
| 80 switch (positions.size()) { |
| 81 case 1: |
| 82 return MockMotionEvent( |
| 83 action, event_time, positions[0].x(), positions[0].y()); |
| 84 case 2: |
| 85 return MockMotionEvent(action, |
| 86 event_time, |
| 87 positions[0].x(), |
| 88 positions[0].y(), |
| 89 positions[1].x(), |
| 90 positions[1].y()); |
| 91 case 3: |
| 92 return MockMotionEvent(action, |
| 93 event_time, |
| 94 positions[0].x(), |
| 95 positions[0].y(), |
| 96 positions[1].x(), |
| 97 positions[1].y(), |
| 98 positions[2].x(), |
| 99 positions[2].y()); |
| 100 default: |
| 101 CHECK(false) << "MockMotionEvent only supports 1-3 pointers"; |
| 102 return MockMotionEvent(); |
| 103 } |
| 104 } |
| 105 |
76 static MockMotionEvent ObtainMotionEvent(base::TimeTicks event_time, | 106 static MockMotionEvent ObtainMotionEvent(base::TimeTicks event_time, |
77 MotionEvent::Action action) { | 107 MotionEvent::Action action) { |
78 return ObtainMotionEvent(event_time, action, kFakeCoordX, kFakeCoordY); | 108 return ObtainMotionEvent(event_time, action, kFakeCoordX, kFakeCoordY); |
79 } | 109 } |
80 | 110 |
81 // Test | 111 // Test |
82 virtual void SetUp() OVERRIDE { | 112 virtual void SetUp() OVERRIDE { SetUpWithConfig(GetDefaultConfig()); } |
83 gesture_provider_.reset(new GestureProvider(GetDefaultConfig(), this)); | |
84 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); | |
85 } | |
86 | 113 |
87 virtual void TearDown() OVERRIDE { | 114 virtual void TearDown() OVERRIDE { |
88 gestures_.clear(); | 115 gestures_.clear(); |
89 gesture_provider_.reset(); | 116 gesture_provider_.reset(); |
90 } | 117 } |
91 | 118 |
92 // GestureProviderClient | 119 // GestureProviderClient |
93 virtual void OnGestureEvent(const GestureEventData& gesture) OVERRIDE { | 120 virtual void OnGestureEvent(const GestureEventData& gesture) OVERRIDE { |
94 if (gesture.type == ET_GESTURE_SCROLL_BEGIN) | 121 if (gesture.type == ET_GESTURE_SCROLL_BEGIN) |
95 active_scroll_begin_event_.reset(new GestureEventData(gesture)); | 122 active_scroll_begin_event_.reset(new GestureEventData(gesture)); |
96 gestures_.push_back(gesture); | 123 gestures_.push_back(gesture); |
97 } | 124 } |
98 | 125 |
| 126 void SetUpWithConfig(const GestureProvider::Config& config) { |
| 127 gesture_provider_.reset(new GestureProvider(config, this)); |
| 128 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); |
| 129 } |
| 130 |
| 131 void ResetGestureDetection() { |
| 132 CancelActiveTouchSequence(); |
| 133 gestures_.clear(); |
| 134 } |
99 bool CancelActiveTouchSequence() { | 135 bool CancelActiveTouchSequence() { |
100 if (!gesture_provider_->current_down_event()) | 136 if (!gesture_provider_->current_down_event()) |
101 return false; | 137 return false; |
102 return gesture_provider_->OnTouchEvent( | 138 return gesture_provider_->OnTouchEvent( |
103 *gesture_provider_->current_down_event()->Cancel()); | 139 *gesture_provider_->current_down_event()->Cancel()); |
104 } | 140 } |
105 | 141 |
106 bool HasReceivedGesture(EventType type) const { | 142 bool HasReceivedGesture(EventType type) const { |
107 for (size_t i = 0; i < gestures_.size(); ++i) { | 143 for (size_t i = 0; i < gestures_.size(); ++i) { |
108 if (gestures_[i].type == type) | 144 if (gestures_[i].type == type) |
(...skipping 25 matching lines...) Expand all Loading... |
134 | 170 |
135 const GestureProvider::Config& GetDefaultConfig() const { | 171 const GestureProvider::Config& GetDefaultConfig() const { |
136 static GestureProvider::Config sConfig = CreateDefaultConfig(); | 172 static GestureProvider::Config sConfig = CreateDefaultConfig(); |
137 return sConfig; | 173 return sConfig; |
138 } | 174 } |
139 | 175 |
140 float GetTouchSlop() const { | 176 float GetTouchSlop() const { |
141 return GetDefaultConfig().gesture_detector_config.touch_slop; | 177 return GetDefaultConfig().gesture_detector_config.touch_slop; |
142 } | 178 } |
143 | 179 |
| 180 float GetMinSwipeVelocity() const { |
| 181 return GetDefaultConfig().gesture_detector_config.minimum_swipe_velocity; |
| 182 } |
| 183 |
144 base::TimeDelta GetLongPressTimeout() const { | 184 base::TimeDelta GetLongPressTimeout() const { |
145 return GetDefaultConfig().gesture_detector_config.longpress_timeout; | 185 return GetDefaultConfig().gesture_detector_config.longpress_timeout; |
146 } | 186 } |
147 | 187 |
148 base::TimeDelta GetShowPressTimeout() const { | 188 base::TimeDelta GetShowPressTimeout() const { |
149 return GetDefaultConfig().gesture_detector_config.showpress_timeout; | 189 return GetDefaultConfig().gesture_detector_config.showpress_timeout; |
150 } | 190 } |
151 | 191 |
152 void SetBeginEndTypesEnabled(bool enabled) { | 192 void EnableBeginEndTypes() { |
153 GestureProvider::Config config = GetDefaultConfig(); | 193 GestureProvider::Config config = GetDefaultConfig(); |
154 config.gesture_begin_end_types_enabled = true; | 194 config.gesture_begin_end_types_enabled = true; |
155 gesture_provider_.reset(new GestureProvider(config, this)); | 195 SetUpWithConfig(config); |
156 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); | 196 } |
| 197 |
| 198 void EnableMultiFingerSwipe() { |
| 199 GestureProvider::Config config = GetDefaultConfig(); |
| 200 config.gesture_detector_config.swipe_enabled = true; |
| 201 SetUpWithConfig(config); |
157 } | 202 } |
158 | 203 |
159 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } | 204 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } |
160 | 205 |
161 protected: | 206 protected: |
162 void CheckScrollEventSequenceForEndActionType( | 207 void CheckScrollEventSequenceForEndActionType( |
163 MotionEvent::Action end_action_type) { | 208 MotionEvent::Action end_action_type) { |
164 base::TimeTicks event_time = base::TimeTicks::Now(); | 209 base::TimeTicks event_time = base::TimeTicks::Now(); |
165 const float scroll_to_x = kFakeCoordX + 100; | 210 const float scroll_to_x = kFakeCoordX + 100; |
166 const float scroll_to_y = kFakeCoordY + 100; | 211 const float scroll_to_y = kFakeCoordY + 100; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 gesture_provider_->OnTouchEvent(event); | 246 gesture_provider_->OnTouchEvent(event); |
202 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); | 247 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); |
203 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); | 248 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); |
204 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 249 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
205 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 250 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
206 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 251 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
207 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), | 252 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), |
208 GetMostRecentGestureEvent().details.bounding_box()); | 253 GetMostRecentGestureEvent().details.bounding_box()); |
209 } | 254 } |
210 | 255 |
| 256 void TwoFingerSwipe(float vx0, float vy0, float vx1, float vy1) { |
| 257 std::vector<gfx::Vector2dF> velocities; |
| 258 velocities.push_back(gfx::Vector2dF(vx0, vy0)); |
| 259 velocities.push_back(gfx::Vector2dF(vx1, vy1)); |
| 260 MultiFingerSwipe(velocities); |
| 261 } |
| 262 |
| 263 void ThreeFingerSwipe(float vx0, |
| 264 float vy0, |
| 265 float vx1, |
| 266 float vy1, |
| 267 float vx2, |
| 268 float vy2) { |
| 269 std::vector<gfx::Vector2dF> velocities; |
| 270 velocities.push_back(gfx::Vector2dF(vx0, vy0)); |
| 271 velocities.push_back(gfx::Vector2dF(vx1, vy1)); |
| 272 velocities.push_back(gfx::Vector2dF(vx2, vy2)); |
| 273 MultiFingerSwipe(velocities); |
| 274 } |
| 275 |
| 276 void MultiFingerSwipe(std::vector<gfx::Vector2dF> velocities) { |
| 277 ASSERT_GT(velocities.size(), 0U); |
| 278 |
| 279 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 280 |
| 281 std::vector<gfx::PointF> positions(velocities.size()); |
| 282 for (size_t i = 0; i < positions.size(); ++i) |
| 283 positions[i] = gfx::PointF(kFakeCoordX * (i + 1), kFakeCoordY * (i + 1)); |
| 284 |
| 285 float dt = kDeltaTimeForFlingSequences.InSecondsF(); |
| 286 |
| 287 // Each pointer down should be a separate event. |
| 288 for (size_t i = 0; i < positions.size(); ++i) { |
| 289 const size_t pointer_count = i + 1; |
| 290 std::vector<gfx::PointF> event_positions(pointer_count); |
| 291 event_positions.assign(positions.begin(), |
| 292 positions.begin() + pointer_count); |
| 293 MockMotionEvent event = |
| 294 ObtainMotionEvent(event_time, |
| 295 pointer_count > 1 ? MotionEvent::ACTION_POINTER_DOWN |
| 296 : MotionEvent::ACTION_DOWN, |
| 297 event_positions); |
| 298 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 299 } |
| 300 |
| 301 for (size_t i = 0; i < positions.size(); ++i) |
| 302 positions[i] += gfx::ScaleVector2d(velocities[i], dt); |
| 303 MockMotionEvent event = |
| 304 ObtainMotionEvent(event_time + kDeltaTimeForFlingSequences, |
| 305 MotionEvent::ACTION_MOVE, |
| 306 positions); |
| 307 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 308 |
| 309 for (size_t i = 0; i < positions.size(); ++i) |
| 310 positions[i] += gfx::ScaleVector2d(velocities[i], dt); |
| 311 event = ObtainMotionEvent(event_time + 2 * kDeltaTimeForFlingSequences, |
| 312 MotionEvent::ACTION_MOVE, |
| 313 positions); |
| 314 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 315 |
| 316 event = ObtainMotionEvent(event_time + 2 * kDeltaTimeForFlingSequences, |
| 317 MotionEvent::ACTION_POINTER_UP, |
| 318 positions); |
| 319 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 320 } |
| 321 |
211 static void RunTasksAndWait(base::TimeDelta delay) { | 322 static void RunTasksAndWait(base::TimeDelta delay) { |
212 base::MessageLoop::current()->PostDelayedTask( | 323 base::MessageLoop::current()->PostDelayedTask( |
213 FROM_HERE, base::MessageLoop::QuitClosure(), delay); | 324 FROM_HERE, base::MessageLoop::QuitClosure(), delay); |
214 base::MessageLoop::current()->Run(); | 325 base::MessageLoop::current()->Run(); |
215 } | 326 } |
216 | 327 |
217 std::vector<GestureEventData> gestures_; | 328 std::vector<GestureEventData> gestures_; |
218 scoped_ptr<GestureProvider> gesture_provider_; | 329 scoped_ptr<GestureProvider> gesture_provider_; |
219 scoped_ptr<GestureEventData> active_scroll_begin_event_; | 330 scoped_ptr<GestureEventData> active_scroll_begin_event_; |
220 base::MessageLoopForUI message_loop_; | 331 base::MessageLoopForUI message_loop_; |
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1310 gesture_provider_->OnTouchEvent(event); | 1421 gesture_provider_->OnTouchEvent(event); |
1311 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 1422 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
1312 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 1423 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
1313 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, | 1424 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, |
1314 kFakeCoordY - kMockTouchRadius, | 1425 kFakeCoordY - kMockTouchRadius, |
1315 kMockTouchRadius * 2, | 1426 kMockTouchRadius * 2, |
1316 kMockTouchRadius * 2), | 1427 kMockTouchRadius * 2), |
1317 GetMostRecentGestureEvent().details.bounding_box()); | 1428 GetMostRecentGestureEvent().details.bounding_box()); |
1318 } | 1429 } |
1319 | 1430 |
| 1431 // Verify that multi-finger swipe sends the proper event sequence. |
| 1432 TEST_F(GestureProviderTest, MultiFingerSwipe) { |
| 1433 EnableMultiFingerSwipe(); |
| 1434 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); |
| 1435 const float min_swipe_velocity = GetMinSwipeVelocity(); |
| 1436 |
| 1437 // Swipe right. |
| 1438 TwoFingerSwipe(min_swipe_velocity * 2, 0, min_swipe_velocity * 2, 0); |
| 1439 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1440 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1441 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1442 ResetGestureDetection(); |
| 1443 |
| 1444 // Swipe left. |
| 1445 TwoFingerSwipe(-min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); |
| 1446 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1447 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_left()); |
| 1448 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1449 ResetGestureDetection(); |
| 1450 |
| 1451 // No swipe with different touch directions. |
| 1452 TwoFingerSwipe(min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); |
| 1453 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1454 ResetGestureDetection(); |
| 1455 |
| 1456 // No swipe without a dominant direction. |
| 1457 TwoFingerSwipe(min_swipe_velocity * 2, |
| 1458 min_swipe_velocity * 2, |
| 1459 min_swipe_velocity * 2, |
| 1460 min_swipe_velocity * 2); |
| 1461 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1462 ResetGestureDetection(); |
| 1463 |
| 1464 // Swipe up with non-zero velocities on both axes and dominant direction. |
| 1465 TwoFingerSwipe(-min_swipe_velocity, |
| 1466 min_swipe_velocity * 4, |
| 1467 -min_swipe_velocity, |
| 1468 min_swipe_velocity * 4); |
| 1469 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1470 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); |
| 1471 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_left()); |
| 1472 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1473 ResetGestureDetection(); |
| 1474 |
| 1475 // Swipe down with non-zero velocities on both axes. |
| 1476 TwoFingerSwipe(min_swipe_velocity, |
| 1477 -min_swipe_velocity * 4, |
| 1478 min_swipe_velocity, |
| 1479 -min_swipe_velocity * 4); |
| 1480 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1481 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_up()); |
| 1482 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1483 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1484 ResetGestureDetection(); |
| 1485 |
| 1486 // No swipe without sufficient velocity. |
| 1487 TwoFingerSwipe(min_swipe_velocity / 2, 0, 0, 0); |
| 1488 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1489 ResetGestureDetection(); |
| 1490 |
| 1491 // Swipe up with one small and one medium velocity in slightly different but |
| 1492 // not opposing directions. |
| 1493 TwoFingerSwipe(min_swipe_velocity / 2, |
| 1494 min_swipe_velocity / 2, |
| 1495 0, |
| 1496 min_swipe_velocity * 2); |
| 1497 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1498 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); |
| 1499 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1500 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1501 ResetGestureDetection(); |
| 1502 |
| 1503 // No swipe in orthogonal directions. |
| 1504 TwoFingerSwipe(min_swipe_velocity * 2, 0, 0, min_swipe_velocity * 7); |
| 1505 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1506 ResetGestureDetection(); |
| 1507 |
| 1508 // Three finger swipe in same directions. |
| 1509 ThreeFingerSwipe(min_swipe_velocity * 2, |
| 1510 0, |
| 1511 min_swipe_velocity * 3, |
| 1512 0, |
| 1513 min_swipe_velocity * 4, |
| 1514 0); |
| 1515 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1516 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1517 EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); |
| 1518 ResetGestureDetection(); |
| 1519 |
| 1520 // No three finger swipe in different directions. |
| 1521 ThreeFingerSwipe(min_swipe_velocity * 2, |
| 1522 0, |
| 1523 0, |
| 1524 min_swipe_velocity * 3, |
| 1525 min_swipe_velocity * 4, |
| 1526 0); |
| 1527 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); |
| 1528 } |
| 1529 |
1320 // Verify that the timer of LONG_PRESS will be cancelled when scrolling begins | 1530 // Verify that the timer of LONG_PRESS will be cancelled when scrolling begins |
1321 // so LONG_PRESS and LONG_TAP won't be triggered. | 1531 // so LONG_PRESS and LONG_TAP won't be triggered. |
1322 TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) { | 1532 TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) { |
1323 base::TimeTicks event_time = base::TimeTicks::Now(); | 1533 base::TimeTicks event_time = base::TimeTicks::Now(); |
1324 | 1534 |
1325 MockMotionEvent event = | 1535 MockMotionEvent event = |
1326 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 1536 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
1327 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1537 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1328 | 1538 |
1329 const base::TimeDelta long_press_timeout = | 1539 const base::TimeDelta long_press_timeout = |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1432 event = ObtainMotionEvent(down_time_2 + kOneSecond, | 1642 event = ObtainMotionEvent(down_time_2 + kOneSecond, |
1433 MotionEvent::ACTION_UP); | 1643 MotionEvent::ACTION_UP); |
1434 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1644 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1435 EXPECT_EQ(gesture_count + 1, GetReceivedGestureCount()); | 1645 EXPECT_EQ(gesture_count + 1, GetReceivedGestureCount()); |
1436 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 1646 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
1437 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 1647 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
1438 } | 1648 } |
1439 | 1649 |
1440 // Verify that gesture begin and gesture end events are dispatched correctly. | 1650 // Verify that gesture begin and gesture end events are dispatched correctly. |
1441 TEST_F(GestureProviderTest, GestureBeginAndEnd) { | 1651 TEST_F(GestureProviderTest, GestureBeginAndEnd) { |
1442 SetBeginEndTypesEnabled(true); | 1652 EnableBeginEndTypes(); |
1443 base::TimeTicks event_time = base::TimeTicks::Now(); | 1653 base::TimeTicks event_time = base::TimeTicks::Now(); |
1444 | 1654 |
1445 EXPECT_EQ(0U, GetReceivedGestureCount()); | 1655 EXPECT_EQ(0U, GetReceivedGestureCount()); |
1446 MockMotionEvent event = | 1656 MockMotionEvent event = |
1447 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 1657 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
1448 event.pointer_count = 1; | 1658 event.pointer_count = 1; |
1449 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1659 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1450 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); | 1660 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); |
1451 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1661 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
1452 EXPECT_EQ(2U, GetReceivedGestureCount()); | 1662 EXPECT_EQ(2U, GetReceivedGestureCount()); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1516 | 1726 |
1517 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL); | 1727 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL); |
1518 event.pointer_count = 1; | 1728 event.pointer_count = 1; |
1519 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1729 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1520 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); | 1730 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
1521 EXPECT_EQ(12U, GetReceivedGestureCount()); | 1731 EXPECT_EQ(12U, GetReceivedGestureCount()); |
1522 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 1732 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
1523 } | 1733 } |
1524 | 1734 |
1525 } // namespace ui | 1735 } // namespace ui |
OLD | NEW |