Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: content/browser/renderer_host/input/synthetic_gesture_controller_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698