| 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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 base::TimeDelta GetDoubleTapTimeout() const { | 193 base::TimeDelta GetDoubleTapTimeout() const { |
| 194 return GetDefaultConfig().gesture_detector_config.double_tap_timeout; | 194 return GetDefaultConfig().gesture_detector_config.double_tap_timeout; |
| 195 } | 195 } |
| 196 | 196 |
| 197 void EnableBeginEndTypes() { | 197 void EnableBeginEndTypes() { |
| 198 GestureProvider::Config config = GetDefaultConfig(); | 198 GestureProvider::Config config = GetDefaultConfig(); |
| 199 config.gesture_begin_end_types_enabled = true; | 199 config.gesture_begin_end_types_enabled = true; |
| 200 SetUpWithConfig(config); | 200 SetUpWithConfig(config); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void EnableMultiFingerSwipe() { | 203 void EnableSwipe() { |
| 204 GestureProvider::Config config = GetDefaultConfig(); | 204 GestureProvider::Config config = GetDefaultConfig(); |
| 205 config.gesture_detector_config.swipe_enabled = true; | 205 config.gesture_detector_config.swipe_enabled = true; |
| 206 SetUpWithConfig(config); | 206 SetUpWithConfig(config); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void EnableTwoFingerTap(float max_distance_for_two_finger_tap, | 209 void EnableTwoFingerTap(float max_distance_for_two_finger_tap, |
| 210 base::TimeDelta two_finger_tap_timeout) { | 210 base::TimeDelta two_finger_tap_timeout) { |
| 211 GestureProvider::Config config = GetDefaultConfig(); | 211 GestureProvider::Config config = GetDefaultConfig(); |
| 212 config.gesture_detector_config.two_finger_tap_enabled = true; | 212 config.gesture_detector_config.two_finger_tap_enabled = true; |
| 213 config.gesture_detector_config.two_finger_tap_max_separation = | 213 config.gesture_detector_config.two_finger_tap_max_separation = |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 gesture_provider_->OnTouchEvent(event); | 262 gesture_provider_->OnTouchEvent(event); |
| 263 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); | 263 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); |
| 264 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); | 264 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); |
| 265 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 265 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
| 266 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); | 266 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); |
| 267 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 267 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 268 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), | 268 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), |
| 269 GetMostRecentGestureEvent().details.bounding_box()); | 269 GetMostRecentGestureEvent().details.bounding_box()); |
| 270 } | 270 } |
| 271 | 271 |
| 272 void OneFingerSwipe(float vx, float vy) { |
| 273 std::vector<gfx::Vector2dF> velocities; |
| 274 velocities.push_back(gfx::Vector2dF(vx, vy)); |
| 275 MultiFingerSwipe(velocities); |
| 276 } |
| 277 |
| 272 void TwoFingerSwipe(float vx0, float vy0, float vx1, float vy1) { | 278 void TwoFingerSwipe(float vx0, float vy0, float vx1, float vy1) { |
| 273 std::vector<gfx::Vector2dF> velocities; | 279 std::vector<gfx::Vector2dF> velocities; |
| 274 velocities.push_back(gfx::Vector2dF(vx0, vy0)); | 280 velocities.push_back(gfx::Vector2dF(vx0, vy0)); |
| 275 velocities.push_back(gfx::Vector2dF(vx1, vy1)); | 281 velocities.push_back(gfx::Vector2dF(vx1, vy1)); |
| 276 MultiFingerSwipe(velocities); | 282 MultiFingerSwipe(velocities); |
| 277 } | 283 } |
| 278 | 284 |
| 279 void ThreeFingerSwipe(float vx0, | 285 void ThreeFingerSwipe(float vx0, |
| 280 float vy0, | 286 float vy0, |
| 281 float vx1, | 287 float vx1, |
| (...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 1447 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1442 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, | 1448 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, |
| 1443 kFakeCoordY - kMockTouchRadius, | 1449 kFakeCoordY - kMockTouchRadius, |
| 1444 kMockTouchRadius * 2, | 1450 kMockTouchRadius * 2, |
| 1445 kMockTouchRadius * 2), | 1451 kMockTouchRadius * 2), |
| 1446 GetMostRecentGestureEvent().details.bounding_box()); | 1452 GetMostRecentGestureEvent().details.bounding_box()); |
| 1447 } | 1453 } |
| 1448 | 1454 |
| 1449 // Verify that multi-finger swipe sends the proper event sequence. | 1455 // Verify that multi-finger swipe sends the proper event sequence. |
| 1450 TEST_F(GestureProviderTest, MultiFingerSwipe) { | 1456 TEST_F(GestureProviderTest, MultiFingerSwipe) { |
| 1451 EnableMultiFingerSwipe(); | 1457 EnableSwipe(); |
| 1452 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); | 1458 gesture_provider_->SetMultiTouchZoomSupportEnabled(false); |
| 1453 const float min_swipe_velocity = GetMinSwipeVelocity(); | 1459 const float min_swipe_velocity = GetMinSwipeVelocity(); |
| 1454 | 1460 |
| 1461 // One finger - swipe right |
| 1462 OneFingerSwipe(2 * min_swipe_velocity, 0); |
| 1463 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1464 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1465 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1466 ResetGestureDetection(); |
| 1467 |
| 1468 // One finger - swipe left |
| 1469 OneFingerSwipe(-2 * min_swipe_velocity, 0); |
| 1470 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1471 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_left()); |
| 1472 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1473 ResetGestureDetection(); |
| 1474 |
| 1475 // One finger - swipe down |
| 1476 OneFingerSwipe(0, 2 * min_swipe_velocity); |
| 1477 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1478 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); |
| 1479 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1480 ResetGestureDetection(); |
| 1481 |
| 1482 // One finger - swipe up |
| 1483 OneFingerSwipe(0, -2 * min_swipe_velocity); |
| 1484 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1485 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_up()); |
| 1486 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1487 ResetGestureDetection(); |
| 1488 |
| 1489 // Two fingers |
| 1455 // Swipe right. | 1490 // Swipe right. |
| 1456 TwoFingerSwipe(min_swipe_velocity * 2, 0, min_swipe_velocity * 2, 0); | 1491 TwoFingerSwipe(min_swipe_velocity * 2, 0, min_swipe_velocity * 2, 0); |
| 1457 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1492 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1458 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); | 1493 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1459 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | 1494 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1460 ResetGestureDetection(); | 1495 ResetGestureDetection(); |
| 1461 | 1496 |
| 1462 // Swipe left. | 1497 // Swipe left. |
| 1463 TwoFingerSwipe(-min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); | 1498 TwoFingerSwipe(-min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); |
| 1464 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1499 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1465 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_left()); | 1500 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_left()); |
| 1466 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | 1501 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1467 ResetGestureDetection(); | 1502 ResetGestureDetection(); |
| 1468 | 1503 |
| 1469 // No swipe with different touch directions. | 1504 // No swipe with different touch directions. |
| 1470 TwoFingerSwipe(min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); | 1505 TwoFingerSwipe(min_swipe_velocity * 2, 0, -min_swipe_velocity * 2, 0); |
| 1471 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1506 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1472 ResetGestureDetection(); | 1507 ResetGestureDetection(); |
| 1473 | 1508 |
| 1474 // No swipe without a dominant direction. | 1509 // No swipe without a dominant direction. |
| 1475 TwoFingerSwipe(min_swipe_velocity * 2, | 1510 TwoFingerSwipe(min_swipe_velocity * 2, |
| 1476 min_swipe_velocity * 2, | 1511 min_swipe_velocity * 2, |
| 1477 min_swipe_velocity * 2, | 1512 min_swipe_velocity * 2, |
| 1478 min_swipe_velocity * 2); | 1513 min_swipe_velocity * 2); |
| 1479 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1514 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1480 ResetGestureDetection(); | 1515 ResetGestureDetection(); |
| 1481 | 1516 |
| 1482 // Swipe up with non-zero velocities on both axes and dominant direction. | 1517 // Swipe down with non-zero velocities on both axes and dominant direction. |
| 1483 TwoFingerSwipe(-min_swipe_velocity, | 1518 TwoFingerSwipe(-min_swipe_velocity, |
| 1484 min_swipe_velocity * 4, | 1519 min_swipe_velocity * 4, |
| 1485 -min_swipe_velocity, | 1520 -min_swipe_velocity, |
| 1486 min_swipe_velocity * 4); | 1521 min_swipe_velocity * 4); |
| 1487 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1522 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1488 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); | 1523 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); |
| 1489 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_left()); | 1524 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_left()); |
| 1490 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | 1525 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1491 ResetGestureDetection(); | 1526 ResetGestureDetection(); |
| 1492 | 1527 |
| 1493 // Swipe down with non-zero velocities on both axes. | 1528 // Swipe up with non-zero velocities on both axes. |
| 1494 TwoFingerSwipe(min_swipe_velocity, | 1529 TwoFingerSwipe(min_swipe_velocity, |
| 1495 -min_swipe_velocity * 4, | 1530 -min_swipe_velocity * 4, |
| 1496 min_swipe_velocity, | 1531 min_swipe_velocity, |
| 1497 -min_swipe_velocity * 4); | 1532 -min_swipe_velocity * 4); |
| 1498 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1533 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1499 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_up()); | 1534 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_up()); |
| 1500 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); | 1535 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1501 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | 1536 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1502 ResetGestureDetection(); | 1537 ResetGestureDetection(); |
| 1503 | 1538 |
| 1504 // No swipe without sufficient velocity. | 1539 // No swipe without sufficient velocity. |
| 1505 TwoFingerSwipe(min_swipe_velocity / 2, 0, 0, 0); | 1540 TwoFingerSwipe(min_swipe_velocity / 2, 0, 0, 0); |
| 1506 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1541 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1507 ResetGestureDetection(); | 1542 ResetGestureDetection(); |
| 1508 | 1543 |
| 1509 // Swipe up with one small and one medium velocity in slightly different but | 1544 // Swipe up with one small and one medium velocity in slightly different but |
| 1510 // not opposing directions. | 1545 // not opposing directions. |
| 1511 TwoFingerSwipe(min_swipe_velocity / 2, | 1546 TwoFingerSwipe(min_swipe_velocity / 2, |
| 1512 min_swipe_velocity / 2, | 1547 min_swipe_velocity / 2, |
| 1513 0, | 1548 0, |
| 1514 min_swipe_velocity * 2); | 1549 min_swipe_velocity * 2); |
| 1515 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1550 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1516 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); | 1551 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_down()); |
| 1517 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); | 1552 EXPECT_FALSE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1518 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | 1553 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); |
| 1519 ResetGestureDetection(); | 1554 ResetGestureDetection(); |
| 1520 | 1555 |
| 1521 // No swipe in orthogonal directions. | 1556 // No swipe in orthogonal directions. |
| 1522 TwoFingerSwipe(min_swipe_velocity * 2, 0, 0, min_swipe_velocity * 7); | 1557 TwoFingerSwipe(min_swipe_velocity * 2, 0, 0, min_swipe_velocity * 7); |
| 1523 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1558 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1524 ResetGestureDetection(); | 1559 ResetGestureDetection(); |
| 1525 | 1560 |
| 1526 // Three finger swipe in same directions. | 1561 // Three finger swipe in same directions. |
| 1527 ThreeFingerSwipe(min_swipe_velocity * 2, | 1562 ThreeFingerSwipe(min_swipe_velocity * 2, |
| 1528 0, | 1563 0, |
| 1529 min_swipe_velocity * 3, | 1564 min_swipe_velocity * 3, |
| 1530 0, | 1565 0, |
| 1531 min_swipe_velocity * 4, | 1566 min_swipe_velocity * 4, |
| 1532 0); | 1567 0); |
| 1533 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1568 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1534 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); | 1569 EXPECT_TRUE(GetMostRecentGestureEvent().details.swipe_right()); |
| 1535 EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); | 1570 EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points()); |
| 1536 ResetGestureDetection(); | 1571 ResetGestureDetection(); |
| 1537 | 1572 |
| 1538 // No three finger swipe in different directions. | 1573 // No three finger swipe in different directions. |
| 1539 ThreeFingerSwipe(min_swipe_velocity * 2, | 1574 ThreeFingerSwipe(min_swipe_velocity * 2, |
| 1540 0, | 1575 0, |
| 1541 0, | 1576 0, |
| 1542 min_swipe_velocity * 3, | 1577 min_swipe_velocity * 3, |
| 1543 min_swipe_velocity * 4, | 1578 min_swipe_velocity * 4, |
| 1544 0); | 1579 0); |
| 1545 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_MULTIFINGER_SWIPE)); | 1580 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SWIPE)); |
| 1546 } | 1581 } |
| 1547 | 1582 |
| 1548 // Verify that the timer of LONG_PRESS will be cancelled when scrolling begins | 1583 // Verify that the timer of LONG_PRESS will be cancelled when scrolling begins |
| 1549 // so LONG_PRESS and LONG_TAP won't be triggered. | 1584 // so LONG_PRESS and LONG_TAP won't be triggered. |
| 1550 TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) { | 1585 TEST_F(GestureProviderTest, GesturesCancelledAfterLongPressCausesLostFocus) { |
| 1551 base::TimeTicks event_time = base::TimeTicks::Now(); | 1586 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 1552 | 1587 |
| 1553 MockMotionEvent event = | 1588 MockMotionEvent event = |
| 1554 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 1589 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
| 1555 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1590 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1904 kFakeCoordY, | 1939 kFakeCoordY, |
| 1905 kFakeCoordX + kMaxTwoFingerTapSeparation, | 1940 kFakeCoordX + kMaxTwoFingerTapSeparation, |
| 1906 kFakeCoordY); | 1941 kFakeCoordY); |
| 1907 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1942 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 1908 | 1943 |
| 1909 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(0).type); | 1944 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(0).type); |
| 1910 EXPECT_EQ(1U, GetReceivedGestureCount()); | 1945 EXPECT_EQ(1U, GetReceivedGestureCount()); |
| 1911 } | 1946 } |
| 1912 | 1947 |
| 1913 } // namespace ui | 1948 } // namespace ui |
| OLD | NEW |