Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "content/browser/renderer_host/input/synthetic_gesture.h" | 8 #include "content/browser/renderer_host/input/synthetic_gesture.h" |
| 9 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" | 9 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" |
| 10 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" | 10 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" |
| 11 #include "content/browser/renderer_host/input/synthetic_pinch_gesture.h" | 11 #include "content/browser/renderer_host/input/synthetic_pinch_gesture.h" |
| 12 #include "content/browser/renderer_host/input/synthetic_smooth_drag_gesture.h" | |
| 13 #include "content/browser/renderer_host/input/synthetic_smooth_move_gesture.h" | |
| 12 #include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h" | 14 #include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h" |
| 13 #include "content/browser/renderer_host/input/synthetic_tap_gesture.h" | 15 #include "content/browser/renderer_host/input/synthetic_tap_gesture.h" |
| 14 #include "content/browser/renderer_host/render_widget_host_delegate.h" | 16 #include "content/browser/renderer_host/render_widget_host_delegate.h" |
| 15 #include "content/common/input/synthetic_pinch_gesture_params.h" | 17 #include "content/common/input/synthetic_pinch_gesture_params.h" |
| 18 #include "content/common/input/synthetic_smooth_drag_gesture_params.h" | |
| 16 #include "content/common/input/synthetic_smooth_scroll_gesture_params.h" | 19 #include "content/common/input/synthetic_smooth_scroll_gesture_params.h" |
| 17 #include "content/common/input/synthetic_tap_gesture_params.h" | 20 #include "content/common/input/synthetic_tap_gesture_params.h" |
| 18 #include "content/public/test/mock_render_process_host.h" | 21 #include "content/public/test/mock_render_process_host.h" |
| 19 #include "content/public/test/test_browser_context.h" | 22 #include "content/public/test/test_browser_context.h" |
| 20 #include "content/test/test_render_view_host.h" | 23 #include "content/test/test_render_view_host.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "third_party/WebKit/public/web/WebInputEvent.h" | 25 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 23 #include "ui/gfx/geometry/point.h" | 26 #include "ui/gfx/geometry/point.h" |
| 24 #include "ui/gfx/geometry/point_f.h" | 27 #include "ui/gfx/geometry/point_f.h" |
| 25 #include "ui/gfx/geometry/vector2d.h" | 28 #include "ui/gfx/geometry/vector2d.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 103 | 106 |
| 104 bool flush_requested() const { return flush_requested_; } | 107 bool flush_requested() const { return flush_requested_; } |
| 105 void ClearFlushRequest() { flush_requested_ = false; } | 108 void ClearFlushRequest() { flush_requested_ = false; } |
| 106 | 109 |
| 107 private: | 110 private: |
| 108 bool flush_requested_; | 111 bool flush_requested_; |
| 109 | 112 |
| 110 int pointer_assumed_stopped_time_ms_; | 113 int pointer_assumed_stopped_time_ms_; |
| 111 }; | 114 }; |
| 112 | 115 |
| 113 class MockScrollGestureTarget : public MockSyntheticGestureTarget { | 116 class MockMoveGestureTarget : public MockSyntheticGestureTarget { |
| 114 public: | 117 public: |
| 115 MockScrollGestureTarget() : total_abs_scroll_distance_length_(0) {} | 118 MockMoveGestureTarget() : total_abs_move_distance_length_(0) {} |
| 116 ~MockScrollGestureTarget() override {} | 119 ~MockMoveGestureTarget() override {} |
| 117 | 120 |
| 118 gfx::Vector2dF start_to_end_distance() const { | 121 gfx::Vector2dF start_to_end_distance() const { |
| 119 return start_to_end_distance_; | 122 return start_to_end_distance_; |
| 120 } | 123 } |
| 121 float total_abs_scroll_distance_length() const { | 124 float total_abs_move_distance_length() const { |
| 122 return total_abs_scroll_distance_length_; | 125 return total_abs_move_distance_length_; |
| 123 } | 126 } |
| 124 | 127 |
| 125 protected: | 128 protected: |
| 126 gfx::Vector2dF start_to_end_distance_; | 129 gfx::Vector2dF start_to_end_distance_; |
| 127 float total_abs_scroll_distance_length_; | 130 float total_abs_move_distance_length_; |
| 128 }; | 131 }; |
| 129 | 132 |
| 130 class MockScrollMouseTarget : public MockScrollGestureTarget { | 133 class MockScrollMouseTarget : public MockMoveGestureTarget { |
| 131 public: | 134 public: |
| 132 MockScrollMouseTarget() {} | 135 MockScrollMouseTarget() {} |
| 133 ~MockScrollMouseTarget() override {} | 136 ~MockScrollMouseTarget() override {} |
| 134 | 137 |
| 135 void DispatchInputEventToPlatform(const WebInputEvent& event) override { | 138 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 136 ASSERT_EQ(event.type, WebInputEvent::MouseWheel); | 139 ASSERT_EQ(event.type, WebInputEvent::MouseWheel); |
| 137 const WebMouseWheelEvent& mouse_wheel_event = | 140 const WebMouseWheelEvent& mouse_wheel_event = |
| 138 static_cast<const WebMouseWheelEvent&>(event); | 141 static_cast<const WebMouseWheelEvent&>(event); |
| 139 gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY); | 142 gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY); |
| 140 start_to_end_distance_ += delta; | 143 start_to_end_distance_ += delta; |
| 141 total_abs_scroll_distance_length_ += delta.Length(); | 144 total_abs_move_distance_length_ += delta.Length(); |
| 142 } | 145 } |
| 143 }; | 146 }; |
| 144 | 147 |
| 145 class MockScrollTouchTarget : public MockScrollGestureTarget { | 148 class MockMoveTouchTarget : public MockMoveGestureTarget { |
| 146 public: | 149 public: |
| 147 MockScrollTouchTarget() : started_(false) {} | 150 MockMoveTouchTarget() : started_(false) {} |
| 148 ~MockScrollTouchTarget() override {} | 151 ~MockMoveTouchTarget() override {} |
| 149 | 152 |
| 150 void DispatchInputEventToPlatform(const WebInputEvent& event) override { | 153 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 151 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); | 154 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); |
| 152 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); | 155 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); |
| 153 ASSERT_EQ(touch_event.touchesLength, 1U); | 156 ASSERT_EQ(touch_event.touchesLength, 1U); |
| 154 | 157 |
| 155 if (!started_) { | 158 if (!started_) { |
| 156 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); | 159 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); |
| 157 start_.SetPoint(touch_event.touches[0].position.x, | 160 start_.SetPoint(touch_event.touches[0].position.x, |
| 158 touch_event.touches[0].position.y); | 161 touch_event.touches[0].position.y); |
| 159 last_touch_point_ = start_; | 162 last_touch_point_ = start_; |
| 160 started_ = true; | 163 started_ = true; |
| 161 } else { | 164 } else { |
| 162 ASSERT_NE(touch_event.type, WebInputEvent::TouchStart); | 165 ASSERT_NE(touch_event.type, WebInputEvent::TouchStart); |
| 163 ASSERT_NE(touch_event.type, WebInputEvent::TouchCancel); | 166 ASSERT_NE(touch_event.type, WebInputEvent::TouchCancel); |
| 164 | 167 |
| 165 gfx::PointF touch_point(touch_event.touches[0].position.x, | 168 gfx::PointF touch_point(touch_event.touches[0].position.x, |
| 166 touch_event.touches[0].position.y); | 169 touch_event.touches[0].position.y); |
| 167 gfx::Vector2dF delta = touch_point - last_touch_point_; | 170 gfx::Vector2dF delta = touch_point - last_touch_point_; |
| 168 total_abs_scroll_distance_length_ += delta.Length(); | 171 total_abs_move_distance_length_ += delta.Length(); |
| 169 | 172 |
| 170 if (touch_event.type == WebInputEvent::TouchEnd) | 173 if (touch_event.type == WebInputEvent::TouchEnd) |
| 171 start_to_end_distance_ = touch_point - start_; | 174 start_to_end_distance_ = touch_point - start_; |
| 172 | 175 |
| 173 last_touch_point_ = touch_point; | 176 last_touch_point_ = touch_point; |
| 174 } | 177 } |
| 175 } | 178 } |
| 176 | 179 |
| 177 protected: | 180 protected: |
| 178 gfx::Point start_; | 181 gfx::Point start_; |
| 179 gfx::PointF last_touch_point_; | 182 gfx::PointF last_touch_point_; |
| 180 bool started_; | 183 bool started_; |
| 181 }; | 184 }; |
| 182 | 185 |
| 186 class MockDragMouseTarget : public MockMoveGestureTarget { | |
| 187 public: | |
| 188 MockDragMouseTarget() : started_(false) {} | |
| 189 ~MockDragMouseTarget() override {} | |
| 190 | |
| 191 void DispatchInputEventToPlatform(const WebInputEvent& event) override { | |
| 192 ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type)); | |
| 193 const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); | |
| 194 if (!started_) { | |
| 195 EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); | |
| 196 EXPECT_EQ(mouse_event.clickCount, 1); | |
| 197 EXPECT_EQ(mouse_event.type, WebInputEvent::MouseDown); | |
| 198 start_.SetPoint(mouse_event.x, mouse_event.y); | |
| 199 last_mouse_point_ = start_; | |
| 200 started_ = true; | |
| 201 } else { | |
| 202 EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); | |
| 203 ASSERT_NE(mouse_event.type, WebInputEvent::MouseDown); | |
| 204 | |
| 205 gfx::PointF mouse_point(mouse_event.x, mouse_event.y); | |
| 206 gfx::Vector2dF delta = mouse_point - last_mouse_point_; | |
| 207 total_abs_move_distance_length_ += delta.Length(); | |
| 208 if (mouse_event.type == WebInputEvent::MouseUp) | |
| 209 start_to_end_distance_ = mouse_point - start_; | |
| 210 last_mouse_point_ = mouse_point; | |
| 211 } | |
| 212 } | |
| 213 | |
| 214 private: | |
| 215 bool started_; | |
| 216 gfx::PointF start_, last_mouse_point_; | |
| 217 }; | |
| 218 | |
| 183 class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget { | 219 class MockSyntheticPinchTouchTarget : public MockSyntheticGestureTarget { |
| 184 public: | 220 public: |
| 185 enum ZoomDirection { | 221 enum ZoomDirection { |
| 186 ZOOM_DIRECTION_UNKNOWN, | 222 ZOOM_DIRECTION_UNKNOWN, |
| 187 ZOOM_IN, | 223 ZOOM_IN, |
| 188 ZOOM_OUT | 224 ZOOM_OUT |
| 189 }; | 225 }; |
| 190 | 226 |
| 191 MockSyntheticPinchTouchTarget() | 227 MockSyntheticPinchTouchTarget() |
| 192 : initial_pointer_distance_(0), | 228 : initial_pointer_distance_(0), |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 349 static_cast<int64>(mouse_event.timeStampSeconds * 1000)); | 385 static_cast<int64>(mouse_event.timeStampSeconds * 1000)); |
| 350 state_ = FINISHED; | 386 state_ = FINISHED; |
| 351 break; | 387 break; |
| 352 case FINISHED: | 388 case FINISHED: |
| 353 EXPECT_FALSE(true); | 389 EXPECT_FALSE(true); |
| 354 break; | 390 break; |
| 355 } | 391 } |
| 356 } | 392 } |
| 357 }; | 393 }; |
| 358 | 394 |
| 359 class SyntheticGestureControllerTest : public testing::Test { | 395 class SyntheticGestureControllerTestUtility { |
| 360 public: | 396 public: |
| 361 SyntheticGestureControllerTest() {} | 397 SyntheticGestureControllerTestUtility() {} |
| 362 ~SyntheticGestureControllerTest() override {} | 398 ~SyntheticGestureControllerTestUtility() {} |
| 363 | 399 |
| 364 protected: | 400 protected: |
| 365 template<typename MockGestureTarget> | 401 template<typename MockGestureTarget> |
| 366 void CreateControllerAndTarget() { | 402 void CreateControllerAndTarget() { |
| 367 target_ = new MockGestureTarget(); | 403 target_ = new MockGestureTarget(); |
| 368 controller_.reset(new SyntheticGestureController( | 404 controller_.reset(new SyntheticGestureController( |
| 369 scoped_ptr<SyntheticGestureTarget>(target_))); | 405 scoped_ptr<SyntheticGestureTarget>(target_))); |
| 370 } | 406 } |
| 371 | 407 |
| 372 void SetUp() override { | |
| 373 start_time_ = base::TimeTicks::Now(); | |
| 374 time_ = start_time_; | |
| 375 num_success_ = 0; | |
| 376 num_failure_ = 0; | |
| 377 } | |
| 378 | |
| 379 void TearDown() override { | |
| 380 controller_.reset(); | |
| 381 target_ = NULL; | |
| 382 time_ = base::TimeTicks(); | |
| 383 } | |
| 384 | |
| 385 void QueueSyntheticGesture(scoped_ptr<SyntheticGesture> gesture) { | 408 void QueueSyntheticGesture(scoped_ptr<SyntheticGesture> gesture) { |
| 386 controller_->QueueSyntheticGesture(gesture.Pass(), | 409 controller_->QueueSyntheticGesture( |
| 387 base::Bind(&SyntheticGestureControllerTest::OnSyntheticGestureCompleted, | 410 gesture.Pass(), |
| 411 base::Bind( | |
| 412 &SyntheticGestureControllerTestUtility::OnSyntheticGestureCompleted, | |
| 388 base::Unretained(this))); | 413 base::Unretained(this))); |
| 389 } | 414 } |
| 390 | 415 |
| 391 void FlushInputUntilComplete() { | 416 void FlushInputUntilComplete() { |
| 392 while (target_->flush_requested()) { | 417 while (target_->flush_requested()) { |
| 393 while (target_->flush_requested()) { | 418 while (target_->flush_requested()) { |
| 394 target_->ClearFlushRequest(); | 419 target_->ClearFlushRequest(); |
| 395 time_ += base::TimeDelta::FromMilliseconds(kFlushInputRateInMs); | 420 time_ += base::TimeDelta::FromMilliseconds(kFlushInputRateInMs); |
| 396 controller_->Flush(time_); | 421 controller_->Flush(time_); |
| 397 } | 422 } |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 410 base::TimeDelta GetTotalTime() const { return time_ - start_time_; } | 435 base::TimeDelta GetTotalTime() const { return time_ - start_time_; } |
| 411 | 436 |
| 412 MockSyntheticGestureTarget* target_; | 437 MockSyntheticGestureTarget* target_; |
| 413 scoped_ptr<SyntheticGestureController> controller_; | 438 scoped_ptr<SyntheticGestureController> controller_; |
| 414 base::TimeTicks start_time_; | 439 base::TimeTicks start_time_; |
| 415 base::TimeTicks time_; | 440 base::TimeTicks time_; |
| 416 int num_success_; | 441 int num_success_; |
| 417 int num_failure_; | 442 int num_failure_; |
| 418 }; | 443 }; |
| 419 | 444 |
| 445 class SyntheticGestureControllerTest | |
| 446 : public SyntheticGestureControllerTestUtility, | |
| 447 public testing::Test { | |
| 448 protected: | |
| 449 void SetUp() override { | |
| 450 start_time_ = base::TimeTicks::Now(); | |
| 451 time_ = start_time_; | |
| 452 num_success_ = 0; | |
| 453 num_failure_ = 0; | |
| 454 } | |
| 455 | |
| 456 void TearDown() override { | |
| 457 controller_.reset(); | |
| 458 target_ = NULL; | |
| 459 time_ = base::TimeTicks(); | |
| 460 } | |
| 461 }; | |
| 462 | |
| 463 class SyntheticGestureControllerTestWithParam | |
| 464 : public SyntheticGestureControllerTestUtility, | |
| 465 public testing::TestWithParam<bool> { | |
| 466 protected: | |
| 467 void SetUp() override { | |
| 468 start_time_ = base::TimeTicks::Now(); | |
| 469 time_ = start_time_; | |
| 470 num_success_ = 0; | |
| 471 num_failure_ = 0; | |
| 472 } | |
| 473 | |
| 474 void TearDown() override { | |
| 475 controller_.reset(); | |
| 476 target_ = NULL; | |
| 477 time_ = base::TimeTicks(); | |
| 478 } | |
| 479 }; | |
| 480 | |
| 420 TEST_F(SyntheticGestureControllerTest, SingleGesture) { | 481 TEST_F(SyntheticGestureControllerTest, SingleGesture) { |
| 421 CreateControllerAndTarget<MockSyntheticGestureTarget>(); | 482 CreateControllerAndTarget<MockSyntheticGestureTarget>(); |
| 422 | 483 |
| 423 bool finished = false; | 484 bool finished = false; |
| 424 scoped_ptr<MockSyntheticGesture> gesture( | 485 scoped_ptr<MockSyntheticGesture> gesture( |
| 425 new MockSyntheticGesture(&finished, 3)); | 486 new MockSyntheticGesture(&finished, 3)); |
| 426 QueueSyntheticGesture(gesture.Pass()); | 487 QueueSyntheticGesture(gesture.Pass()); |
| 427 FlushInputUntilComplete(); | 488 FlushInputUntilComplete(); |
| 428 | 489 |
| 429 EXPECT_TRUE(finished); | 490 EXPECT_TRUE(finished); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 536 | 597 |
| 537 int y = vector.y(); | 598 int y = vector.y(); |
| 538 if (y > 0) | 599 if (y > 0) |
| 539 y += kTouchSlop; | 600 y += kTouchSlop; |
| 540 else if (y < 0) | 601 else if (y < 0) |
| 541 y -= kTouchSlop; | 602 y -= kTouchSlop; |
| 542 | 603 |
| 543 return gfx::Vector2d(x, y); | 604 return gfx::Vector2d(x, y); |
| 544 } | 605 } |
| 545 | 606 |
| 546 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchVertical) { | 607 scoped_ptr<SyntheticSmoothMoveGesture> CreateMoveGestureUsingParams( |
| 547 CreateControllerAndTarget<MockScrollTouchTarget>(); | 608 SyntheticSmoothScrollGestureParams params, |
| 609 SyntheticSmoothMoveGesture::InputType input_type) { | |
| 610 std::vector<gfx::Vector2dF> distances_float; | |
| 611 for (uint64 i = 0; i < params.distances.size(); i++) | |
| 612 distances_float.push_back(params.distances[i]); | |
| 613 | |
| 614 scoped_ptr<SyntheticSmoothMoveGesture> gesture(new SyntheticSmoothMoveGesture( | |
| 615 input_type, params.anchor, distances_float, params.speed_in_pixels_s, | |
| 616 params.prevent_fling)); | |
| 617 return gesture; | |
| 618 } | |
| 619 | |
| 620 TEST_P(SyntheticGestureControllerTestWithParam, | |
| 621 SingleMoveGestureTouchVertical) { | |
| 622 CreateControllerAndTarget<MockMoveTouchTarget>(); | |
| 548 | 623 |
| 549 SyntheticSmoothScrollGestureParams params; | 624 SyntheticSmoothScrollGestureParams params; |
| 550 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 625 SyntheticSmoothMoveGesture::InputType input_type; |
| 626 if (GetParam()) { | |
| 627 input_type = SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 628 } else { | |
| 629 input_type = SyntheticSmoothMoveGesture::TOUCH_DRAG_INPUT; | |
| 630 } | |
| 551 params.anchor.SetPoint(89, 32); | 631 params.anchor.SetPoint(89, 32); |
| 552 params.distances.push_back(gfx::Vector2d(0, 123)); | 632 params.distances.push_back(gfx::Vector2d(0, 123)); |
| 553 | 633 |
| 554 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 634 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 555 new SyntheticSmoothScrollGesture(params)); | 635 CreateMoveGestureUsingParams(params, input_type); |
| 556 QueueSyntheticGesture(gesture.Pass()); | 636 QueueSyntheticGesture(gesture.Pass()); |
| 557 FlushInputUntilComplete(); | 637 FlushInputUntilComplete(); |
| 558 | 638 |
| 559 MockScrollGestureTarget* scroll_target = | 639 MockMoveGestureTarget* scroll_target = |
| 560 static_cast<MockScrollGestureTarget*>(target_); | 640 static_cast<MockMoveGestureTarget*>(target_); |
| 561 EXPECT_EQ(1, num_success_); | 641 EXPECT_EQ(1, num_success_); |
| 562 EXPECT_EQ(0, num_failure_); | 642 EXPECT_EQ(0, num_failure_); |
| 563 EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), | 643 if (GetParam()) { |
| 564 scroll_target->start_to_end_distance()); | 644 EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| 645 scroll_target->start_to_end_distance()); | |
| 646 } else { | |
| 647 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); | |
| 648 } | |
| 565 } | 649 } |
| 650 INSTANTIATE_TEST_CASE_P(Single, | |
|
ssid
2015/02/20 10:58:56
I am not sure where to place this statement. Hard
| |
| 651 SyntheticGestureControllerTestWithParam, | |
| 652 testing::Values(true, false)); | |
| 566 | 653 |
| 567 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchHorizontal) { | 654 TEST_P(SyntheticGestureControllerTestWithParam, |
| 568 CreateControllerAndTarget<MockScrollTouchTarget>(); | 655 SingleScrollGestureTouchHorizontal) { |
| 656 CreateControllerAndTarget<MockMoveTouchTarget>(); | |
| 569 | 657 |
| 570 SyntheticSmoothScrollGestureParams params; | 658 SyntheticSmoothScrollGestureParams params; |
| 571 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 659 SyntheticSmoothMoveGesture::InputType input_type; |
| 660 if (GetParam()) { | |
| 661 input_type = SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 662 } else { | |
| 663 input_type = SyntheticSmoothMoveGesture::TOUCH_DRAG_INPUT; | |
| 664 } | |
| 572 params.anchor.SetPoint(12, -23); | 665 params.anchor.SetPoint(12, -23); |
| 573 params.distances.push_back(gfx::Vector2d(-234, 0)); | 666 params.distances.push_back(gfx::Vector2d(-234, 0)); |
| 574 | 667 |
| 575 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 668 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 576 new SyntheticSmoothScrollGesture(params)); | 669 CreateMoveGestureUsingParams(params, input_type); |
| 577 QueueSyntheticGesture(gesture.Pass()); | 670 QueueSyntheticGesture(gesture.Pass()); |
| 578 FlushInputUntilComplete(); | 671 FlushInputUntilComplete(); |
| 579 | 672 |
| 580 MockScrollGestureTarget* scroll_target = | 673 MockMoveGestureTarget* scroll_target = |
| 581 static_cast<MockScrollGestureTarget*>(target_); | 674 static_cast<MockMoveGestureTarget*>(target_); |
| 582 EXPECT_EQ(1, num_success_); | 675 EXPECT_EQ(1, num_success_); |
| 583 EXPECT_EQ(0, num_failure_); | 676 EXPECT_EQ(0, num_failure_); |
| 677 if (GetParam()) { | |
| 584 EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), | 678 EXPECT_EQ(AddTouchSlopToVector(params.distances[0], target_), |
| 585 scroll_target->start_to_end_distance()); | 679 scroll_target->start_to_end_distance()); |
| 680 } else { | |
| 681 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); | |
| 682 } | |
| 586 } | 683 } |
| 587 | 684 |
| 588 void CheckIsWithinRangeSingle(float scroll_distance, | 685 void CheckIsWithinRangeSingle(float scroll_distance, |
| 589 int target_distance, | 686 int target_distance, |
| 590 SyntheticGestureTarget* target) { | 687 SyntheticGestureTarget* target) { |
| 591 if (target_distance > 0) { | 688 if (target_distance > 0) { |
| 592 EXPECT_LE(target_distance, scroll_distance); | 689 EXPECT_LE(target_distance, scroll_distance); |
| 593 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); | 690 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); |
| 594 } else { | 691 } else { |
| 595 EXPECT_GE(target_distance, scroll_distance); | 692 EXPECT_GE(target_distance, scroll_distance); |
| 596 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); | 693 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); |
| 597 } | 694 } |
| 598 } | 695 } |
| 599 | 696 |
| 600 void CheckSingleScrollDistanceIsWithinRange( | 697 void CheckSingleScrollDistanceIsWithinRange( |
| 601 const gfx::Vector2dF& scroll_distance, | 698 const gfx::Vector2dF& scroll_distance, |
| 602 const gfx::Vector2d& target_distance, | 699 const gfx::Vector2d& target_distance, |
| 603 SyntheticGestureTarget* target) { | 700 SyntheticGestureTarget* target) { |
| 604 CheckIsWithinRangeSingle(scroll_distance.x(), target_distance.x(), target); | 701 CheckIsWithinRangeSingle(scroll_distance.x(), target_distance.x(), target); |
| 605 CheckIsWithinRangeSingle(scroll_distance.y(), target_distance.y(), target); | 702 CheckIsWithinRangeSingle(scroll_distance.y(), target_distance.y(), target); |
| 606 } | 703 } |
| 607 | 704 |
| 608 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) { | 705 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchDiagonal) { |
| 609 CreateControllerAndTarget<MockScrollTouchTarget>(); | 706 CreateControllerAndTarget<MockMoveTouchTarget>(); |
| 610 | 707 |
| 611 SyntheticSmoothScrollGestureParams params; | 708 SyntheticSmoothScrollGestureParams params; |
| 612 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 709 SyntheticSmoothMoveGesture::InputType input_type = |
| 710 SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 613 params.anchor.SetPoint(0, 7); | 711 params.anchor.SetPoint(0, 7); |
| 614 params.distances.push_back(gfx::Vector2d(413, -83)); | 712 params.distances.push_back(gfx::Vector2d(413, -83)); |
| 615 | 713 |
| 616 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 714 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 617 new SyntheticSmoothScrollGesture(params)); | 715 CreateMoveGestureUsingParams(params, input_type); |
| 618 QueueSyntheticGesture(gesture.Pass()); | 716 QueueSyntheticGesture(gesture.Pass()); |
| 619 FlushInputUntilComplete(); | 717 FlushInputUntilComplete(); |
| 620 | 718 |
| 621 MockScrollGestureTarget* scroll_target = | 719 MockMoveGestureTarget* scroll_target = |
| 622 static_cast<MockScrollGestureTarget*>(target_); | 720 static_cast<MockMoveGestureTarget*>(target_); |
| 623 EXPECT_EQ(1, num_success_); | 721 EXPECT_EQ(1, num_success_); |
| 624 EXPECT_EQ(0, num_failure_); | 722 EXPECT_EQ(0, num_failure_); |
| 625 CheckSingleScrollDistanceIsWithinRange( | 723 CheckSingleScrollDistanceIsWithinRange( |
| 626 scroll_target->start_to_end_distance(), params.distances[0], target_); | 724 scroll_target->start_to_end_distance(), params.distances[0], target_); |
| 627 } | 725 } |
| 628 | 726 |
| 629 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) { | 727 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchLongStop) { |
| 630 CreateControllerAndTarget<MockScrollTouchTarget>(); | 728 CreateControllerAndTarget<MockMoveTouchTarget>(); |
| 631 | 729 |
| 632 // Create a smooth scroll with a short distance and set the pointer assumed | 730 // Create a smooth scroll with a short distance and set the pointer assumed |
| 633 // stopped time high, so that the stopping should dominate the time the | 731 // stopped time high, so that the stopping should dominate the time the |
| 634 // gesture is active. | 732 // gesture is active. |
| 635 SyntheticSmoothScrollGestureParams params; | 733 SyntheticSmoothScrollGestureParams params; |
| 636 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 734 SyntheticSmoothMoveGesture::InputType input_type = |
| 735 SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 637 params.anchor.SetPoint(-98, -23); | 736 params.anchor.SetPoint(-98, -23); |
| 638 params.distances.push_back(gfx::Vector2d(21, -12)); | 737 params.distances.push_back(gfx::Vector2d(21, -12)); |
| 639 params.prevent_fling = true; | 738 params.prevent_fling = true; |
| 640 | 739 |
| 641 target_->set_pointer_assumed_stopped_time_ms(543); | 740 target_->set_pointer_assumed_stopped_time_ms(543); |
| 642 | 741 |
| 643 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 742 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 644 new SyntheticSmoothScrollGesture(params)); | 743 CreateMoveGestureUsingParams(params, input_type); |
| 645 QueueSyntheticGesture(gesture.Pass()); | 744 QueueSyntheticGesture(gesture.Pass()); |
| 646 FlushInputUntilComplete(); | 745 FlushInputUntilComplete(); |
| 647 | 746 |
| 648 MockScrollGestureTarget* scroll_target = | 747 MockMoveGestureTarget* scroll_target = |
| 649 static_cast<MockScrollGestureTarget*>(target_); | 748 static_cast<MockMoveGestureTarget*>(target_); |
| 650 EXPECT_EQ(1, num_success_); | 749 EXPECT_EQ(1, num_success_); |
| 651 EXPECT_EQ(0, num_failure_); | 750 EXPECT_EQ(0, num_failure_); |
| 652 CheckSingleScrollDistanceIsWithinRange( | 751 CheckSingleScrollDistanceIsWithinRange( |
| 653 scroll_target->start_to_end_distance(), params.distances[0], target_); | 752 scroll_target->start_to_end_distance(), params.distances[0], target_); |
| 654 EXPECT_GE(GetTotalTime(), target_->PointerAssumedStoppedTime()); | 753 EXPECT_GE(GetTotalTime(), target_->PointerAssumedStoppedTime()); |
| 655 } | 754 } |
| 656 | 755 |
| 657 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) { | 756 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchFling) { |
| 658 CreateControllerAndTarget<MockScrollTouchTarget>(); | 757 CreateControllerAndTarget<MockMoveTouchTarget>(); |
| 659 | 758 |
| 660 // Create a smooth scroll with a short distance and set the pointer assumed | 759 // Create a smooth scroll with a short distance and set the pointer assumed |
| 661 // stopped time high. Disable 'prevent_fling' and check that the gesture | 760 // stopped time high. Disable 'prevent_fling' and check that the gesture |
| 662 // finishes without waiting before it stops. | 761 // finishes without waiting before it stops. |
| 663 SyntheticSmoothScrollGestureParams params; | 762 SyntheticSmoothScrollGestureParams params; |
| 664 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 763 SyntheticSmoothMoveGesture::InputType input_type = |
| 764 SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 665 params.anchor.SetPoint(-89, 78); | 765 params.anchor.SetPoint(-89, 78); |
| 666 params.distances.push_back(gfx::Vector2d(-43, 19)); | 766 params.distances.push_back(gfx::Vector2d(-43, 19)); |
| 667 params.prevent_fling = false; | 767 params.prevent_fling = false; |
| 668 | 768 |
| 669 target_->set_pointer_assumed_stopped_time_ms(543); | 769 target_->set_pointer_assumed_stopped_time_ms(543); |
| 670 | 770 |
| 671 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 771 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 672 new SyntheticSmoothScrollGesture(params)); | 772 CreateMoveGestureUsingParams(params, input_type); |
| 673 QueueSyntheticGesture(gesture.Pass()); | 773 QueueSyntheticGesture(gesture.Pass()); |
| 674 FlushInputUntilComplete(); | 774 FlushInputUntilComplete(); |
| 675 | 775 |
| 676 MockScrollGestureTarget* scroll_target = | 776 MockMoveGestureTarget* scroll_target = |
| 677 static_cast<MockScrollGestureTarget*>(target_); | 777 static_cast<MockMoveGestureTarget*>(target_); |
| 678 EXPECT_EQ(1, num_success_); | 778 EXPECT_EQ(1, num_success_); |
| 679 EXPECT_EQ(0, num_failure_); | 779 EXPECT_EQ(0, num_failure_); |
| 680 CheckSingleScrollDistanceIsWithinRange( | 780 CheckSingleScrollDistanceIsWithinRange( |
| 681 scroll_target->start_to_end_distance(), params.distances[0], target_); | 781 scroll_target->start_to_end_distance(), params.distances[0], target_); |
| 682 EXPECT_LE(GetTotalTime(), target_->PointerAssumedStoppedTime()); | 782 EXPECT_LE(GetTotalTime(), target_->PointerAssumedStoppedTime()); |
| 683 } | 783 } |
| 684 | 784 |
| 685 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureTouchZeroDistance) { | 785 TEST_P(SyntheticGestureControllerTestWithParam, |
|
ssid
2015/02/20 10:58:56
Should I move all the tests under SyntheticGesture
| |
| 686 CreateControllerAndTarget<MockScrollTouchTarget>(); | 786 SingleScrollGestureTouchZeroDistance) { |
| 787 CreateControllerAndTarget<MockMoveTouchTarget>(); | |
| 687 | 788 |
| 688 SyntheticSmoothScrollGestureParams params; | 789 SyntheticSmoothScrollGestureParams params; |
| 689 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 790 SyntheticSmoothMoveGesture::InputType input_type; |
| 791 if (GetParam()) { | |
| 792 input_type = SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 793 } else { | |
| 794 input_type = SyntheticSmoothMoveGesture::TOUCH_DRAG_INPUT; | |
| 795 } | |
| 690 params.anchor.SetPoint(-32, 43); | 796 params.anchor.SetPoint(-32, 43); |
| 691 params.distances.push_back(gfx::Vector2d(0, 0)); | 797 params.distances.push_back(gfx::Vector2d(0, 0)); |
| 692 | 798 |
| 693 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 799 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 694 new SyntheticSmoothScrollGesture(params)); | 800 CreateMoveGestureUsingParams(params, input_type); |
| 695 QueueSyntheticGesture(gesture.Pass()); | 801 QueueSyntheticGesture(gesture.Pass()); |
| 696 FlushInputUntilComplete(); | 802 FlushInputUntilComplete(); |
| 697 | 803 |
| 698 MockScrollGestureTarget* scroll_target = | 804 MockMoveGestureTarget* scroll_target = |
| 699 static_cast<MockScrollGestureTarget*>(target_); | 805 static_cast<MockMoveGestureTarget*>(target_); |
| 700 EXPECT_EQ(1, num_success_); | 806 EXPECT_EQ(1, num_success_); |
| 701 EXPECT_EQ(0, num_failure_); | 807 EXPECT_EQ(0, num_failure_); |
| 702 EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_target->start_to_end_distance()); | 808 EXPECT_EQ(gfx::Vector2dF(0, 0), scroll_target->start_to_end_distance()); |
| 703 } | 809 } |
| 704 | 810 |
| 705 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) { | 811 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseVertical) { |
| 706 CreateControllerAndTarget<MockScrollMouseTarget>(); | 812 CreateControllerAndTarget<MockScrollMouseTarget>(); |
| 707 | 813 |
| 708 SyntheticSmoothScrollGestureParams params; | 814 SyntheticSmoothScrollGestureParams params; |
| 709 params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; | 815 SyntheticSmoothMoveGesture::InputType input_type = |
| 816 SyntheticSmoothMoveGesture::MOUSE_WHEEL_INPUT; | |
| 710 params.anchor.SetPoint(432, 89); | 817 params.anchor.SetPoint(432, 89); |
| 711 params.distances.push_back(gfx::Vector2d(0, -234)); | 818 params.distances.push_back(gfx::Vector2d(0, -234)); |
| 712 | 819 |
| 713 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 820 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 714 new SyntheticSmoothScrollGesture(params)); | 821 CreateMoveGestureUsingParams(params, input_type); |
| 715 QueueSyntheticGesture(gesture.Pass()); | 822 QueueSyntheticGesture(gesture.Pass()); |
| 716 FlushInputUntilComplete(); | 823 FlushInputUntilComplete(); |
| 717 | 824 |
| 718 MockScrollGestureTarget* scroll_target = | 825 MockMoveGestureTarget* scroll_target = |
| 719 static_cast<MockScrollGestureTarget*>(target_); | 826 static_cast<MockMoveGestureTarget*>(target_); |
| 720 EXPECT_EQ(1, num_success_); | 827 EXPECT_EQ(1, num_success_); |
| 721 EXPECT_EQ(0, num_failure_); | 828 EXPECT_EQ(0, num_failure_); |
| 722 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); | 829 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| 723 } | 830 } |
| 724 | 831 |
| 725 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) { | 832 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseHorizontal) { |
| 726 CreateControllerAndTarget<MockScrollMouseTarget>(); | 833 CreateControllerAndTarget<MockScrollMouseTarget>(); |
| 727 | 834 |
| 728 SyntheticSmoothScrollGestureParams params; | 835 SyntheticSmoothScrollGestureParams params; |
| 729 params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; | 836 SyntheticSmoothMoveGesture::InputType input_type = |
| 837 SyntheticSmoothMoveGesture::MOUSE_WHEEL_INPUT; | |
| 730 params.anchor.SetPoint(90, 12); | 838 params.anchor.SetPoint(90, 12); |
| 731 params.distances.push_back(gfx::Vector2d(345, 0)); | 839 params.distances.push_back(gfx::Vector2d(345, 0)); |
| 732 | 840 |
| 733 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 841 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 734 new SyntheticSmoothScrollGesture(params)); | 842 CreateMoveGestureUsingParams(params, input_type); |
| 735 QueueSyntheticGesture(gesture.Pass()); | 843 QueueSyntheticGesture(gesture.Pass()); |
| 736 FlushInputUntilComplete(); | 844 FlushInputUntilComplete(); |
| 737 | 845 |
| 738 MockScrollGestureTarget* scroll_target = | 846 MockMoveGestureTarget* scroll_target = |
| 739 static_cast<MockScrollGestureTarget*>(target_); | 847 static_cast<MockMoveGestureTarget*>(target_); |
| 740 EXPECT_EQ(1, num_success_); | 848 EXPECT_EQ(1, num_success_); |
| 741 EXPECT_EQ(0, num_failure_); | 849 EXPECT_EQ(0, num_failure_); |
| 742 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); | 850 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| 743 } | 851 } |
| 744 | 852 |
| 745 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) { | 853 TEST_F(SyntheticGestureControllerTest, SingleScrollGestureMouseDiagonal) { |
| 746 CreateControllerAndTarget<MockScrollMouseTarget>(); | 854 CreateControllerAndTarget<MockScrollMouseTarget>(); |
| 747 | 855 |
| 748 SyntheticSmoothScrollGestureParams params; | 856 SyntheticSmoothScrollGestureParams params; |
| 749 params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; | 857 SyntheticSmoothMoveGesture::InputType input_type = |
| 858 SyntheticSmoothMoveGesture::MOUSE_WHEEL_INPUT; | |
| 750 params.anchor.SetPoint(90, 12); | 859 params.anchor.SetPoint(90, 12); |
| 751 params.distances.push_back(gfx::Vector2d(-194, 303)); | 860 params.distances.push_back(gfx::Vector2d(-194, 303)); |
| 752 | 861 |
| 753 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 862 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 754 new SyntheticSmoothScrollGesture(params)); | 863 CreateMoveGestureUsingParams(params, input_type); |
| 755 QueueSyntheticGesture(gesture.Pass()); | 864 QueueSyntheticGesture(gesture.Pass()); |
| 756 FlushInputUntilComplete(); | 865 FlushInputUntilComplete(); |
| 757 | 866 |
| 758 MockScrollGestureTarget* scroll_target = | 867 MockMoveGestureTarget* scroll_target = |
| 759 static_cast<MockScrollGestureTarget*>(target_); | 868 static_cast<MockMoveGestureTarget*>(target_); |
| 760 EXPECT_EQ(1, num_success_); | 869 EXPECT_EQ(1, num_success_); |
| 761 EXPECT_EQ(0, num_failure_); | 870 EXPECT_EQ(0, num_failure_); |
| 762 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); | 871 EXPECT_EQ(params.distances[0], scroll_target->start_to_end_distance()); |
| 763 } | 872 } |
| 764 | 873 |
| 765 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) { | 874 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouse) { |
| 766 CreateControllerAndTarget<MockScrollMouseTarget>(); | 875 CreateControllerAndTarget<MockScrollMouseTarget>(); |
| 767 | 876 |
| 768 SyntheticSmoothScrollGestureParams params; | 877 SyntheticSmoothScrollGestureParams params; |
| 769 params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; | 878 SyntheticSmoothMoveGesture::InputType input_type = |
| 879 SyntheticSmoothMoveGesture::MOUSE_WHEEL_INPUT; | |
| 770 params.anchor.SetPoint(90, 12); | 880 params.anchor.SetPoint(90, 12); |
| 771 params.distances.push_back(gfx::Vector2d(-129, 212)); | 881 params.distances.push_back(gfx::Vector2d(-129, 212)); |
| 772 params.distances.push_back(gfx::Vector2d(8, -9)); | 882 params.distances.push_back(gfx::Vector2d(8, -9)); |
| 773 | 883 |
| 774 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 884 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 775 new SyntheticSmoothScrollGesture(params)); | 885 CreateMoveGestureUsingParams(params, input_type); |
| 776 QueueSyntheticGesture(gesture.Pass()); | 886 QueueSyntheticGesture(gesture.Pass()); |
| 777 FlushInputUntilComplete(); | 887 FlushInputUntilComplete(); |
| 778 | 888 |
| 779 MockScrollGestureTarget* scroll_target = | 889 MockMoveGestureTarget* scroll_target = |
| 780 static_cast<MockScrollGestureTarget*>(target_); | 890 static_cast<MockMoveGestureTarget*>(target_); |
| 781 EXPECT_EQ(1, num_success_); | 891 EXPECT_EQ(1, num_success_); |
| 782 EXPECT_EQ(0, num_failure_); | 892 EXPECT_EQ(0, num_failure_); |
| 783 EXPECT_EQ(params.distances[0] + params.distances[1], | 893 EXPECT_EQ(params.distances[0] + params.distances[1], |
| 784 scroll_target->start_to_end_distance()); | 894 scroll_target->start_to_end_distance()); |
| 785 } | 895 } |
| 786 | 896 |
| 787 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouseHorizontal) { | 897 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureMouseHorizontal) { |
| 788 CreateControllerAndTarget<MockScrollMouseTarget>(); | 898 CreateControllerAndTarget<MockScrollMouseTarget>(); |
| 789 | 899 |
| 790 SyntheticSmoothScrollGestureParams params; | 900 SyntheticSmoothScrollGestureParams params; |
| 791 params.gesture_source_type = SyntheticGestureParams::MOUSE_INPUT; | 901 SyntheticSmoothMoveGesture::InputType input_type = |
| 902 SyntheticSmoothMoveGesture::MOUSE_WHEEL_INPUT; | |
| 792 params.anchor.SetPoint(90, 12); | 903 params.anchor.SetPoint(90, 12); |
| 793 params.distances.push_back(gfx::Vector2d(-129, 0)); | 904 params.distances.push_back(gfx::Vector2d(-129, 0)); |
| 794 params.distances.push_back(gfx::Vector2d(79, 0)); | 905 params.distances.push_back(gfx::Vector2d(79, 0)); |
| 795 | 906 |
| 796 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 907 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 797 new SyntheticSmoothScrollGesture(params)); | 908 CreateMoveGestureUsingParams(params, input_type); |
| 798 QueueSyntheticGesture(gesture.Pass()); | 909 QueueSyntheticGesture(gesture.Pass()); |
| 799 FlushInputUntilComplete(); | 910 FlushInputUntilComplete(); |
| 800 | 911 |
| 801 MockScrollGestureTarget* scroll_target = | 912 MockMoveGestureTarget* scroll_target = |
| 802 static_cast<MockScrollGestureTarget*>(target_); | 913 static_cast<MockMoveGestureTarget*>(target_); |
| 803 EXPECT_EQ(1, num_success_); | 914 EXPECT_EQ(1, num_success_); |
| 804 EXPECT_EQ(0, num_failure_); | 915 EXPECT_EQ(0, num_failure_); |
| 805 // This check only works for horizontal or vertical scrolls because of | 916 // This check only works for horizontal or vertical scrolls because of |
| 806 // floating point precision issues with diagonal scrolls. | 917 // floating point precision issues with diagonal scrolls. |
| 807 EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), | 918 EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), |
| 808 scroll_target->total_abs_scroll_distance_length()); | 919 scroll_target->total_abs_move_distance_length()); |
| 809 EXPECT_EQ(params.distances[0] + params.distances[1], | 920 EXPECT_EQ(params.distances[0] + params.distances[1], |
| 810 scroll_target->start_to_end_distance()); | 921 scroll_target->start_to_end_distance()); |
| 811 } | 922 } |
| 812 | 923 |
| 813 void CheckIsWithinRangeMulti(float scroll_distance, | 924 void CheckIsWithinRangeMulti(float scroll_distance, |
| 814 int target_distance, | 925 int target_distance, |
| 815 SyntheticGestureTarget* target) { | 926 SyntheticGestureTarget* target) { |
| 816 if (target_distance > 0) { | 927 if (target_distance > 0) { |
| 817 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); | 928 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); |
| 818 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); | 929 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); |
| 819 } else { | 930 } else { |
| 820 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); | 931 EXPECT_LE(scroll_distance, target_distance + target->GetTouchSlopInDips()); |
| 821 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); | 932 EXPECT_GE(scroll_distance, target_distance - target->GetTouchSlopInDips()); |
| 822 } | 933 } |
| 823 } | 934 } |
| 824 | 935 |
| 825 void CheckMultiScrollDistanceIsWithinRange( | 936 void CheckMultiScrollDistanceIsWithinRange( |
| 826 const gfx::Vector2dF& scroll_distance, | 937 const gfx::Vector2dF& scroll_distance, |
| 827 const gfx::Vector2d& target_distance, | 938 const gfx::Vector2d& target_distance, |
| 828 SyntheticGestureTarget* target) { | 939 SyntheticGestureTarget* target) { |
| 829 CheckIsWithinRangeMulti(scroll_distance.x(), target_distance.x(), target); | 940 CheckIsWithinRangeMulti(scroll_distance.x(), target_distance.x(), target); |
| 830 CheckIsWithinRangeMulti(scroll_distance.y(), target_distance.y(), target); | 941 CheckIsWithinRangeMulti(scroll_distance.y(), target_distance.y(), target); |
| 831 } | 942 } |
| 832 | 943 |
| 833 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) { | 944 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouch) { |
| 834 CreateControllerAndTarget<MockScrollTouchTarget>(); | 945 CreateControllerAndTarget<MockMoveTouchTarget>(); |
| 835 | 946 |
| 836 SyntheticSmoothScrollGestureParams params; | 947 SyntheticSmoothScrollGestureParams params; |
| 837 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 948 SyntheticSmoothMoveGesture::InputType input_type = |
| 949 SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 838 params.anchor.SetPoint(8, -13); | 950 params.anchor.SetPoint(8, -13); |
| 839 params.distances.push_back(gfx::Vector2d(234, 133)); | 951 params.distances.push_back(gfx::Vector2d(234, 133)); |
| 840 params.distances.push_back(gfx::Vector2d(-9, 78)); | 952 params.distances.push_back(gfx::Vector2d(-9, 78)); |
| 841 | 953 |
| 842 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 954 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 843 new SyntheticSmoothScrollGesture(params)); | 955 CreateMoveGestureUsingParams(params, input_type); |
| 844 QueueSyntheticGesture(gesture.Pass()); | 956 QueueSyntheticGesture(gesture.Pass()); |
| 845 FlushInputUntilComplete(); | 957 FlushInputUntilComplete(); |
| 846 | 958 |
| 847 MockScrollGestureTarget* scroll_target = | 959 MockMoveGestureTarget* scroll_target = |
| 848 static_cast<MockScrollGestureTarget*>(target_); | 960 static_cast<MockMoveGestureTarget*>(target_); |
| 849 EXPECT_EQ(1, num_success_); | 961 EXPECT_EQ(1, num_success_); |
| 850 EXPECT_EQ(0, num_failure_); | 962 EXPECT_EQ(0, num_failure_); |
| 851 CheckMultiScrollDistanceIsWithinRange( | 963 CheckMultiScrollDistanceIsWithinRange( |
| 852 scroll_target->start_to_end_distance(), | 964 scroll_target->start_to_end_distance(), |
| 853 params.distances[0] + params.distances[1], | 965 params.distances[0] + params.distances[1], |
| 854 target_); | 966 target_); |
| 855 } | 967 } |
| 856 | 968 |
| 857 TEST_F(SyntheticGestureControllerTest, MultiScrollGestureTouchVertical) { | 969 TEST_P(SyntheticGestureControllerTestWithParam, |
| 858 CreateControllerAndTarget<MockScrollTouchTarget>(); | 970 MultiScrollGestureTouchVertical) { |
| 971 CreateControllerAndTarget<MockMoveTouchTarget>(); | |
| 859 | 972 |
| 860 SyntheticSmoothScrollGestureParams params; | 973 SyntheticSmoothScrollGestureParams params; |
| 861 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 974 SyntheticSmoothMoveGesture::InputType input_type; |
| 975 if (GetParam()) { | |
| 976 input_type = SyntheticSmoothMoveGesture::TOUCH_SCROLL_INPUT; | |
| 977 } else { | |
| 978 input_type = SyntheticSmoothMoveGesture::TOUCH_DRAG_INPUT; | |
| 979 } | |
| 862 params.anchor.SetPoint(234, -13); | 980 params.anchor.SetPoint(234, -13); |
| 863 params.distances.push_back(gfx::Vector2d(0, 133)); | 981 params.distances.push_back(gfx::Vector2d(0, 133)); |
| 864 params.distances.push_back(gfx::Vector2d(0, 78)); | 982 params.distances.push_back(gfx::Vector2d(0, 78)); |
| 865 | 983 |
| 866 scoped_ptr<SyntheticSmoothScrollGesture> gesture( | 984 scoped_ptr<SyntheticSmoothMoveGesture> gesture = |
| 867 new SyntheticSmoothScrollGesture(params)); | 985 CreateMoveGestureUsingParams(params, input_type); |
| 868 QueueSyntheticGesture(gesture.Pass()); | 986 QueueSyntheticGesture(gesture.Pass()); |
| 869 FlushInputUntilComplete(); | 987 FlushInputUntilComplete(); |
| 870 | 988 |
| 871 MockScrollGestureTarget* scroll_target = | 989 MockMoveGestureTarget* scroll_target = |
| 872 static_cast<MockScrollGestureTarget*>(target_); | 990 static_cast<MockMoveGestureTarget*>(target_); |
| 873 EXPECT_EQ(1, num_success_); | 991 EXPECT_EQ(1, num_success_); |
| 874 EXPECT_EQ(0, num_failure_); | 992 EXPECT_EQ(0, num_failure_); |
| 875 EXPECT_FLOAT_EQ( | 993 if (GetParam()) { |
| 876 params.distances[0].Length() + params.distances[1].Length() + | 994 EXPECT_FLOAT_EQ(params.distances[0].Length() + |
| 877 target_->GetTouchSlopInDips(), | 995 params.distances[1].Length() + |
| 878 scroll_target->total_abs_scroll_distance_length()); | 996 target_->GetTouchSlopInDips(), |
| 997 scroll_target->total_abs_move_distance_length()); | |
| 879 EXPECT_EQ(AddTouchSlopToVector(params.distances[0] + params.distances[1], | 998 EXPECT_EQ(AddTouchSlopToVector(params.distances[0] + params.distances[1], |
| 880 target_), | 999 target_), |
| 881 scroll_target->start_to_end_distance()); | 1000 scroll_target->start_to_end_distance()); |
| 1001 } else { | |
| 1002 EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), | |
| 1003 scroll_target->total_abs_move_distance_length()); | |
| 1004 EXPECT_EQ(params.distances[0] + params.distances[1], | |
| 1005 scroll_target->start_to_end_distance()); | |
| 1006 } | |
| 1007 } | |
| 1008 | |
| 1009 scoped_ptr<SyntheticSmoothMoveGesture> CreateMoveGestureUsingParams( | |
| 1010 SyntheticSmoothDragGestureParams params, | |
| 1011 SyntheticSmoothMoveGesture::InputType input_type) { | |
| 1012 bool prevent_fling = true; | |
| 1013 | |
| 1014 scoped_ptr<SyntheticSmoothMoveGesture> gesture(new SyntheticSmoothMoveGesture( | |
| 1015 input_type, params.start_point, params.distances, | |
| 1016 params.speed_in_pixels_s, prevent_fling)); | |
| 1017 return gesture; | |
| 1018 } | |
| 1019 | |
| 1020 TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseVertical) { | |
| 1021 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1022 | |
| 1023 SyntheticSmoothDragGestureParams params; | |
| 1024 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1025 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1026 params.start_point.SetPoint(89, 32); | |
| 1027 params.distances.push_back(gfx::Vector2d(0, 123)); | |
| 1028 | |
| 1029 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1030 CreateMoveGestureUsingParams(params, input_type); | |
| 1031 QueueSyntheticGesture(gesture.Pass()); | |
| 1032 FlushInputUntilComplete(); | |
| 1033 | |
| 1034 MockMoveGestureTarget* drag_target = | |
| 1035 static_cast<MockMoveGestureTarget*>(target_); | |
| 1036 EXPECT_EQ(1, num_success_); | |
| 1037 EXPECT_EQ(0, num_failure_); | |
| 1038 EXPECT_EQ(params.distances[0], drag_target->start_to_end_distance()); | |
| 1039 } | |
| 1040 | |
| 1041 TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseHorizontal) { | |
| 1042 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1043 | |
| 1044 SyntheticSmoothDragGestureParams params; | |
| 1045 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1046 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1047 params.start_point.SetPoint(12, -23); | |
| 1048 params.distances.push_back(gfx::Vector2d(-234, 0)); | |
| 1049 | |
| 1050 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1051 CreateMoveGestureUsingParams(params, input_type); | |
| 1052 QueueSyntheticGesture(gesture.Pass()); | |
| 1053 FlushInputUntilComplete(); | |
| 1054 | |
| 1055 MockMoveGestureTarget* drag_target = | |
| 1056 static_cast<MockMoveGestureTarget*>(target_); | |
| 1057 EXPECT_EQ(1, num_success_); | |
| 1058 EXPECT_EQ(0, num_failure_); | |
| 1059 EXPECT_EQ(params.distances[0], drag_target->start_to_end_distance()); | |
| 1060 } | |
| 1061 | |
| 1062 TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseDiagonal) { | |
| 1063 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1064 | |
| 1065 SyntheticSmoothDragGestureParams params; | |
| 1066 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1067 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1068 params.start_point.SetPoint(0, 7); | |
| 1069 params.distances.push_back(gfx::Vector2d(413, -83)); | |
| 1070 | |
| 1071 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1072 CreateMoveGestureUsingParams(params, input_type); | |
| 1073 QueueSyntheticGesture(gesture.Pass()); | |
| 1074 FlushInputUntilComplete(); | |
| 1075 | |
| 1076 MockMoveGestureTarget* drag_target = | |
| 1077 static_cast<MockMoveGestureTarget*>(target_); | |
| 1078 EXPECT_EQ(1, num_success_); | |
| 1079 EXPECT_EQ(0, num_failure_); | |
| 1080 EXPECT_EQ(drag_target->start_to_end_distance(), params.distances[0]); | |
| 1081 } | |
| 1082 | |
| 1083 TEST_F(SyntheticGestureControllerTest, SingleDragGestureMouseZeroDistance) { | |
| 1084 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1085 | |
| 1086 SyntheticSmoothDragGestureParams params; | |
| 1087 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1088 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1089 params.start_point.SetPoint(-32, 43); | |
| 1090 params.distances.push_back(gfx::Vector2d(0, 0)); | |
| 1091 | |
| 1092 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1093 CreateMoveGestureUsingParams(params, input_type); | |
| 1094 QueueSyntheticGesture(gesture.Pass()); | |
| 1095 FlushInputUntilComplete(); | |
| 1096 | |
| 1097 MockMoveGestureTarget* drag_target = | |
| 1098 static_cast<MockMoveGestureTarget*>(target_); | |
| 1099 EXPECT_EQ(1, num_success_); | |
| 1100 EXPECT_EQ(0, num_failure_); | |
| 1101 EXPECT_EQ(gfx::Vector2dF(0, 0), drag_target->start_to_end_distance()); | |
| 1102 } | |
| 1103 | |
| 1104 TEST_F(SyntheticGestureControllerTest, MultiDragGestureMouse) { | |
| 1105 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1106 | |
| 1107 SyntheticSmoothDragGestureParams params; | |
| 1108 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1109 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1110 params.start_point.SetPoint(8, -13); | |
| 1111 params.distances.push_back(gfx::Vector2d(234, 133)); | |
| 1112 params.distances.push_back(gfx::Vector2d(-9, 78)); | |
| 1113 | |
| 1114 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1115 CreateMoveGestureUsingParams(params, input_type); | |
| 1116 QueueSyntheticGesture(gesture.Pass()); | |
| 1117 FlushInputUntilComplete(); | |
| 1118 | |
| 1119 MockMoveGestureTarget* drag_target = | |
| 1120 static_cast<MockMoveGestureTarget*>(target_); | |
| 1121 EXPECT_EQ(1, num_success_); | |
| 1122 EXPECT_EQ(0, num_failure_); | |
| 1123 EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), | |
| 1124 drag_target->total_abs_move_distance_length()); | |
| 1125 EXPECT_EQ(drag_target->start_to_end_distance(), | |
| 1126 params.distances[0] + params.distances[1]); | |
| 1127 } | |
| 1128 | |
| 1129 TEST_F(SyntheticGestureControllerTest, MultiDragGestureMouseVertical) { | |
| 1130 CreateControllerAndTarget<MockDragMouseTarget>(); | |
| 1131 | |
| 1132 SyntheticSmoothDragGestureParams params; | |
| 1133 SyntheticSmoothMoveGesture::InputType input_type = | |
| 1134 SyntheticSmoothMoveGesture::MOUSE_DRAG_INPUT; | |
| 1135 params.start_point.SetPoint(234, -13); | |
| 1136 params.distances.push_back(gfx::Vector2d(0, 133)); | |
| 1137 params.distances.push_back(gfx::Vector2d(0, 78)); | |
| 1138 | |
| 1139 scoped_ptr<SyntheticSmoothMoveGesture> gesture = | |
| 1140 CreateMoveGestureUsingParams(params, input_type); | |
| 1141 QueueSyntheticGesture(gesture.Pass()); | |
| 1142 FlushInputUntilComplete(); | |
| 1143 | |
| 1144 MockMoveGestureTarget* drag_target = | |
| 1145 static_cast<MockMoveGestureTarget*>(target_); | |
| 1146 EXPECT_EQ(1, num_success_); | |
| 1147 EXPECT_EQ(0, num_failure_); | |
| 1148 EXPECT_FLOAT_EQ(params.distances[0].Length() + params.distances[1].Length(), | |
| 1149 drag_target->total_abs_move_distance_length()); | |
| 1150 EXPECT_EQ(params.distances[0] + params.distances[1], | |
| 1151 drag_target->start_to_end_distance()); | |
| 882 } | 1152 } |
| 883 | 1153 |
| 884 TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) { | 1154 TEST_F(SyntheticGestureControllerTest, PinchGestureTouchZoomIn) { |
| 885 CreateControllerAndTarget<MockSyntheticPinchTouchTarget>(); | 1155 CreateControllerAndTarget<MockSyntheticPinchTouchTarget>(); |
| 886 | 1156 |
| 887 SyntheticPinchGestureParams params; | 1157 SyntheticPinchGestureParams params; |
| 888 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | 1158 params.gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| 889 params.scale_factor = 2.3f; | 1159 params.scale_factor = 2.3f; |
| 890 params.anchor.SetPoint(54, 89); | 1160 params.anchor.SetPoint(54, 89); |
| 891 | 1161 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 985 EXPECT_TRUE(tap_target->GestureFinished()); | 1255 EXPECT_TRUE(tap_target->GestureFinished()); |
| 986 EXPECT_EQ(tap_target->position(), params.position); | 1256 EXPECT_EQ(tap_target->position(), params.position); |
| 987 EXPECT_EQ(tap_target->GetDuration().InMilliseconds(), params.duration_ms); | 1257 EXPECT_EQ(tap_target->GetDuration().InMilliseconds(), params.duration_ms); |
| 988 EXPECT_GE(GetTotalTime(), | 1258 EXPECT_GE(GetTotalTime(), |
| 989 base::TimeDelta::FromMilliseconds(params.duration_ms)); | 1259 base::TimeDelta::FromMilliseconds(params.duration_ms)); |
| 990 } | 1260 } |
| 991 | 1261 |
| 992 } // namespace | 1262 } // namespace |
| 993 | 1263 |
| 994 } // namespace content | 1264 } // namespace content |
| OLD | NEW |