summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-20 22:00:25 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-20 22:00:25 +0000
commitde14658e5f9d14f86a10c55c951bba087883cee7 (patch)
tree84933a1067d0c137c212c038a9bc985f6bf1dc4a /ui/base
parent39e2dca559fc38168119ddf54beaae47ec49db0e (diff)
downloadchromium_src-de14658e5f9d14f86a10c55c951bba087883cee7.zip
chromium_src-de14658e5f9d14f86a10c55c951bba087883cee7.tar.gz
chromium_src-de14658e5f9d14f86a10c55c951bba087883cee7.tar.bz2
Revert 133261 - Gesture Recognition unit tests have too many dependencies.
Most tests in gesture_recognizer_unittest.cc were rewritten to rely solely on GestureSequence. Several gaps in existing testing were filled, include double tap and touch cancel tests. The tests now ensure that GestureEvents are returned in the correct order, and consistenly verify that no unexpected events occurred. Tests on the GestureSequence ensure that the sequence of states passed through is as expected. BUG=120713 TEST=GestureRecognizerTest.*, GestureSequenceTest.* Review URL: http://codereview.chromium.org/9873033 TBR=tdresser@chromium.org Review URL: https://chromiumcodereview.appspot.com/10166017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133281 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base')
-rw-r--r--ui/base/gestures/gesture_configuration.cc21
-rw-r--r--ui/base/gestures/gesture_configuration.h2
-rw-r--r--ui/base/gestures/gesture_sequence.h6
-rw-r--r--ui/base/gestures/gesture_sequence_test_base.cc237
-rw-r--r--ui/base/gestures/gesture_sequence_test_base.h170
-rw-r--r--ui/base/gestures/gesture_sequence_unittest.cc624
-rw-r--r--ui/base/test/test_gesture_sequence.cc26
-rw-r--r--ui/base/test/test_gesture_sequence.h48
8 files changed, 3 insertions, 1131 deletions
diff --git a/ui/base/gestures/gesture_configuration.cc b/ui/base/gestures/gesture_configuration.cc
index aa0b01d..17a9d6f 100644
--- a/ui/base/gestures/gesture_configuration.cc
+++ b/ui/base/gestures/gesture_configuration.cc
@@ -32,25 +32,4 @@ int GestureConfiguration::points_buffered_for_velocity_ = 10;
double GestureConfiguration::rail_break_proportion_ = 15;
double GestureConfiguration::rail_start_proportion_ = 2;
-// Use a separate set of value for unit testing, so that changing the
-// real values won't cause tests to fail.
-void GestureConfiguration::use_test_values() {
- long_press_time_in_seconds_ = 0.5;
- max_seconds_between_double_click_ = 0.7;
- max_separation_for_gesture_touches_in_pixels_ = 150;
- max_swipe_deviation_ratio_ = 3;
- max_touch_down_duration_in_seconds_for_click_ = 0.8;
- max_touch_move_in_pixels_for_click_ = 20;
- min_distance_for_pinch_scroll_in_pixels_ = 20;
- min_flick_speed_squared_ = 550.f * 550.f;
- min_pinch_update_distance_in_pixels_ = 5;
- min_rail_break_velocity_ = 200;
- min_scroll_delta_squared_ = 5 * 5;
- min_swipe_speed_ = 20;
- min_touch_down_duration_in_seconds_for_click_ = 0.01;
- points_buffered_for_velocity_ = 10;
- rail_break_proportion_ = 15;
- rail_start_proportion_ = 2;
-}
-
} // namespace ui
diff --git a/ui/base/gestures/gesture_configuration.h b/ui/base/gestures/gesture_configuration.h
index 1b56c9f..c1aa5dc 100644
--- a/ui/base/gestures/gesture_configuration.h
+++ b/ui/base/gestures/gesture_configuration.h
@@ -116,8 +116,6 @@ class UI_EXPORT GestureConfiguration {
rail_start_proportion_ = val;
}
- static void use_test_values();
-
private:
// These are listed in alphabetical order ignoring underscores, to
// align with the associated list of preferences in
diff --git a/ui/base/gestures/gesture_sequence.h b/ui/base/gestures/gesture_sequence.h
index eaf51ed..e8d7aab 100644
--- a/ui/base/gestures/gesture_sequence.h
+++ b/ui/base/gestures/gesture_sequence.h
@@ -56,9 +56,6 @@ class UI_EXPORT GestureSequence {
return long_press_timer_.get();
}
- // Current state of gesture recognizer.
- GestureState state_;
-
private:
void Reset();
@@ -149,6 +146,9 @@ class UI_EXPORT GestureSequence {
const GesturePoint& point,
Gestures* gestures);
+ // Current state of gesture recognizer.
+ GestureState state_;
+
// ui::EventFlags.
int flags_;
diff --git a/ui/base/gestures/gesture_sequence_test_base.cc b/ui/base/gestures/gesture_sequence_test_base.cc
deleted file mode 100644
index 6442780..0000000
--- a/ui/base/gestures/gesture_sequence_test_base.cc
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/base/gestures/gesture_sequence_test_base.h"
-
-#include <vector>
-#include "ui/base/gestures/gesture_configuration.h"
-#include "ui/base/gestures/gesture_sequence.h"
-
-namespace ui {
-namespace test {
-
-int FakeGestureEvent::GetLowestTouchId() const {
- if (touch_ids_bitfield_ == 0)
- return -1;
- int i = -1;
- // Find the index of the least significant 1 bit
- while (!(1 << ++i & touch_ids_bitfield_));
- return i;
-}
-
-EventType FakeTouchEvent::GetEventType() const {
- return type_;
-}
-
-gfx::Point FakeTouchEvent::GetLocation() const {
- return location_;
-}
-
-int FakeTouchEvent::GetTouchId() const {
- return touch_id_;
-}
-
-int FakeTouchEvent::GetEventFlags() const {
- return 0;
-}
-
-base::TimeDelta FakeTouchEvent::GetTimestamp() const {
- return timestamp_;
-};
-
-TouchEvent* FakeTouchEvent::Copy() const {
- return new FakeTouchEvent(type_, location_, touch_id_, timestamp_);
-};
-
-
-GestureSequenceTestBase::GestureSequenceTestBase() {
-}
-
-GestureSequenceTestBase::~GestureSequenceTestBase() {
-}
-
-GestureEvent* MockGestureEventHelper::CreateGestureEvent(EventType type,
- const gfx::Point& location,
- int flags,
- const base::Time time,
- float param_first,
- float param_second,
- unsigned int touch_ids_bitfield) {
- return new FakeGestureEvent(type, param_first,
- param_second, touch_ids_bitfield);
-}
-
-
-TouchEvent* MockGestureEventHelper::CreateTouchEvent(EventType type,
- const gfx::Point& location,
- int touch_id,
- base::TimeDelta time_stamp) {
- return NULL;
-}
-
-bool MockGestureEventHelper::DispatchLongPressGestureEvent(
- GestureEvent* event) {
- long_press_fired_ = true;
- return true;
-};
-
-bool MockGestureEventHelper::DispatchCancelTouchEvent(TouchEvent* event) {
- return false;
-}
-
-FakeGestures* GestureSequenceTestBase::Press(
- int x, int y, int touch_id) {
- return DoTouchWithDelay(ET_TOUCH_PRESSED, x, y, touch_id, 0);
-}
-
-FakeGestures* GestureSequenceTestBase::Move(
- int x, int y, int touch_id) {
- return DoTouchWithDelay(ET_TOUCH_MOVED, x, y, touch_id, 0);
-}
-
-FakeGestures* GestureSequenceTestBase::Release(
- int x, int y, int touch_id) {
- return DoTouchWithDelay(ET_TOUCH_RELEASED, x, y, touch_id, 0);
-}
-
-FakeGestures* GestureSequenceTestBase::Cancel(
- int x, int y, int touch_id) {
- return DoTouchWithDelay(ET_TOUCH_CANCELLED, x, y, touch_id, 0);
-}
-
-FakeGestures* GestureSequenceTestBase::Press(
- int x, int y, int touch_id, int delay) {
- return DoTouchWithDelay(ET_TOUCH_PRESSED, x, y, touch_id, delay);
-}
-
-FakeGestures* GestureSequenceTestBase::Move(
- int x, int y, int touch_id, int delay) {
- return DoTouchWithDelay(ET_TOUCH_MOVED, x, y, touch_id, delay);
-}
-
-FakeGestures* GestureSequenceTestBase::Release(
- int x, int y, int touch_id, int delay) {
- return DoTouchWithDelay(ET_TOUCH_RELEASED, x, y, touch_id, delay);
-}
-
-FakeGestures* GestureSequenceTestBase::Cancel(
- int x, int y, int touch_id, int delay) {
- return DoTouchWithDelay(ET_TOUCH_CANCELLED, x, y, touch_id, delay);
-}
-
-FakeGestures* GestureSequenceTestBase::ThreeFingeredSwipe(
- int id1, int x1, int y1, int id2, int x2, int y2, int id3, int x3, int y3) {
- Press(0, 0, id1);
- Press(0, 0, id2);
- Press(0, 0, id3);
-
- FakeGestures* gestures = new FakeGestures();
- for (int i = 0;
- i < GestureConfiguration::points_buffered_for_velocity();
- ++i) {
- FakeGestures* a = Move(x1 * i, y1 * i, id1);
- FakeGestures* b = Move(x2 * i, y2 * i, id2);
- FakeGestures* c = Move(x3 * i, y3 * i, id3);
- gestures->insert(gestures->end(), a->begin(), a->end());
- gestures->insert(gestures->end(), b->begin(), b->end());
- gestures->insert(gestures->end(), c->begin(), c->end());
- }
-
- return gestures;
-}
-
-FakeGestures* GestureSequenceTestBase::DoTouchWithDelay(
- EventType type,
- int x,
- int y,
- int touch_id,
- int delay) {
- base::TimeDelta now = base::Time::NowFromSystemTime() - base::Time();
-
- if (last_event_time_ < now)
- last_event_time_ = now;
-
- last_event_time_ += base::TimeDelta::FromMilliseconds(delay);
- FakeTouchEvent event(type, gfx::Point(x, y), touch_id, last_event_time_);
-
- GestureRecognizer::Gestures* gestures =
- gesture_sequence()->ProcessTouchEventForGesture(
- event, TOUCH_STATUS_UNKNOWN);
-
- FakeGestures* fake_gestures = NULL;
-
- if (gestures) {
- fake_gestures = new FakeGestures();
-
- for (size_t i = 0; i < gestures->size(); ++i)
- fake_gestures->push_back(static_cast<FakeGestureEvent*>((*gestures)[i]));
-
- gestures->weak_erase(gestures->begin(), gestures->end());
- delete gestures;
- }
-
- GestureState current_state = gesture_sequence()->state();
- if (current_state != states_->back())
- states_->push_back(gesture_sequence()->state());
- return fake_gestures;
-}
-
-bool GestureSequenceTestBase::EventTypesAre(
- FakeGestures* gestures,
- size_t num,
- ... /*EventType types */) {
- if (num != gestures->size())
- return false;
-
- va_list types;
- va_start(types, num);
-
- for (size_t i = 0; i < num; ++i) {
- if ((*gestures)[i]->type() != va_arg(types, int)) {
- va_end(types);
- return false;
- }
- }
- va_end(types);
- return true;
-}
-
-bool GestureSequenceTestBase::StatesAre(size_t num,
- ... /*GestureState* states*/) {
- if (num != states_->size())
- return false;
-
- va_list states;
- va_start(states, num);
-
- for (size_t i = 0; i < num; ++i) {
- if ((*states_)[i] != va_arg(states, int)) {
- va_end(states);
- return false;
- }
- }
- va_end(states);
- return true;
-}
-
-void GestureSequenceTestBase::SetUp() {
- testing::Test::SetUp();
-
- // Changing the parameters for gesture recognition shouldn't cause
- // tests to fail, so we use a separate set of parameters for unit
- // testing.
- GestureConfiguration::use_test_values();
-
- states_.reset(new std::vector<GestureState>());
- gesture_sequence_.reset(new TestGestureSequence(&helper_));
- states_->push_back(gesture_sequence()->state());
-}
-
-void GestureSequenceTestBase::TearDown() {
- gesture_sequence_.reset();
- testing::Test::TearDown();
-}
-
-} // namespace test
-} // namespace ui
diff --git a/ui/base/gestures/gesture_sequence_test_base.h b/ui/base/gestures/gesture_sequence_test_base.h
deleted file mode 100644
index 93136db..0000000
--- a/ui/base/gestures/gesture_sequence_test_base.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_BASE_GESTURES_GESTURE_SEQUENCE_TEST_BASE_H_
-#define UI_BASE_GESTURES_GESTURE_SEQUENCE_TEST_BASE_H_
-#pragma once
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/message_loop.h"
-#include "base/timer.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/gestures/gesture_types.h"
-#include "ui/base/test/test_gesture_sequence.h"
-
-namespace ui {
-namespace test {
-
-class FakeGestureEvent : public GestureEvent {
- public:
- FakeGestureEvent(EventType type,
- float param_first,
- float param_second,
- unsigned int touch_ids_bitfield)
- : type_(type),
- param_first_(param_first),
- param_second_(param_second),
- touch_ids_bitfield_(touch_ids_bitfield) {
- }
-
- virtual ~FakeGestureEvent() {}
-
- EventType type() const { return type_; }
- float param_first() const { return param_first_; }
- float param_second() const { return param_second_; }
-
- virtual int GetLowestTouchId() const OVERRIDE;
-
- EventType type_;
- float param_first_;
- float param_second_;
- int touch_ids_bitfield_;
-};
-
-typedef ScopedVector<FakeGestureEvent> FakeGestures;
-
-class FakeTouchEvent : public TouchEvent {
- public:
- FakeTouchEvent(
- EventType type,
- gfx::Point location,
- int touch_id,
- base::TimeDelta timestamp)
- : type_(type),
- location_(location),
- touch_id_(touch_id),
- timestamp_(timestamp) {
- }
-
- virtual ~FakeTouchEvent() {}
-
- virtual EventType GetEventType() const OVERRIDE;
- virtual gfx::Point GetLocation() const OVERRIDE;
- virtual int GetTouchId() const OVERRIDE;
- virtual int GetEventFlags() const OVERRIDE;
- virtual base::TimeDelta GetTimestamp() const OVERRIDE;
-
- // Returns a copy of this touch event. Used when queueing events for
- // asynchronous gesture recognition.
- virtual TouchEvent* Copy() const OVERRIDE;
-
- EventType type_;
- gfx::Point location_;
- int touch_id_;
- int flags_;
- base::TimeDelta timestamp_;
-};
-
-class MockGestureEventHelper : public GestureEventHelper {
- public:
- MockGestureEventHelper()
- : long_press_fired_(false) {
- }
-
- virtual GestureEvent* CreateGestureEvent(
- EventType type,
- const gfx::Point& location,
- int flags,
- const base::Time time,
- float param_first,
- float param_second,
- unsigned int touch_ids_bitfield) OVERRIDE;
-
- virtual TouchEvent* CreateTouchEvent(EventType type,
- const gfx::Point& location,
- int touch_id,
- base::TimeDelta time_stamp) OVERRIDE;
-
- virtual bool DispatchLongPressGestureEvent(GestureEvent* event) OVERRIDE;
-
- virtual bool DispatchCancelTouchEvent(TouchEvent* event) OVERRIDE;
-
- bool long_press_fired() {
- return long_press_fired_;
- }
-
- void Reset() {
- long_press_fired_ = false;
- }
-
- private:
- bool long_press_fired_;
-};
-
-// A base class for gesture sequence unit tests.
-
-class GestureSequenceTestBase : public testing::Test {
- public:
- GestureSequenceTestBase();
- virtual ~GestureSequenceTestBase();
-
- // testing::Test:
- virtual void SetUp() OVERRIDE;
- virtual void TearDown() OVERRIDE;
-
- protected:
- TestGestureSequence* gesture_sequence() { return gesture_sequence_.get(); }
-
- FakeGestures* Press(int x, int y, int touch_id);
- FakeGestures* Press(int x, int y, int touch_id, int delay);
- FakeGestures* Move(int x, int y, int touch_id);
- FakeGestures* Move(int x, int y, int touch_id, int delay);
- FakeGestures* Release(int x, int y, int touch_id);
- FakeGestures* Release(int x, int y, int touch_id, int delay);
- FakeGestures* Cancel(int x, int y, int touch_id);
- FakeGestures* Cancel(int x, int y, int touch_id, int delay);
-
- FakeGestures* ThreeFingeredSwipe(
- int id1, int x1, int y1,
- int id2, int x2, int y2,
- int id3, int x3, int y3);
-
- bool EventTypesAre(FakeGestures* gestures,
- size_t num,
- ... /*EventType types */);
- bool StatesAre(size_t num, ... /*GestureState* states*/);
- MockGestureEventHelper helper_;
-
- private:
- FakeGestures* DoTouchWithDelay(
- EventType type,
- int x,
- int y,
- int touch_id,
- int delay);
-
- scoped_ptr<TestGestureSequence> gesture_sequence_;
- scoped_ptr<std::vector<GestureState> > states_;
- base::TimeDelta last_event_time_;
- MessageLoopForUI message_loop_;
- DISALLOW_COPY_AND_ASSIGN(GestureSequenceTestBase);
-};
-
-} // namespace test
-} // namespace ui
-
-#endif // UI_BASE_GESTURES_GESTURE_SEQUENCE_TEST_BASE_H_
diff --git a/ui/base/gestures/gesture_sequence_unittest.cc b/ui/base/gestures/gesture_sequence_unittest.cc
deleted file mode 100644
index f5851b6..0000000
--- a/ui/base/gestures/gesture_sequence_unittest.cc
+++ /dev/null
@@ -1,624 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/basictypes.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/base/gestures/gesture_configuration.h"
-#include "ui/base/gestures/gesture_sequence.h"
-#include "ui/base/gestures/gesture_sequence_test_base.h"
-#include "ui/base/gestures/gesture_types.h"
-
-namespace ui {
-namespace test {
-
-namespace {
-const int kTouchId1 = 2;
-const int kTouchId2 = 5;
-const int kTouchId3 = 3;
-} // namespace
-
-typedef GestureSequenceTestBase GestureSequenceTest;
-typedef scoped_ptr<FakeGestures> Gestures;
-
-TEST_F(GestureSequenceTest, TapDown) {
- Gestures gestures(Press(0, 0, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1, ET_GESTURE_TAP_DOWN));
- EXPECT_TRUE(StatesAre(2,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK));
-}
-
-TEST_F(GestureSequenceTest, Tap) {
- Press(0, 0, kTouchId1);
-
- Gestures gestures(Release(0, 0, kTouchId1, 50));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1, ET_GESTURE_TAP));
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, TapCancel) {
- Press(0, 0, kTouchId1);
- Gestures gestures(Cancel(0, 0, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 0));
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, NonRailScroll) {
- Press(0, 0, kTouchId1);
- Gestures gestures(Move(50, 51, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_BEGIN,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(50, (*gestures)[1]->param_first());
- EXPECT_EQ(51, (*gestures)[1]->param_second());
-
- gestures.reset(Move(150, 150, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(100, (*gestures)[0]->param_first());
- EXPECT_EQ(99, (*gestures)[0]->param_second());
-
- gestures.reset(Release(0, 0, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_END));
-
- EXPECT_TRUE(StatesAre(4,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-// Check that horizontal touch moves cause scrolls on horizontal rails.
-// Also tests that horizontal rails can be broken.
-TEST_F(GestureSequenceTest, HorizontalRailScroll) {
- Press(0, 0, kTouchId1);
- Gestures gestures(Move(20, 1, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_BEGIN,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(20, (*gestures)[1]->param_first());
- // We should be on a horizontal rail.
- EXPECT_EQ(0, (*gestures)[1]->param_second());
-
- // Break the rail.
- for (int i = 0; i < GestureConfiguration::points_buffered_for_velocity(); ++i)
- Move(1, i * 100, kTouchId1, 50);
-
- Move(0, 0, kTouchId1);
- gestures.reset(Move(20, 1, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(20, (*gestures)[0]->param_first());
- // We shouldn't be on a horizontal rail.
- EXPECT_EQ(1, (*gestures)[0]->param_second());
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL));
-}
-
-// Check that vertical touch moves cause scrolls on vertical rails.
-// Also tests that vertical rails can be broken.
-TEST_F(GestureSequenceTest, VerticalRailScroll) {
- Press(0, 0, kTouchId1);
- Gestures gestures(Move(1, 20, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_BEGIN,
- ET_GESTURE_SCROLL_UPDATE));
-
- // We should be on a vertical rail.
- EXPECT_EQ(0, (*gestures)[1]->param_first());
- EXPECT_EQ(20, (*gestures)[1]->param_second());
-
- // Break the rail.
- for (int i = 0; i < GestureConfiguration::points_buffered_for_velocity(); ++i)
- Move(i * 100, 1, kTouchId1, 50);
-
- Move(0, 0, kTouchId1);
- gestures.reset(Move(1, 20, kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- // We shouldn't be on a vertical rail.
- EXPECT_EQ(1, (*gestures)[0]->param_first());
- EXPECT_EQ(20, (*gestures)[0]->param_second());
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL));
-}
-
-// Check Scroll End Events report correct velocities if the user was
-// on a horizontal rail.
-TEST_F(GestureSequenceTest, HorizontalRailFling) {
- Press(0, 0, kTouchId1);
-
- // Get a high x velocity, while still staying on a horizontal rail.
- for (int i = 0; i < GestureConfiguration::points_buffered_for_velocity(); ++i)
- Move(i * 100, 1, kTouchId1, 1);
-
- Gestures gestures(Release(
- GestureConfiguration::points_buffered_for_velocity() * 100,
- GestureConfiguration::points_buffered_for_velocity(),
- kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_END,
- ET_SCROLL_FLING_START));
-
- // We should be on a horizontal rail.
- EXPECT_EQ(100000, (*gestures)[0]->param_first());
- EXPECT_EQ(0, (*gestures)[0]->param_second());
-
- EXPECT_TRUE(StatesAre(4,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-// Check Scroll End Events report correct velocities if the user was
-// on a vertical rail.
-TEST_F(GestureSequenceTest, VerticalRailFling) {
- Press(0, 0, kTouchId1);
-
- // Get a high y velocity, while still staying on a vertical rail.
- for (int i = 0; i < GestureConfiguration::points_buffered_for_velocity(); ++i)
- Move(1, i * 100, kTouchId1, 1);
-
- Gestures gestures(Release(
- GestureConfiguration::points_buffered_for_velocity(),
- GestureConfiguration::points_buffered_for_velocity() * 100,
- kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_END,
- ET_SCROLL_FLING_START));
-
- // We should be on a vertical rail.
- EXPECT_EQ(0, (*gestures)[0]->param_first());
- EXPECT_EQ(100000, (*gestures)[0]->param_second());
-
- EXPECT_TRUE(StatesAre(4,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-// Check Scroll End Events report correct velocities if the user was
-// not on a rail.
-TEST_F(GestureSequenceTest, NonRailFling) {
- Press(0, 0, kTouchId1);
- // Start a non rail scroll.
- Move(20, 20, kTouchId1);
-
- // Get a high velocity.
- for (int i = 0; i < GestureConfiguration::points_buffered_for_velocity(); ++i)
- Move(i * 10, i * 100, kTouchId1, 1);
-
- Gestures gestures(Release(
- GestureConfiguration::points_buffered_for_velocity() * 10,
- GestureConfiguration::points_buffered_for_velocity() * 100,
- kTouchId1));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_END,
- ET_SCROLL_FLING_START));
-
- EXPECT_EQ(10000, (*gestures)[0]->param_first());
- EXPECT_EQ(100000, (*gestures)[0]->param_second());
-
- EXPECT_TRUE(StatesAre(4,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, TapFollowedByScroll) {
- Press(101, 201, kTouchId1);
- Gestures gestures(Release(101, 201, kTouchId1, 50));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_TAP));
-
- // Make sure it isn't counted as a double tap, with a big delay.
- gestures.reset(Press(101, 201, kTouchId1, 1000));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_TAP_DOWN));
-
- gestures.reset(Move(130, 230, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_SCROLL_BEGIN,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(29, (*gestures)[1]->param_first());
- EXPECT_EQ(29, (*gestures)[1]->param_second());
-
- gestures.reset(Move(110, 211, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(-20, (*gestures)[0]->param_first());
- EXPECT_EQ(-19, (*gestures)[0]->param_second());
-
- gestures.reset(Move(140, 215, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_EQ(30, (*gestures)[0]->param_first());
- EXPECT_EQ(4, (*gestures)[0]->param_second());
-
- gestures.reset(Release(101, 201, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_END));
-
- EXPECT_TRUE(StatesAre(6,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, Pinch) {
- Press(101, 201, kTouchId1);
- Gestures gestures(Press(10, 10, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 3,
- ET_GESTURE_TAP_DOWN,
- ET_GESTURE_PINCH_BEGIN,
- ET_GESTURE_SCROLL_BEGIN));
-
- gestures.reset(Release(101, 201, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_END));
-
- gestures.reset(Release(10, 10, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_END));
-
- EXPECT_TRUE(StatesAre(5,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_PINCH,
- GS_SCROLL,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, PinchFromScroll) {
- Press(101, 201, kTouchId1);
- Move(130, 201, kTouchId1);
- // Press finger 2
- Gestures gestures(Press(10, 10, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_TAP_DOWN,
- ET_GESTURE_PINCH_BEGIN));
- // Move finger 1 away from finger 2.
- gestures.reset(Move(400, 400, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- // We should have zoomed in.
- EXPECT_LT(2, (*gestures)[0]->param_first());
- EXPECT_GT(3, (*gestures)[0]->param_first());
- // Move finger 2 towards finger 1.
- gestures.reset(Move(300, 300, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- // We should have zoomed out.
- EXPECT_LT(0.2, (*gestures)[0]->param_first());
- EXPECT_GT(0.5, (*gestures)[0]->param_first());
- // Release with finger 1
- gestures.reset(Release(101, 201, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_END));
-
- // Should still be able to scroll with one finger.
- gestures.reset(Move(25, 10, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_TRUE(StatesAre(5,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL,
- GS_PINCH,
- GS_SCROLL));
-}
-
-TEST_F(GestureSequenceTest, PinchFromScrollFromPinch) {
- Press(101, 201, kTouchId1);
- Press(10, 10, kTouchId2);
- // Pinch.
- Gestures gestures(Move(130, 230, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- // Release finger 1.
- gestures.reset(Release(101, 201, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_END));
-
- // Press finger one again.
- Press(101, 201, kTouchId1);
- // Pinch.
- gestures.reset(Move(130, 230, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- EXPECT_TRUE(StatesAre(5,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_PINCH,
- GS_SCROLL,
- GS_PINCH));
-}
-
-TEST_F(GestureSequenceTest, PinchFromTap) {
- Press(101, 201, kTouchId1);
- Press(10, 10, kTouchId2);
-
- // Move finger 1 away from finger 2.
- Gestures gestures(Move(400, 400, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- // We should have zoomed in.
- EXPECT_LT(2, (*gestures)[0]->param_first());
- EXPECT_GT(3, (*gestures)[0]->param_first());
- // Move finger 2 towards finger 1.
- gestures.reset(Move(300, 300, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_UPDATE));
-
- // We should have zoomed out.
- EXPECT_LT(0.2, (*gestures)[0]->param_first());
- EXPECT_GT(0.5, (*gestures)[0]->param_first());
- // Release with finger 1
- gestures.reset(Release(101, 201, kTouchId1));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_PINCH_END));
-
- // Should still be able to scroll with one finger.
- gestures.reset(Move(25, 10, kTouchId2));
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_SCROLL_UPDATE));
-
- EXPECT_TRUE(StatesAre(4,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_PINCH,
- GS_SCROLL));
-}
-
-TEST_F(GestureSequenceTest, PinchScroll) {
- Press(0, 0, kTouchId1);
- Press(100, 0, kTouchId2);
-
- // Pinch scroll events only occur once the total movement of the
- // users fingers exceed
- // GestureConfiguration::minimum_distance_for_pinch_scroll_in_pixels().
-
- // This will generate a series of events, all of which should be
- // scroll updates, but there will be some touch moves which don't
- // generate any events at all.
- Gestures gestures(new FakeGestures());
- for (int i = 0;
- i < GestureConfiguration::points_buffered_for_velocity();
- ++i) {
- FakeGestures* a = Move(0, 10 * i, kTouchId1);
- FakeGestures* b = Move(100, 10 * i, kTouchId2);
- gestures->insert(gestures->end(), a->begin(), a->end());
- gestures->insert(gestures->end(), b->begin(), b->end());
- }
-
- // All events were scroll updates.
- for (size_t i = 0; i < gestures->size(); i++)
- EXPECT_EQ((*gestures)[i]->type(), ET_GESTURE_SCROLL_UPDATE);
-
- // More than 1 scroll update event occurred.
- EXPECT_LT(1U, gestures->size());
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_PINCH));
-}
-
-TEST_F(GestureSequenceTest, IgnoreDisconnectedEvents) {
- Gestures gestures(Release(0, 0, kTouchId1));
- EXPECT_EQ(NULL, gestures.get());
-
- gestures.reset(Move(10, 10, kTouchId1));
- EXPECT_EQ(NULL, gestures.get());
-
- EXPECT_TRUE(StatesAre(1, GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, LongPress) {
- Press(0, 0, kTouchId1);
-
- EXPECT_FALSE(helper_.long_press_fired());
- gesture_sequence()->ForceTimeout();
- EXPECT_TRUE(helper_.long_press_fired());
-
- Release(0, 0, kTouchId1);
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, LongPressCancelledByScroll) {
- Press(0, 0, kTouchId1);
- Move(10, 10, kTouchId1);
-
- gesture_sequence()->ForceTimeout();
- EXPECT_FALSE(helper_.long_press_fired());
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_SCROLL));
-}
-
-TEST_F(GestureSequenceTest, LongPressCancelledByPinch) {
- Press(0, 0, kTouchId1);
- Press(10, 10, kTouchId2);
-
- gesture_sequence()->ForceTimeout();
- EXPECT_FALSE(helper_.long_press_fired());
-
- EXPECT_TRUE(StatesAre(3,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_PINCH));
-}
-
-TEST_F(GestureSequenceTest, DoubleTap) {
- Press(0, 0, kTouchId1);
- Release(0, 0, kTouchId1, 50);
- Press(0, 0, kTouchId1);
-
- Gestures gestures(Release(0, 0, kTouchId1, 50));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 2,
- ET_GESTURE_TAP,
- ET_GESTURE_DOUBLE_TAP));
-
- EXPECT_TRUE(StatesAre(5,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE));
-}
-
-TEST_F(GestureSequenceTest, OnlyDoubleTapIfClose) {
- Press(0, 0, kTouchId1);
- Release(0, 0, kTouchId1, 50);
- Press(0, 100, kTouchId1);
-
- Gestures gestures(Release(0, 100, kTouchId1, 50));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_TAP));
-
- EXPECT_TRUE(StatesAre(5,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE,
- GS_PENDING_SYNTHETIC_CLICK,
- GS_NO_GESTURE));
-}
-
-// Three Fingered Swipes always report a downward swipe on Win. crbug.com/124410
-#if defined(OS_WIN)
-#define MAYBE_ThreeFingeredSwipeRight DISABLED_ThreeFingeredSwipeRight
-#define MAYBE_ThreeFingeredSwipeLeft DISABLED_ThreeFingeredSwipeLeft
-#define MAYBE_ThreeFingeredSwipeUp DISABLED_ThreeFingeredSwipeUp
-#define MAYBE_ThreeFingeredSwipeDown DISABLED_ThreeFingeredSwipeDown
-#define MAYBE_ThreeFingeredSwipeDiagonal DISABLED_ThreeFingeredSwipeDiagonal
-#define MAYBE_ThreeFingeredSwipeSpread DISABLED_ThreeFingeredSwipeSpread
-#else
-#define MAYBE_ThreeFingeredSwipeRight ThreeFingeredSwipeRight
-#define MAYBE_ThreeFingeredSwipeLeft ThreeFingeredSwipeLeft
-#define MAYBE_ThreeFingeredSwipeUp ThreeFingeredSwipeUp
-#define MAYBE_ThreeFingeredSwipeDown ThreeFingeredSwipeDown
-#define MAYBE_ThreeFingeredSwipeDiagonal ThreeFingeredSwipeDiagonal
-#define MAYBE_ThreeFingeredSwipeSpread ThreeFingeredSwipeSpread
-#endif
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeRight) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, 10, 0,
- kTouchId2, 10, 0,
- kTouchId3, 10, 0));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_THREE_FINGER_SWIPE));
-
- EXPECT_EQ(1, (*gestures)[0]->param_first());
- EXPECT_EQ(0, (*gestures)[0]->param_second());
-}
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeLeft) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, -10, 0,
- kTouchId2, -10, 0,
- kTouchId3, -10, 0));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_THREE_FINGER_SWIPE));
- EXPECT_EQ(-1, (*gestures)[0]->param_first());
- EXPECT_EQ(0, (*gestures)[0]->param_second());
-}
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeUp) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, 0, 10,
- kTouchId2, 0, 10,
- kTouchId3, 0, 10));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_THREE_FINGER_SWIPE));
- EXPECT_EQ(0, (*gestures)[0]->param_first());
- EXPECT_EQ(1, (*gestures)[0]->param_second());
-}
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeDown) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, 0, -10,
- kTouchId2, 0, -10,
- kTouchId3, 0, -10));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 1,
- ET_GESTURE_THREE_FINGER_SWIPE));
- EXPECT_EQ(0, (*gestures)[0]->param_first());
- EXPECT_EQ(-1, (*gestures)[0]->param_second());
-}
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeDiagonal) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, 10, 10,
- kTouchId2, 10, 10,
- kTouchId3, 10, 10));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 0));
-}
-
-TEST_F(GestureSequenceTest, MAYBE_ThreeFingeredSwipeSpread) {
- Gestures gestures(ThreeFingeredSwipe(kTouchId1, 10, 0,
- kTouchId2, 10, 0,
- kTouchId3, -10, 0));
-
- EXPECT_TRUE(EventTypesAre(gestures.get(), 0));
-}
-
-} // namespace test
-} // namespace ui
diff --git a/ui/base/test/test_gesture_sequence.cc b/ui/base/test/test_gesture_sequence.cc
deleted file mode 100644
index 74e77e0..0000000
--- a/ui/base/test/test_gesture_sequence.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/base/test/test_gesture_sequence.h"
-
-namespace ui {
-class RootWindow;
-namespace test {
-
-TestGestureSequence::TestGestureSequence(GestureEventHelper* consumer)
- : GestureSequence(consumer) {
-}
-
-void TestGestureSequence::ForceTimeout() {
- static_cast<TestOneShotGestureSequenceTimer*>(
- long_press_timer())->ForceTimeout();
-}
-
-base::OneShotTimer<GestureSequence>*
- TestGestureSequence::CreateTimer() {
- return new TestOneShotGestureSequenceTimer();
-}
-
-} // namespace test
-} // namespace ui
diff --git a/ui/base/test/test_gesture_sequence.h b/ui/base/test/test_gesture_sequence.h
deleted file mode 100644
index c5df861..0000000
--- a/ui/base/test/test_gesture_sequence.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_BASE_TEST_TEST_GESTURE_SEQUENCE_H_
-#define UI_BASE_TEST_TEST_GESTURE_SEQUENCE_H_
-#pragma once
-
-#include "ui/base/gestures/gesture_sequence.h"
-
-namespace ui {
-class RootWindow;
-namespace test {
-
-class TestGestureSequence : public ui::GestureSequence {
- public:
- explicit TestGestureSequence(ui::GestureEventHelper* consumer);
-
- // Make the timer fire.
- void ForceTimeout();
- ui::GestureState state() const { return state_; }
- virtual base::OneShotTimer<GestureSequence>* CreateTimer() OVERRIDE;
-
- private:
- class TestOneShotGestureSequenceTimer
- : public base::OneShotTimer<ui::GestureSequence> {
- public:
- TestOneShotGestureSequenceTimer() {
- }
-
- void ForceTimeout() {
- if (IsRunning()) {
- user_task().Run();
- Stop();
- }
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestOneShotGestureSequenceTimer);
- };
-
- DISALLOW_COPY_AND_ASSIGN(TestGestureSequence);
-};
-
-} // namespace test
-} // namespace ui
-
-#endif // UI_BASE_TEST_TEST_GESTURE_SEQUENCE_H_