Chromium Code Reviews| Index: content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| index 84f04f6ff6afd44adf657a3fed64043e785db857..eaa8c9febfbe86f37317176e85a1efdb2e19160a 100644 |
| --- a/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| +++ b/content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc |
| @@ -9,10 +9,13 @@ |
| #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" |
| #include "content/browser/renderer_host/input/synthetic_gesture_target.h" |
| #include "content/browser/renderer_host/input/synthetic_pinch_gesture.h" |
| +#include "content/browser/renderer_host/input/synthetic_smooth_drag_gesture.h" |
| +#include "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h" |
| #include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h" |
| #include "content/browser/renderer_host/input/synthetic_tap_gesture.h" |
| #include "content/browser/renderer_host/render_widget_host_delegate.h" |
| #include "content/common/input/synthetic_pinch_gesture_params.h" |
| +#include "content/common/input/synthetic_smooth_drag_gesture_params.h" |
| #include "content/common/input/synthetic_smooth_scroll_gesture_params.h" |
| #include "content/common/input/synthetic_tap_gesture_params.h" |
| #include "content/public/test/mock_render_process_host.h" |
| @@ -39,6 +42,8 @@ const int kPointerAssumedStoppedTimeMs = 43; |
| const float kTouchSlopInDips = 7.0f; |
| const float kMinScalingSpanInDips = 27.5f; |
| +enum TouchGestureType { TOUCH_SCROLL, TOUCH_DRAG }; |
| + |
| class MockSyntheticGesture : public SyntheticGesture { |
| public: |
| MockSyntheticGesture(bool* finished, int num_steps) |
| @@ -110,24 +115,24 @@ class MockSyntheticGestureTarget : public SyntheticGestureTarget { |
| int pointer_assumed_stopped_time_ms_; |
| }; |
| -class MockScrollGestureTarget : public MockSyntheticGestureTarget { |
| +class MockMoveGestureTarget : public MockSyntheticGestureTarget { |
| public: |
| - MockScrollGestureTarget() : total_abs_scroll_distance_length_(0) {} |
| - ~MockScrollGestureTarget() override {} |
| + MockMoveGestureTarget() : total_abs_move_distance_length_(0) {} |
| + ~MockMoveGestureTarget() override {} |
| gfx::Vector2dF start_to_end_distance() const { |
| return start_to_end_distance_; |
| } |
| - float total_abs_scroll_distance_length() const { |
| - return total_abs_scroll_distance_length_; |
| + float total_abs_move_distance_length() const { |
| + return total_abs_move_distance_length_; |
| } |
| protected: |
| gfx::Vector2dF start_to_end_distance_; |
| - float total_abs_scroll_distance_length_; |
| + float total_abs_move_distance_length_; |
| }; |
| -class MockScrollMouseTarget : public MockScrollGestureTarget { |
| +class MockScrollMouseTarget : public MockMoveGestureTarget { |
| public: |
| MockScrollMouseTarget() {} |
| ~MockScrollMouseTarget() override {} |
| @@ -138,14 +143,14 @@ class MockScrollMouseTarget : public MockScrollGestureTarget { |
| static_cast<const WebMouseWheelEvent&>(event); |
| gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY); |
| start_to_end_distance_ += delta; |
| - total_abs_scroll_distance_length_ += delta.Length(); |
| + total_abs_move_distance_length_ += delta.Length(); |
| } |
| }; |
| -class MockScrollTouchTarget : public MockScrollGestureTarget { |
| +class MockMoveTouchTarget : public MockMoveGestureTarget { |
| public: |
| - MockScrollTouchTarget() : started_(false) {} |
| - ~MockScrollTouchTarget() override {} |
| + MockMoveTouchTarget() : started_(false) {} |
| + ~MockMoveTouchTarget() override {} |
| void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); |
| @@ -165,7 +170,7 @@ class MockScrollTouchTarget : public MockScrollGestureTarget { |
| gfx::PointF touch_point(touch_event.touches[0].position.x, |
| touch_event.touches[0].position.y); |
| gfx::Vector2dF delta = touch_point - last_touch_point_; |
| - total_abs_scroll_distance_length_ += delta.Length(); |
| + total_abs_move_distance_length_ += delta.Length(); |
| if (touch_event.type == WebInputEvent::TouchEnd) |
| start_to_end_distance_ = touch_point - start_; |
| @@ -180,6 +185,39 @@ class MockScrollTouchTarget : public MockScrollGestureTarget { |
| bool started_; |
| }; |
| +class MockDragMouseTarget : public MockMoveGestureTarget { |
| + public: |
| + MockDragMouseTarget() : started_(false) {} |
| + ~MockDragMouseTarget() override {} |
| + |
| + void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| + ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type)); |
| + const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); |
| + if (!started_) { |
| + EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); |
| + EXPECT_EQ(mouse_event.clickCount, 1); |
| + EXPECT_EQ(mouse_event.type, WebInputEvent::MouseDown); |
| + start_.SetPoint(mouse_event.x, mouse_event.y); |
| + last_mouse_point_ = start_; |
| + started_ = true; |
| + } else { |
| + EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); |
| + ASSERT_NE(mouse_event.type, WebInputEvent::MouseDown); |
| + |
| + gfx::PointF mouse_point(mouse_event.x, mouse_event.y); |
| + gfx::Vector2dF delta = mouse_point - last_mouse_point_; |
| + total_abs_move_distance_length_ += delta.Length(); |
| + if (mouse_event.type == WebInputEvent::MouseUp) |
| + start_to_end_distance_ = mouse_point - start_; |
| + last_mouse_point_ = mouse_point; |
| + } |
| + } |
| + |
| + private: |
| + bool started_; |
| + gfx::PointF start_, last_mouse_point_; |
| +}; |
| + |
| class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget { |
| public: |
| enum ZoomDirection { |
| @@ -356,10 +394,10 @@ class MockSyntheticTapMouseTarget : public MockSyntheticTapGestureTarget { |
| } |
| }; |
| -class SyntheticGestureControllerTest : public testing::Test { |
| +class SyntheticGestureControllerTestBase { |
| public: |
| - SyntheticGestureControllerTest() {} |
| - ~SyntheticGestureControllerTest() override {} |
| + SyntheticGestureControllerTestBase() {} |
| + ~SyntheticGestureControllerTestBase() {} |
| protected: |
| template<typename MockGestureTarget> |
| @@ -369,22 +407,11 @@ class SyntheticGestureControllerTest : public testing::Test { |
| scoped_ptr<SyntheticGestureTarget>(target_))); |
| } |
| - void SetUp() override { |
| - start_time_ = base::TimeTicks::Now(); |
| - time_ = start_time_; |
| - num_success_ = 0; |
| - num_failure_ = 0; |
| - } |
| - |
| - void TearDown() override { |
| - controller_.reset(); |
| - target_ = NULL; |
| - time_ = base::TimeTicks(); |
| - } |
| - |
| void QueueSyntheticGesture(scoped_ptr<SyntheticGesture> gesture) { |
| - controller_->QueueSyntheticGesture(gesture.Pass(), |
| - base::Bind(&SyntheticGestureControllerTest::OnSyntheticGestureCompleted, |
| + controller_->QueueSyntheticGesture( |
| + gesture.Pass(), |
| + base::Bind( |
| + &SyntheticGestureControllerTestBase::OnSyntheticGestureCompleted, |
| base::Unretained(this))); |
| } |
| @@ -417,6 +444,42 @@ class SyntheticGestureControllerTest : public testing::Test { |
| int num_failure_; |
| }; |
| +class SyntheticGestureControllerTest |
| + : public SyntheticGestureControllerTestBase, |
| + public testing::Test { |
| + protected: |
| + void SetUp() override { |
| + start_time_ = base::TimeTicks::Now(); |
| + time_ = start_time_; |
| + num_success_ = 0; |
| + num_failure_ = 0; |
| + } |
| + |
| + void TearDown() override { |
| + controller_.reset(); |
| + target_ = NULL; |
|
petrcermak
2015/02/24 11:47:32
Shouldn't this be a "nullptr"?
ssid
2015/02/24 18:40:20
Done.
|
| + time_ = base::TimeTicks(); |
| + } |
| +}; |
| + |
| +class SyntheticGestureControllerTestWithParam |
| + : public SyntheticGestureControllerTestBase, |
| + public testing::TestWithParam<bool> { |
| + protected: |
| + void SetUp() override { |
| + start_time_ = base::TimeTicks::Now(); |
| + time_ = start_time_; |
| + num_success_ = 0; |
| + num_failure_ = 0; |
| + } |
| + |
| + void TearDown() override { |
| + controller_.reset(); |
| + target_ = NULL; |
|
petrcermak
2015/02/24 11:47:33
ditto
|
| + time_ = base::TimeTicks(); |
| + } |
| +}; |
| + |
| TEST_F(SyntheticGestureControllerTest, SingleGesture) { |
| CreateControllerAndTarget<MockSyntheticGestureTarget>(); |
| @@ -524,7 +587,7 @@ TEST_F(SyntheticGestureControllerTest, GestureCompletedOnDidFlushInput) { |
| EXPECT_EQ(2, num_success_); |
| } |
| -gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2d& vector, |
| +gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2dF& vector, |
| SyntheticGestureTarget* target) { |
| const int kTouchSlop = target->GetTouchSlopInDips(); |
| @@ -543,46 +606,62 @@ gfx::Vector2d AddTouchSlopToVector(const gfx::Vector2d& vector, |
| return gfx::Vector2d(x, y); |
| } |
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchVertical) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| +TEST_P(SyntheticGestureControllerTestWithParam, |
| + SingleMoveGestureTouchVertical) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(89, 32); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + if (GetParam() == TOUCH_DRAG) { |
| + params.add_slop = false; |
| + } |
| + params.start_point.SetPoint(89, 32); |
| params.distances.push_back(gfx::Vector2d(0, 123)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| - EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| - scroll_target->start_to_end_distance()); |
| + if (GetParam() == TOUCH_SCROLL) { |
| + EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| + scroll_target->start_to_end_distance()); |
| + } else { |
| + EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| + } |
| } |
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchHorizontal) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| +TEST_P(SyntheticGestureControllerTestWithParam, |
| + SingleScrollGestureTouchHorizontal) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(12, -23); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + if (GetParam() == TOUCH_DRAG) { |
| + params.add_slop = false; |
| + } |
| + params.start_point.SetPoint(12, -23); |
| params.distances.push_back(gfx::Vector2d(-234, 0)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| - EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| - scroll_target->start_to_end_distance()); |
| + if (GetParam() == TOUCH_SCROLL) { |
| + EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| + scroll_target->start_to_end_distance()); |
| + } else { |
| + EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| + } |
| } |
| void CheckIsWithinRangeSingle(float scroll_distance, |
| @@ -599,27 +678,27 @@ void CheckIsWithinRangeSingle(float scroll_distance, |
| void CheckSingleScrollDistanceIsWithinRange( |
| const gfx::Vector2dF& scroll_distance, |
| - const gfx::Vector2d& target_distance, |
| + const gfx::Vector2dF& target_distance, |
| SyntheticGestureTarget* target) { |
| CheckIsWithinRangeSingle(scroll_distance.x(), target_distance.x(), target); |
| CheckIsWithinRangeSingle(scroll_distance.y(), target_distance.y(), target); |
| } |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(0, 7); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + params.start_point.SetPoint(0, 7); |
| params.distances.push_back(gfx::Vector2d(413, -83)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| CheckSingleScrollDistanceIsWithinRange( |
| @@ -627,26 +706,25 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) { |
| } |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| // Create a smooth scroll with a short distance and set the pointer assumed |
| // stopped time high, so that the stopping should dominate the time the |
| // gesture is active. |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(-98, -23); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + params.start_point.SetPoint(-98, -23); |
| params.distances.push_back(gfx::Vector2d(21, -12)); |
| params.prevent_fling = true; |
| - |
| target_->set_pointer_assumed_stopped_time_ms(543); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| CheckSingleScrollDistanceIsWithinRange( |
| @@ -655,26 +733,26 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) { |
| } |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| // Create a smooth scroll with a short distance and set the pointer assumed |
| // stopped time high. Disable 'prevent_fling' and check that the gesture |
| // finishes without waiting before it stops. |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(-89, 78); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + params.start_point.SetPoint(-89, 78); |
| params.distances.push_back(gfx::Vector2d(-43, 19)); |
| params.prevent_fling = false; |
| target_->set_pointer_assumed_stopped_time_ms(543); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| CheckSingleScrollDistanceIsWithinRange( |
| @@ -682,21 +760,25 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) { |
| EXPECT_LE(GetTotalTime(), target_->PointerAssumedStoppedTime()); |
| } |
| -TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchZeroDistance) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| +TEST_P(SyntheticGestureControllerTestWithParam, |
| + SingleScrollGestureTouchZeroDistance) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(-32, 43); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + if (GetParam() == TOUCH_DRAG) { |
|
Sami
2015/02/24 12:10:17
Is it right that we've got the same test expectati
ssid
2015/02/24 12:13:02
Yes, because the distance is zero. Do you think I
Sami
2015/02/24 13:03:43
Ah, got it. I guess that is still a useful thing t
|
| + params.add_slop = false; |
| + } |
| + params.start_point.SetPoint(-32, 43); |
| params.distances.push_back(gfx::Vector2d(0, 0)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_target->start_to_end_distance()); |
| @@ -705,18 +787,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchZeroDistance) { |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) { |
| CreateControllerAndTarget<MockScrollMouseTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| - params.anchor.SetPoint(432, 89); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT; |
| + params.start_point.SetPoint(432, 89); |
| params.distances.push_back(gfx::Vector2d(0, -234)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| @@ -725,18 +807,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) { |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) { |
| CreateControllerAndTarget<MockScrollMouseTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| - params.anchor.SetPoint(90, 12); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT; |
| + params.start_point.SetPoint(90, 12); |
| params.distances.push_back(gfx::Vector2d(345, 0)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| @@ -745,18 +827,18 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) { |
| TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) { |
| CreateControllerAndTarget<MockScrollMouseTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| - params.anchor.SetPoint(90, 12); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT; |
| + params.start_point.SetPoint(90, 12); |
| params.distances.push_back(gfx::Vector2d(-194, 303)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| @@ -765,19 +847,19 @@ TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) { |
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) { |
| CreateControllerAndTarget<MockScrollMouseTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| - params.anchor.SetPoint(90, 12); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT; |
| + params.start_point.SetPoint(90, 12); |
| params.distances.push_back(gfx::Vector2d(-129, 212)); |
| params.distances.push_back(gfx::Vector2d(8, -9)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| EXPECT_EQ(params.distances[0] + params.distances[1], |
| @@ -787,25 +869,25 @@ TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) { |
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouseHorizontal) { |
| CreateControllerAndTarget<MockScrollMouseTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| - params.anchor.SetPoint(90, 12); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_WHEEL_INPUT; |
| + params.start_point.SetPoint(90, 12); |
| params.distances.push_back(gfx::Vector2d(-129, 0)); |
| params.distances.push_back(gfx::Vector2d(79, 0)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| // This check only works for horizontal or vertical scrolls because of |
| // floating point precision issues with diagonal scrolls. |
| EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), |
| - scroll_target->total_abs_scroll_distance_length()); |
| + scroll_target->total_abs_move_distance_length()); |
| EXPECT_EQ(params.distances[0] + params.distances[1], |
| scroll_target->start_to_end_distance()); |
| } |
| @@ -824,28 +906,28 @@ void CheckIsWithinRangeMulti(float scroll_distance, |
| void CheckMultiScrollDistanceIsWithinRange( |
| const gfx::Vector2dF& scroll_distance, |
| - const gfx::Vector2d& target_distance, |
| + const gfx::Vector2dF& target_distance, |
| SyntheticGestureTarget* target) { |
| CheckIsWithinRangeMulti(scroll_distance.x(), target_distance.x(), target); |
| CheckIsWithinRangeMulti(scroll_distance.y(), target_distance.y(), target); |
| } |
| TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(8, -13); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + params.start_point.SetPoint(8, -13); |
| params.distances.push_back(gfx::Vector2d(234, 133)); |
| params.distances.push_back(gfx::Vector2d(-9, 78)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| CheckMultiScrollDistanceIsWithinRange( |
| @@ -854,31 +936,168 @@ TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) { |
| target_); |
| } |
| -TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouchVertical) { |
| - CreateControllerAndTarget<MockScrollTouchTarget>(); |
| +TEST_P(SyntheticGestureControllerTestWithParam, |
| + MultiScrollGestureTouchVertical) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| - SyntheticSmoothScrollGestureParams params; |
| - params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| - params.anchor.SetPoint(234, -13); |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::TOUCH_INPUT; |
| + if (GetParam() == TOUCH_DRAG) { |
| + params.add_slop = false; |
| + } |
| + params.start_point.SetPoint(234, -13); |
| params.distances.push_back(gfx::Vector2d(0, 133)); |
| params.distances.push_back(gfx::Vector2d(0, 78)); |
| - scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| - new SyntheticSmoothScrollGesture(params)); |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| QueueSyntheticGesture(gesture.Pass()); |
| FlushInputUntilComplete(); |
| - MockScrollGestureTarget* scroll_target = |
| - static_cast<MockScrollGestureTarget*>(target_); |
| + MockMoveGestureTarget* scroll_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| EXPECT_EQ(1, num_success_); |
| EXPECT_EQ(0, num_failure_); |
| - EXPECT_FLOAT_EQ( |
| - params.distances[0].Length() + params.distances[1].Length() + |
| - target_->GetTouchSlopInDips(), |
| - scroll_target->total_abs_scroll_distance_length()); |
| + if (GetParam() == TOUCH_SCROLL) { |
| + EXPECT_FLOAT_EQ(params.distances[0].Length() + |
| + params.distances[1].Length() + |
| + target_->GetTouchSlopInDips(), |
| + scroll_target->total_abs_move_distance_length()); |
| EXPECT_EQ(AddTouchSlopToVector(params.distances[0] + params.distances[1], |
| target_), |
| scroll_target->start_to_end_distance()); |
| + } else { |
| + EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), |
| + scroll_target->total_abs_move_distance_length()); |
| + EXPECT_EQ(params.distances[0] + params.distances[1], |
| + scroll_target->start_to_end_distance()); |
| + } |
| +} |
| + |
| +INSTANTIATE_TEST_CASE_P(Single, |
| + SyntheticGestureControllerTestWithParam, |
| + testing::Values(TOUCH_SCROLL, TOUCH_DRAG)); |
| + |
| +TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseDiagonal) { |
| + CreateControllerAndTarget<MockDragMouseTarget>(); |
| + |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT; |
| + params.start_point.SetPoint(0, 7); |
| + params.distances.push_back(gfx::Vector2d(413, -83)); |
| + |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| + QueueSyntheticGesture(gesture.Pass()); |
| + FlushInputUntilComplete(); |
| + |
| + MockMoveGestureTarget* drag_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| + EXPECT_EQ(1, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(drag_target->start_to_end_distance(), params.distances[0]); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseZeroDistance) { |
| + CreateControllerAndTarget<MockDragMouseTarget>(); |
| + |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT; |
| + params.start_point.SetPoint(-32, 43); |
| + params.distances.push_back(gfx::Vector2d(0, 0)); |
| + |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| + QueueSyntheticGesture(gesture.Pass()); |
| + FlushInputUntilComplete(); |
| + |
| + MockMoveGestureTarget* drag_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| + EXPECT_EQ(1, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(gfx::Vector2dF(0, 0), drag_target->start_to_end_distance()); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, MultiDragGestureMouse) { |
| + CreateControllerAndTarget<MockDragMouseTarget>(); |
| + |
| + SyntheticSmoothMoveGestureParams params; |
| + params.input_type = SyntheticSmoothMoveGestureParams::MOUSE_DRAG_INPUT; |
| + params.start_point.SetPoint(8, -13); |
| + params.distances.push_back(gfx::Vector2d(234, 133)); |
| + params.distances.push_back(gfx::Vector2d(-9, 78)); |
| + |
| + scoped_ptr<SyntheticSmoothMoveGesture> gesture( |
| + new SyntheticSmoothMoveGesture(params)); |
| + QueueSyntheticGesture(gesture.Pass()); |
| + FlushInputUntilComplete(); |
| + |
| + MockMoveGestureTarget* drag_target = |
| + static_cast<MockMoveGestureTarget*>(target_); |
| + EXPECT_EQ(1, num_success_); |
| + EXPECT_EQ(0, num_failure_); |
| + EXPECT_EQ(drag_target->start_to_end_distance(), |
| + params.distances[0] + params.distances[1]); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, |
| + SyntheticSmoothDragTestUsingSingleMouseDrag) { |
| + CreateControllerAndTarget<MockDragMouseTarget>(); |
| + |
| + SyntheticSmoothDragGestureParams params; |
| + params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| + params.distances.push_back(gfx::Vector2d(234, 133)); |
| + params.speed_in_pixels_s = 800; |
| + |
| + scoped_ptr<SyntheticSmoothDragGesture> gesture( |
| + new SyntheticSmoothDragGesture(params)); |
| + const base::TimeTicks timestamp; |
| + gesture->ForwardInputEvents(timestamp, target_); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, |
| + SyntheticSmoothDragTestUsingSingleTouchDrag) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| + |
| + SyntheticSmoothDragGestureParams params; |
| + params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| + params.start_point.SetPoint(89, 32); |
| + params.distances.push_back(gfx::Vector2d(0, 123)); |
| + params.speed_in_pixels_s = 800; |
| + |
| + scoped_ptr<SyntheticSmoothDragGesture> gesture( |
| + new SyntheticSmoothDragGesture(params)); |
| + const base::TimeTicks timestamp; |
| + gesture->ForwardInputEvents(timestamp, target_); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, |
| + SyntheticSmoothScrollTestUsingSingleTouchScroll) { |
| + CreateControllerAndTarget<MockMoveTouchTarget>(); |
| + |
| + SyntheticSmoothScrollGestureParams params; |
| + params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| + |
| + scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| + new SyntheticSmoothScrollGesture(params)); |
| + const base::TimeTicks timestamp; |
| + gesture->ForwardInputEvents(timestamp, target_); |
| +} |
| + |
| +TEST_F(SyntheticGestureControllerTest, |
| + SyntheticSmoothScrollTestUsingSingleMouseScroll) { |
| + CreateControllerAndTarget<MockScrollMouseTarget>(); |
| + |
| + SyntheticSmoothScrollGestureParams params; |
| + params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; |
| + params.anchor.SetPoint(432, 89); |
| + params.distances.push_back(gfx::Vector2d(0, -234)); |
| + params.speed_in_pixels_s = 800; |
| + |
| + scoped_ptr<SyntheticSmoothScrollGesture> gesture( |
| + new SyntheticSmoothScrollGesture(params)); |
| + const base::TimeTicks timestamp; |
| + gesture->ForwardInputEvents(timestamp, target_); |
| } |
| TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) { |