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

Side by Side Diff: ui/aura/gestures/eager_gesture_recognition_aura_unittest.cc

Issue 101933004: Eager Gesture Recognizer (WIP) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Starting work on Android. Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/aura/aura.gyp ('k') | ui/aura/gestures/gesture_recognizer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/message_loop/message_loop.h"
6 #include "base/run_loop.h"
7 #include "testing/gmock/include/gmock/gmock.h"
8 #include "testing/gtest/include/gtest/gtest-spi.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/aura/env.h"
11 #include "ui/events/event.h"
12 #include "ui/events/gestures/gesture_configuration.h"
13 #include "ui/events/gestures/gesture_sequence.h"
14 #include "ui/events/gestures/test/eager_gesture_recognition_test_base.h"
15 #include "ui/events/gestures/touch_point_state.h"
16
17 using testing::ElementsAre;
18
19 namespace aura {
20 namespace test {
21
22 namespace {
23
24 typedef ui::GestureRecognizer::Gestures Gestures;
25
26 } // namespace
27
28 class EagerGestureRecognitionAuraTest :
29 public ui::test::EagerGestureRecognitionTestBase,
30 public ui::GestureEventQueueDelegate {
31 public:
32 EagerGestureRecognitionAuraTest()
33 : wait_until_event_(ui::ET_UNKNOWN) {
34 }
35
36 virtual void SetUp() OVERRIDE {
37 testing::Test::SetUp();
38 Env::CreateInstance();
39 // TODO - this should probably be refactored out of aura_test_base.cc and
40 // here.
41 ui::GestureConfiguration::set_long_press_time_in_seconds(0.01);
42 ui::GestureConfiguration::set_show_press_delay_in_ms(5);
43 geq_.reset(new ui::GestureEventQueue(this));
44 gesture_sequence_.reset(new ui::GestureSequence(geq_.get()));
45 }
46
47 virtual void TearDown() OVERRIDE {
48 RunAllPendingInMessageLoop();
49 Env::DeleteInstance();
50 testing::Test::TearDown();
51 }
52
53 void SendTouch(const ui::TouchEvent& event) {
54 geq_->OnTouchEvent(event);
55 scoped_ptr<Gestures> gestures;
56 gestures.reset(gesture_sequence_->ProcessTouchEventForGesture(event));
57 for (Gestures::iterator it = gestures->begin();
58 it != gestures->end();
59 ++it) {
60 geq_->QueueGestureEvent(*it, ui::TouchPointState::WAIT_FOR_ACK);
61 }
62 // Ownership has been transferred to the geq.
63 gestures->weak_clear();
64 }
65
66 void SendAck(const ui::TouchEvent& event,
67 ui::EventResult result) {
68 geq_->OnTouchEventAck(event, result);
69 }
70
71 void FakeTimerFiring() {
72 geq_->TimerFired();
73 }
74
75 virtual void DispatchGestureEvent(ui::GestureEvent* event) OVERRIDE {
76 dispatched_events_.push_back(event->type());
77 if (wait_until_event_ == event->type() && run_loop_) {
78 run_loop_->Quit();
79 wait_until_event_ = ui::ET_UNKNOWN;
80 }
81 }
82
83 std::vector<ui::EventType> GetAndResetDispatchedEvents() {
84 std::vector<ui::EventType> tmp;
85 dispatched_events_.swap(tmp);
86 return tmp;
87 }
88
89 void RunAllPendingInMessageLoop() {
90 ui_message_loop_.RunUntilIdle();
91 }
92
93 void WaitUntilReceivedGesture(ui::EventType type) {
94 wait_until_event_ = type;
95 run_loop_.reset(new base::RunLoop(
96 Env::GetInstance()->GetDispatcher()));
97 run_loop_->Run();
98 }
99
100 private:
101 scoped_ptr<ui::GestureSequence> gesture_sequence_;
102 scoped_ptr<ui::GestureEventQueue> geq_;
103 std::vector<ui::EventType> dispatched_events_;
104
105 base::MessageLoopForUI ui_message_loop_;
106
107 scoped_ptr<base::RunLoop> run_loop_;
108 ui::EventType wait_until_event_;
109 };
110
111 TEST_F(EagerGestureRecognitionAuraTest, BasicPress) {
112 SendTouch(Press(0));
113 SendAck(Press(0), ui::ER_UNHANDLED);
114 EXPECT_THAT(GetAndResetDispatchedEvents(),
115 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
116 }
117
118 TEST_F(EagerGestureRecognitionAuraTest, BasicTap) {
119 SendTouch(Press(0));
120 SendAck(Press(0), ui::ER_UNHANDLED);
121 EXPECT_THAT(GetAndResetDispatchedEvents(),
122 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
123
124 SendTouch(Release(0));
125 EXPECT_THAT(GetAndResetDispatchedEvents(),
126 ElementsAre());
127 SendAck(Release(0), ui::ER_UNHANDLED);
128 EXPECT_THAT(GetAndResetDispatchedEvents(),
129 ElementsAre(ui::ET_GESTURE_TAP, ui::ET_GESTURE_END));
130 }
131
132 TEST_F(EagerGestureRecognitionAuraTest, DISABLED_ConsumedRelease) {
133 SendTouch(Press(0));
134 SendAck(Press(0), ui::ER_UNHANDLED);
135 EXPECT_THAT(GetAndResetDispatchedEvents(),
136 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
137
138 SendTouch(Release(0));
139 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
140 SendAck(Release(0), ui::ER_CONSUMED);
141 EXPECT_THAT(GetAndResetDispatchedEvents(),
142 ElementsAre(ui::ET_GESTURE_TAP_CANCEL, ui::ET_GESTURE_END));
143 }
144
145 TEST_F(EagerGestureRecognitionAuraTest, TwoFingerTap) {
146 SendTouch(Press(0));
147 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
148 SendAck(Press(0), ui::ER_UNHANDLED);
149 EXPECT_THAT(GetAndResetDispatchedEvents(),
150 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
151
152 SendTouch(Press(1));
153 EXPECT_THAT(GetAndResetDispatchedEvents(),
154 ElementsAre());
155
156 SendAck(Press(1), ui::ER_UNHANDLED);
157 EXPECT_THAT(GetAndResetDispatchedEvents(),
158 ElementsAre(ui::ET_GESTURE_TAP_CANCEL, ui::ET_GESTURE_BEGIN));
159
160 SendTouch(Release(1));
161 SendAck(Release(1), ui::ER_UNHANDLED);
162 EXPECT_THAT(GetAndResetDispatchedEvents(),
163 ElementsAre(ui::ET_GESTURE_TWO_FINGER_TAP, ui::ET_GESTURE_END));
164 }
165
166 TEST_F(EagerGestureRecognitionAuraTest, TwoFingerConsumed) {
167 SendTouch(Press(0));
168 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
169 SendAck(Press(0), ui::ER_UNHANDLED);
170 EXPECT_THAT(GetAndResetDispatchedEvents(),
171 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
172
173 SendTouch(Press(1));
174 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
175 SendAck(Press(1), ui::ER_CONSUMED);
176 EXPECT_THAT(GetAndResetDispatchedEvents(),
177 ElementsAre());
178
179 SendTouch(Release(1));
180 SendAck(Release(1), ui::ER_UNHANDLED);
181 EXPECT_THAT(GetAndResetDispatchedEvents(),
182 ElementsAre());
183
184 SendTouch(Press(1));
185 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
186 SendAck(Press(1), ui::ER_UNHANDLED);
187 EXPECT_THAT(GetAndResetDispatchedEvents(),
188 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_PINCH_BEGIN));
189
190 SendTouch(Release(1));
191 SendAck(Release(1), ui::ER_UNHANDLED);
192 EXPECT_THAT(GetAndResetDispatchedEvents(),
193 ElementsAre(ui::ET_GESTURE_PINCH_END, ui::ET_GESTURE_END));
194 }
195
196
197 TEST_F(EagerGestureRecognitionAuraTest, SimpleScroll) {
198 SendTouch(Press(0));
199 SendAck(Press(0), ui::ER_UNHANDLED);
200 EXPECT_THAT(GetAndResetDispatchedEvents(),
201 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
202 SendTouch(Move(0));
203 SendAck(Move(0), ui::ER_UNHANDLED);
204 EXPECT_THAT(GetAndResetDispatchedEvents(),
205 ElementsAre(ui::ET_GESTURE_TAP_CANCEL,
206 ui::ET_GESTURE_SCROLL_BEGIN,
207 ui::ET_GESTURE_SCROLL_UPDATE));
208 }
209
210 // Ensures that if a one finger scroll has a move consumed, you can't transition
211 // into a pinch.
212 TEST_F(EagerGestureRecognitionAuraTest, ConsumedScrollToPinch) {
213 SendTouch(Press(0));
214 SendAck(Press(0), ui::ER_UNHANDLED);
215 EXPECT_THAT(GetAndResetDispatchedEvents(),
216 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
217
218 SendTouch(Move(0));
219 SendAck(Move(0), ui::ER_CONSUMED);
220 EXPECT_THAT(GetAndResetDispatchedEvents(),
221 ElementsAre(ui::ET_GESTURE_TAP_CANCEL));
222
223 SendTouch(Press(1));
224 SendAck(Press(1), ui::ER_UNHANDLED);
225 EXPECT_THAT(GetAndResetDispatchedEvents(),
226 ElementsAre(ui::ET_GESTURE_BEGIN));
227 }
228
229 TEST_F(EagerGestureRecognitionAuraTest, SuccessfulLongPress) {
230 SendTouch(Press(0));
231 SendAck(Press(0), ui::ER_UNHANDLED);
232
233 EXPECT_THAT(GetAndResetDispatchedEvents(),
234 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
235 WaitUntilReceivedGesture(ui::ET_GESTURE_SHOW_PRESS);
236 EXPECT_THAT(GetAndResetDispatchedEvents(),
237 ElementsAre(ui::ET_GESTURE_SHOW_PRESS));
238 WaitUntilReceivedGesture(ui::ET_GESTURE_LONG_PRESS);
239 EXPECT_THAT(GetAndResetDispatchedEvents(),
240 ElementsAre(ui::ET_GESTURE_LONG_PRESS));
241 }
242
243 TEST_F(EagerGestureRecognitionAuraTest, TimedOutLongPress) {
244 SendTouch(Press(0));
245 SendAck(Press(0), ui::ER_UNHANDLED);
246
247 EXPECT_THAT(GetAndResetDispatchedEvents(),
248 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
249 FakeTimerFiring();
250 EXPECT_THAT(GetAndResetDispatchedEvents(),
251 ElementsAre(ui::ET_GESTURE_SHOW_PRESS));
252
253 SendTouch(Release(0));
254 SendAck(Release(0), ui::ER_UNHANDLED);
255 EXPECT_THAT(GetAndResetDispatchedEvents(),
256 ElementsAre(ui::ET_GESTURE_TAP, ui::ET_GESTURE_END));
257
258 SendTouch(Press(0));
259 SendAck(Press(0), ui::ER_UNHANDLED);
260 EXPECT_THAT(GetAndResetDispatchedEvents(),
261 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
262 }
263
264 TEST_F(EagerGestureRecognitionAuraTest, ConsumedLongPress) {
265 SendTouch(Press(0));
266 FakeTimerFiring();
267 FakeTimerFiring();
268 SendAck(Press(0), ui::ER_CONSUMED);
269 SendTouch(Release(0));
270 SendAck(Release(0), ui::ER_UNHANDLED);
271
272 EXPECT_THAT(GetAndResetDispatchedEvents(), ElementsAre());
273
274 SendTouch(Press(0));
275 SendAck(Press(0), ui::ER_UNHANDLED);
276
277 EXPECT_THAT(GetAndResetDispatchedEvents(),
278 ElementsAre(ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN));
279 }
280
281 } // namespace test
282 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/aura.gyp ('k') | ui/aura/gestures/gesture_recognizer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698