| Index: ui/aura/gestures/gesture_recognizer_unittest.cc
|
| diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| index 6879d8f050e5a4ef8526d3089e7b43e92372da37..80fa46eab4c1f3564ff8fb2523b3987edaa0581a 100644
|
| --- a/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| +++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
|
| @@ -37,6 +37,7 @@ class GestureEventConsumeDelegate : public TestWindowDelegate {
|
| pinch_update_(false),
|
| pinch_end_(false),
|
| long_press_(false),
|
| + three_finger_swipe_(false),
|
| scroll_x_(0),
|
| scroll_y_(0),
|
| velocity_x_(0),
|
| @@ -56,6 +57,7 @@ class GestureEventConsumeDelegate : public TestWindowDelegate {
|
| pinch_update_ = false;
|
| pinch_end_ = false;
|
| long_press_ = false;
|
| + three_finger_swipe_ = false;
|
|
|
| scroll_begin_position_.SetPoint(0, 0);
|
|
|
| @@ -75,6 +77,7 @@ class GestureEventConsumeDelegate : public TestWindowDelegate {
|
| bool pinch_update() const { return pinch_update_; }
|
| bool pinch_end() const { return pinch_end_; }
|
| bool long_press() const { return long_press_; }
|
| + bool three_finger_swipe() const { return three_finger_swipe_; }
|
|
|
| const gfx::Point scroll_begin_position() const {
|
| return scroll_begin_position_;
|
| @@ -124,6 +127,11 @@ class GestureEventConsumeDelegate : public TestWindowDelegate {
|
| long_press_ = true;
|
| touch_id_ = gesture->delta_x();
|
| break;
|
| + case ui::ET_GESTURE_THREE_FINGER_SWIPE:
|
| + three_finger_swipe_ = true;
|
| + velocity_x_ = gesture->delta_x();
|
| + velocity_y_ = gesture->delta_y();
|
| + break;
|
| default:
|
| NOTREACHED();
|
| }
|
| @@ -141,6 +149,7 @@ class GestureEventConsumeDelegate : public TestWindowDelegate {
|
| bool pinch_update_;
|
| bool pinch_end_;
|
| bool long_press_;
|
| + bool three_finger_swipe_;
|
|
|
| gfx::Point scroll_begin_position_;
|
|
|
| @@ -316,7 +325,6 @@ void SendScrollEvents(RootWindow* root_window,
|
| base::TimeDelta time = time_start;
|
|
|
| for (int i = 0; i < num_steps; i++) {
|
| - delegate->Reset();
|
| x += dx;
|
| y += dy;
|
| time = time + base::TimeDelta::FromMilliseconds(time_step);
|
| @@ -1485,5 +1493,189 @@ TEST_F(GestureRecognizerTest, NoTapWithPreventDefaultedRelease) {
|
| EXPECT_FALSE(delegate->tap());
|
| }
|
|
|
| +TEST_F(GestureRecognizerTest, GestureEventThreeFingerSwipe) {
|
| + scoped_ptr<GestureEventConsumeDelegate> delegate(
|
| + new GestureEventConsumeDelegate());
|
| + const int kTouchId1 = 7;
|
| + const int kTouchId2 = 2;
|
| + const int kTouchId3 = 9;
|
| + gfx::Rect bounds(0, 0, 1000, 1000);
|
| + scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
|
| + delegate.get(), -1234, bounds, NULL));
|
| +
|
| + TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0),
|
| + kTouchId1, GetTime());
|
| + TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0),
|
| + kTouchId2, GetTime());
|
| + TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0),
|
| + kTouchId3, GetTime());
|
| +
|
| + TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(0, 0),
|
| + kTouchId1, GetTime());
|
| + TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(0, 0),
|
| + kTouchId2, GetTime());
|
| + TouchEvent release3(ui::ET_TOUCH_RELEASED, gfx::Point(0, 0),
|
| + kTouchId3, GetTime());
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Start by testing all four directions
|
| +
|
| + int kBufferedPoints =
|
| + ui::GestureConfiguration::points_buffered_for_velocity();
|
| +
|
| + // Swipe right
|
| + SendScrollEvents(root_window(), 1, 1, press1.time_stamp(),
|
| + 100, 10, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1, press2.time_stamp(),
|
| + 100, 10, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1, press3.time_stamp(),
|
| + 100, 10, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_TRUE(delegate->three_finger_swipe());
|
| + EXPECT_EQ(1, delegate->velocity_x());
|
| + EXPECT_EQ(0, delegate->velocity_y());
|
| +
|
| + root_window()->DispatchTouchEvent(&release1);
|
| + root_window()->DispatchTouchEvent(&release2);
|
| + root_window()->DispatchTouchEvent(&release3);
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Swipe left
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + -100, 10, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + -100, 10, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + -100, 10, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_TRUE(delegate->three_finger_swipe());
|
| + EXPECT_EQ(-1, delegate->velocity_x());
|
| + EXPECT_EQ(0, delegate->velocity_y());
|
| +
|
| + root_window()->DispatchTouchEvent(&release1);
|
| + root_window()->DispatchTouchEvent(&release2);
|
| + root_window()->DispatchTouchEvent(&release3);
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Swipe down
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + 10, 100, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + 10, 100, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + 10, 100, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_TRUE(delegate->three_finger_swipe());
|
| + EXPECT_EQ(0, delegate->velocity_x());
|
| + EXPECT_EQ(1, delegate->velocity_y());
|
| +
|
| + root_window()->DispatchTouchEvent(&release1);
|
| + root_window()->DispatchTouchEvent(&release2);
|
| + root_window()->DispatchTouchEvent(&release3);
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Swipe up
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + 10, -100, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + 10, -100, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + 10, -100, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_TRUE(delegate->three_finger_swipe());
|
| + EXPECT_EQ(0, delegate->velocity_x());
|
| + EXPECT_EQ(-1, delegate->velocity_y());
|
| +
|
| + // Only one swipe can occur per press of three fingers
|
| + delegate->Reset();
|
| +
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + 10, -100, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + 10, -100, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + 10, -100, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_FALSE(delegate->three_finger_swipe());
|
| +
|
| + root_window()->DispatchTouchEvent(&release1);
|
| + root_window()->DispatchTouchEvent(&release2);
|
| + root_window()->DispatchTouchEvent(&release3);
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Swiping diagonally doesn't fire an event
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + 100, -100, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + 100, -100, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + 100, -100, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_FALSE(delegate->three_finger_swipe());
|
| +
|
| + root_window()->DispatchTouchEvent(&release1);
|
| + root_window()->DispatchTouchEvent(&release2);
|
| + root_window()->DispatchTouchEvent(&release3);
|
| +
|
| + root_window()->DispatchTouchEvent(&press1);
|
| + root_window()->DispatchTouchEvent(&press2);
|
| + root_window()->DispatchTouchEvent(&press3);
|
| +
|
| + delegate->Reset();
|
| +
|
| + // Have to swipe in a consistent direction
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press1.time_stamp(),
|
| + 100, 10, kTouchId1, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press2.time_stamp(),
|
| + 100, 10, kTouchId2, 1, kBufferedPoints, delegate.get());
|
| + SendScrollEvents(root_window(), 1, 1,
|
| + press3.time_stamp(),
|
| + -100, 10, kTouchId3, 1, kBufferedPoints, delegate.get());
|
| +
|
| + EXPECT_FALSE(delegate->three_finger_swipe());
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace aura
|
|
|