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

Unified Diff: ui/events/gestures/gesture_provider_aura_unittest.cc

Issue 393953012: Eager Gesture Recognition on Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 5 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
Index: ui/events/gestures/gesture_provider_aura_unittest.cc
diff --git a/ui/events/gestures/gesture_provider_aura_unittest.cc b/ui/events/gestures/gesture_provider_aura_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..58de7bba3a5b6f30e6d6a092615f92c0a574fd0d
--- /dev/null
+++ b/ui/events/gestures/gesture_provider_aura_unittest.cc
@@ -0,0 +1,178 @@
+// Copyright 2014 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/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event_utils.h"
+#include "ui/events/gestures/gesture_provider_aura.h"
+
+namespace ui {
+
+class GestureProviderAuraTest : public testing::Test,
+ public GestureProviderAuraClient {
+ public:
+ GestureProviderAuraTest() {}
+
+ virtual ~GestureProviderAuraTest() {}
+
+ virtual void OnGestureEvent(GestureEvent* event) OVERRIDE {}
+
+ virtual void SetUp() OVERRIDE {
+ provider_.reset(new GestureProviderAura(this));
+ }
+
+ virtual void TearDown() OVERRIDE { provider_.reset(); }
+
+ GestureProviderAura* provider() { return provider_.get(); }
+
+ private:
+ scoped_ptr<GestureProviderAura> provider_;
+ base::MessageLoopForUI message_loop_;
+};
+
+TEST_F(GestureProviderAuraTest, IgnoresExtraPressEvents) {
+ base::TimeDelta time = ui::EventTimeForNow();
+ TouchEvent press1(ET_TOUCH_PRESSED, gfx::PointF(10, 10), 0, time);
+ EXPECT_TRUE(provider()->OnTouchEvent(press1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent press2(ET_TOUCH_PRESSED, gfx::PointF(30, 40), 0, time);
+ // Redundant press with same id is ignored.
+ EXPECT_FALSE(provider()->OnTouchEvent(press2));
+}
+
+TEST_F(GestureProviderAuraTest, IgnoresExtraMoveOrReleaseEvents) {
+ base::TimeDelta time = ui::EventTimeForNow();
+ TouchEvent press1(ET_TOUCH_PRESSED, gfx::PointF(10, 10), 0, time);
+ EXPECT_TRUE(provider()->OnTouchEvent(press1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent release1(ET_TOUCH_RELEASED, gfx::PointF(30, 40), 0, time);
+ EXPECT_TRUE(provider()->OnTouchEvent(release1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent release2(ET_TOUCH_RELEASED, gfx::PointF(30, 45), 0, time);
+ EXPECT_FALSE(provider()->OnTouchEvent(release1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent move1(ET_TOUCH_MOVED, gfx::PointF(70, 75), 0, time);
+ EXPECT_FALSE(provider()->OnTouchEvent(move1));
+}
+
+TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
+ const float kRadiusX = 20;
+ const float kRadiusY = 30;
+ const float kAngle = 120;
+ const float kForce = 40;
+ const int kTouchId0 = 5;
+ const int kTouchId1 = 3;
+
+ base::TimeDelta time = ui::EventTimeForNow();
+ TouchEvent press0_1(ET_TOUCH_PRESSED, gfx::PointF(10, 10), kTouchId0, time);
+ EXPECT_TRUE(provider()->OnTouchEvent(press0_1));
+
+ TouchEvent press1_1(ET_TOUCH_PRESSED, gfx::PointF(40, 40), kTouchId1, time);
+ EXPECT_TRUE(provider()->OnTouchEvent(press1_1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent move0_1(ET_TOUCH_MOVED,
+ gfx::PointF(10, 10),
+ 0,
+ kTouchId0,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce);
+ EXPECT_TRUE(provider()->OnTouchEvent(move0_1));
+
+ TouchEvent move1_1(ET_TOUCH_MOVED,
+ gfx::PointF(100, 200),
+ 0,
+ kTouchId1,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce);
+ EXPECT_TRUE(provider()->OnTouchEvent(move1_1));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent move0_2(ET_TOUCH_MOVED,
+ gfx::PointF(10, 10),
+ 0,
+ kTouchId0,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce);
+ // Nothing has changed, so ignore the move.
+ EXPECT_FALSE(provider()->OnTouchEvent(move0_2));
+
+ TouchEvent move1_2(ET_TOUCH_MOVED,
+ gfx::PointF(100, 200),
+ 0,
+ kTouchId1,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce);
+ // Nothing has changed, so ignore the move.
+ EXPECT_FALSE(provider()->OnTouchEvent(move1_2));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent move0_3(ET_TOUCH_MOVED,
+ gfx::PointF(70, 75.1f),
+ 0,
+ kTouchId0,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce);
+ // Position has changed, so don't ignore the move.
+ EXPECT_TRUE(provider()->OnTouchEvent(move0_3));
+
+ time += base::TimeDelta::FromMilliseconds(10);
+ TouchEvent move0_4(ET_TOUCH_MOVED,
+ gfx::PointF(70, 75.1f),
+ 0,
+ kTouchId0,
+ time,
+ kRadiusX,
+ kRadiusY + 1,
+ kAngle,
+ kForce);
+ // Radius has changed, so don't ignore the move.
+ EXPECT_TRUE(provider()->OnTouchEvent(move0_4));
+
+ TouchEvent move1_3(ET_TOUCH_MOVED,
+ gfx::PointF(100, 200),
+ 0,
+ kTouchId1,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce + 20);
+ // Force has changed, so don't ignore the move.
+ EXPECT_TRUE(provider()->OnTouchEvent(move1_3));
+
+ TouchEvent release1_1(ET_TOUCH_RELEASED,
+ gfx::PointF(100, 200),
+ 0,
+ kTouchId1,
+ time,
+ kRadiusX,
+ kRadiusY,
+ kAngle,
+ kForce + 20);
+ // Don't ignore events other than touchmove.
+ EXPECT_TRUE(provider()->OnTouchEvent(release1_1));
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698