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..71f1df5da4bd02bc83eeca58cc5715875c64f0df 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,194 @@ 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()); |
+ |
+ // Three fingers should transition to pinch |
+ root_window()->DispatchTouchEvent(&release1); |
+ |
+ EXPECT_TRUE(delegate->pinch_begin()); |
+} |
+ |
} // namespace test |
} // namespace aura |