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

Unified Diff: ui/aura/gestures/gesture_recognizer_unittest.cc

Issue 10037012: Three Finger Swipe (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Remove pinch/scroll start/end calls Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/pref_names.cc ('k') | ui/base/events.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/common/pref_names.cc ('k') | ui/base/events.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698