Chromium Code Reviews| 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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 min_pinch_update_span_delta; | 251 min_pinch_update_span_delta; |
| 252 SetUpWithConfig(config); | 252 SetUpWithConfig(config); |
| 253 } | 253 } |
| 254 | 254 |
| 255 void SetMinGestureBoundsLength(float min_gesture_bound_length) { | 255 void SetMinGestureBoundsLength(float min_gesture_bound_length) { |
| 256 GestureProvider::Config config = GetDefaultConfig(); | 256 GestureProvider::Config config = GetDefaultConfig(); |
| 257 config.min_gesture_bounds_length = min_gesture_bound_length; | 257 config.min_gesture_bounds_length = min_gesture_bound_length; |
| 258 SetUpWithConfig(config); | 258 SetUpWithConfig(config); |
| 259 } | 259 } |
| 260 | 260 |
| 261 void SetMaxGestureBoundsLength(float max_gesture_bound_length) { | |
| 262 GestureProvider::Config config = GetDefaultConfig(); | |
| 263 config.max_gesture_bounds_length = max_gesture_bound_length; | |
| 264 SetUpWithConfig(config); | |
| 265 } | |
| 266 | |
| 267 void EnableTouchMajorUseInScaling() { | |
| 268 GestureProvider::Config config = GetDefaultConfig(); | |
| 269 config.scale_gesture_detector_config.use_touch_major_in_span = true; | |
| 270 SetUpWithConfig(config); | |
| 271 } | |
| 272 | |
| 261 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } | 273 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } |
| 262 | 274 |
| 263 protected: | 275 protected: |
| 264 void CheckScrollEventSequenceForEndActionType( | 276 void CheckScrollEventSequenceForEndActionType( |
| 265 MotionEvent::Action end_action_type) { | 277 MotionEvent::Action end_action_type) { |
| 266 base::TimeTicks event_time = base::TimeTicks::Now(); | 278 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 267 const float scroll_to_x = kFakeCoordX + 100; | 279 const float scroll_to_x = kFakeCoordX + 100; |
| 268 const float scroll_to_y = kFakeCoordY + 100; | 280 const float scroll_to_y = kFakeCoordY + 100; |
| 269 int motion_event_id = 0; | 281 int motion_event_id = 0; |
| 270 | 282 |
| (...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1550 gesture_provider_->OnTouchEvent(event); | 1562 gesture_provider_->OnTouchEvent(event); |
| 1551 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 1563 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
| 1552 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); | 1564 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); |
| 1553 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, | 1565 EXPECT_EQ(gfx::RectF(kFakeCoordX - kMockTouchRadius, |
| 1554 kFakeCoordY - kMockTouchRadius, | 1566 kFakeCoordY - kMockTouchRadius, |
| 1555 kMockTouchRadius * 2, | 1567 kMockTouchRadius * 2, |
| 1556 kMockTouchRadius * 2), | 1568 kMockTouchRadius * 2), |
| 1557 GetMostRecentGestureEvent().details.bounding_box()); | 1569 GetMostRecentGestureEvent().details.bounding_box()); |
| 1558 } | 1570 } |
| 1559 | 1571 |
| 1572 // Verify that pinch zoom that doesn't use touch major values sends the proper | |
|
tdresser
2014/07/02 13:43:10
It doesn't look like this is testing the case wher
jdduke (slow)
2014/07/02 16:24:18
Oops, the comment is wrong, good catch.
| |
| 1573 // event sequence. | |
| 1574 TEST_F(GestureProviderTest, PinchZoomWithTouchMajor) { | |
| 1575 EnableTouchMajorUseInScaling(); | |
| 1576 | |
| 1577 base::TimeTicks event_time = base::TimeTicks::Now(); | |
| 1578 const float touch_slop = GetTouchSlop(); | |
| 1579 gesture_provider_->SetMultiTouchZoomSupportEnabled(true); | |
| 1580 | |
| 1581 int secondary_coord_x = kFakeCoordX + 20 * touch_slop; | |
| 1582 int secondary_coord_y = kFakeCoordY + 20 * touch_slop; | |
| 1583 | |
| 1584 MockMotionEvent event = | |
| 1585 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | |
| 1586 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 1587 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | |
| 1588 | |
| 1589 event = ObtainMotionEvent(event_time, | |
| 1590 MotionEvent::ACTION_POINTER_DOWN, | |
| 1591 kFakeCoordX, | |
| 1592 kFakeCoordY, | |
| 1593 secondary_coord_x, | |
| 1594 secondary_coord_y); | |
| 1595 | |
| 1596 gesture_provider_->OnTouchEvent(event); | |
| 1597 EXPECT_EQ(1U, GetReceivedGestureCount()); | |
| 1598 | |
| 1599 secondary_coord_x += 5 * touch_slop; | |
| 1600 secondary_coord_y += 5 * touch_slop; | |
| 1601 event = ObtainMotionEvent(event_time, | |
| 1602 MotionEvent::ACTION_MOVE, | |
| 1603 kFakeCoordX, | |
| 1604 kFakeCoordY, | |
| 1605 secondary_coord_x, | |
| 1606 secondary_coord_y); | |
| 1607 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 1608 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points()); | |
| 1609 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN)); | |
| 1610 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); | |
| 1611 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE)); | |
| 1612 | |
| 1613 secondary_coord_x += 2 * touch_slop; | |
| 1614 secondary_coord_y += 2 * touch_slop; | |
| 1615 event = ObtainMotionEvent(event_time, | |
| 1616 MotionEvent::ACTION_MOVE, | |
| 1617 kFakeCoordX, | |
| 1618 kFakeCoordY, | |
| 1619 secondary_coord_x, | |
| 1620 secondary_coord_y); | |
| 1621 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 1622 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType()); | |
| 1623 EXPECT_LT(1.f, GetMostRecentGestureEvent().details.scale()); | |
| 1624 | |
| 1625 secondary_coord_x -= 2 * touch_slop; | |
| 1626 secondary_coord_y -= 2 * touch_slop; | |
| 1627 event = ObtainMotionEvent(event_time, | |
| 1628 MotionEvent::ACTION_MOVE, | |
| 1629 kFakeCoordX, | |
| 1630 kFakeCoordY, | |
| 1631 secondary_coord_x, | |
| 1632 secondary_coord_y); | |
| 1633 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 1634 EXPECT_EQ(ET_GESTURE_PINCH_UPDATE, GetMostRecentGestureEventType()); | |
| 1635 EXPECT_GT(1.f, GetMostRecentGestureEvent().details.scale()); | |
| 1636 | |
| 1637 event = ObtainMotionEvent(event_time, | |
| 1638 MotionEvent::ACTION_POINTER_UP, | |
| 1639 kFakeCoordX, | |
| 1640 kFakeCoordY, | |
| 1641 secondary_coord_x, | |
| 1642 secondary_coord_y); | |
| 1643 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 1644 EXPECT_EQ(ET_GESTURE_PINCH_END, GetMostRecentGestureEventType()); | |
| 1645 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); | |
| 1646 | |
| 1647 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP); | |
| 1648 gesture_provider_->OnTouchEvent(event); | |
| 1649 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | |
| 1650 } | |
| 1651 | |
| 1560 // Verify that no accidental pinching occurs if the touch size is large relative | 1652 // Verify that no accidental pinching occurs if the touch size is large relative |
| 1561 // to the min scaling span. | 1653 // to the min scaling span when the touch major value is used in scaling. |
| 1562 TEST_F(GestureProviderTest, NoPinchZoomWithFatFinger) { | 1654 TEST_F(GestureProviderTest, NoPinchZoomWithTouchMajorAndFatFinger) { |
| 1655 EnableTouchMajorUseInScaling(); | |
| 1656 | |
| 1563 base::TimeTicks event_time = base::TimeTicks::Now(); | 1657 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 1564 const float kFatFingerSize = GetMinScalingSpan() * 3.f; | 1658 const float kFatFingerSize = GetMinScalingSpan() * 3.f; |
| 1565 | 1659 |
| 1566 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); | 1660 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); |
| 1567 gesture_provider_->SetMultiTouchZoomSupportEnabled(true); | 1661 gesture_provider_->SetMultiTouchZoomSupportEnabled(true); |
| 1568 | 1662 |
| 1569 MockMotionEvent event = | 1663 MockMotionEvent event = |
| 1570 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 1664 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
| 1571 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1665 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 1572 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1666 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2289 event = | 2383 event = |
| 2290 ObtainMotionEvent(event_time + kOneMicrosecond, MotionEvent::ACTION_UP); | 2384 ObtainMotionEvent(event_time + kOneMicrosecond, MotionEvent::ACTION_UP); |
| 2291 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 2385 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
| 2292 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | 2386 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); |
| 2293 EXPECT_EQ(kMinGestureBoundsLength, | 2387 EXPECT_EQ(kMinGestureBoundsLength, |
| 2294 GetMostRecentGestureEvent().details.bounding_box_f().width()); | 2388 GetMostRecentGestureEvent().details.bounding_box_f().width()); |
| 2295 EXPECT_EQ(kMinGestureBoundsLength, | 2389 EXPECT_EQ(kMinGestureBoundsLength, |
| 2296 GetMostRecentGestureEvent().details.bounding_box_f().height()); | 2390 GetMostRecentGestureEvent().details.bounding_box_f().height()); |
| 2297 } | 2391 } |
| 2298 | 2392 |
| 2393 TEST_F(GestureProviderTest, MaxGestureBoundsLength) { | |
| 2394 const float kMaxGestureBoundsLength = kMockTouchRadius / 10.f; | |
| 2395 SetMaxGestureBoundsLength(kMaxGestureBoundsLength); | |
| 2396 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); | |
| 2397 | |
| 2398 base::TimeTicks event_time = base::TimeTicks::Now(); | |
| 2399 MockMotionEvent event = | |
| 2400 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | |
| 2401 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 2402 | |
| 2403 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | |
| 2404 EXPECT_EQ(kMaxGestureBoundsLength, | |
| 2405 GetMostRecentGestureEvent().details.bounding_box_f().width()); | |
| 2406 EXPECT_EQ(kMaxGestureBoundsLength, | |
| 2407 GetMostRecentGestureEvent().details.bounding_box_f().height()); | |
| 2408 | |
| 2409 event = | |
| 2410 ObtainMotionEvent(event_time + kOneMicrosecond, MotionEvent::ACTION_UP); | |
| 2411 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | |
| 2412 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | |
| 2413 EXPECT_EQ(kMaxGestureBoundsLength, | |
| 2414 GetMostRecentGestureEvent().details.bounding_box_f().width()); | |
| 2415 EXPECT_EQ(kMaxGestureBoundsLength, | |
| 2416 GetMostRecentGestureEvent().details.bounding_box_f().height()); | |
| 2417 } | |
| 2418 | |
| 2299 } // namespace ui | 2419 } // namespace ui |
| OLD | NEW |