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

Side by Side Diff: ui/events/gesture_detection/gesture_provider_unittest.cc

Issue 227743007: ui::GestureProvider gives GestureEventData the number of touch points. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: No more compiler errors. Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 event = ObtainMotionEvent(event_time + kOneSecond, 167 event = ObtainMotionEvent(event_time + kOneSecond,
168 MotionEvent::ACTION_MOVE, 168 MotionEvent::ACTION_MOVE,
169 scroll_to_x, 169 scroll_to_x,
170 scroll_to_y); 170 scroll_to_y);
171 event.SetId(++motion_event_id); 171 event.SetId(++motion_event_id);
172 172
173 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 173 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
174 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); 174 EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
175 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 175 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
176 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 176 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
177 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
177 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 178 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
178 ASSERT_EQ(4U, GetReceivedGestureCount()) << "Only TapDown, TapCancel, " 179 ASSERT_EQ(4U, GetReceivedGestureCount()) << "Only TapDown, TapCancel, "
179 "ScrollBegin and ScrollBy " 180 "ScrollBegin and ScrollBy "
180 "should have been sent"; 181 "should have been sent";
181 182
182 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(1).type); 183 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(1).type);
183 EXPECT_EQ(motion_event_id, GetReceivedGesture(1).motion_event_id); 184 EXPECT_EQ(motion_event_id, GetReceivedGesture(1).motion_event_id);
184 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type); 185 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type);
185 EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id); 186 EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id);
186 EXPECT_EQ(event_time + kOneSecond, GetReceivedGesture(2).time) 187 EXPECT_EQ(event_time + kOneSecond, GetReceivedGesture(2).time)
187 << "ScrollBegin should have the time of the ACTION_MOVE"; 188 << "ScrollBegin should have the time of the ACTION_MOVE";
188 189
189 event = ObtainMotionEvent( 190 event = ObtainMotionEvent(
190 event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y); 191 event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y);
191 event.SetId(++motion_event_id); 192 event.SetId(++motion_event_id);
192 193
193 gesture_provider_->OnTouchEvent(event); 194 gesture_provider_->OnTouchEvent(event);
194 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); 195 EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
195 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); 196 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
196 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 197 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
197 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 198 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
199 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
198 } 200 }
199 201
200 static void RunTasksAndWait(base::TimeDelta delay) { 202 static void RunTasksAndWait(base::TimeDelta delay) {
201 base::MessageLoop::current()->PostDelayedTask( 203 base::MessageLoop::current()->PostDelayedTask(
202 FROM_HERE, base::MessageLoop::QuitClosure(), delay); 204 FROM_HERE, base::MessageLoop::QuitClosure(), delay);
203 base::MessageLoop::current()->Run(); 205 base::MessageLoop::current()->Run();
204 } 206 }
205 207
206 std::vector<GestureEventData> gestures_; 208 std::vector<GestureEventData> gestures_;
207 scoped_ptr<GestureProvider> gesture_provider_; 209 scoped_ptr<GestureProvider> gesture_provider_;
208 scoped_ptr<GestureEventData> active_scroll_begin_event_; 210 scoped_ptr<GestureEventData> active_scroll_begin_event_;
209 base::MessageLoopForUI message_loop_; 211 base::MessageLoopForUI message_loop_;
210 }; 212 };
211 213
212 // Verify that a DOWN followed shortly by an UP will trigger a single tap. 214 // Verify that a DOWN followed shortly by an UP will trigger a single tap.
213 TEST_F(GestureProviderTest, GestureTapTap) { 215 TEST_F(GestureProviderTest, GestureTapTap) {
214 base::TimeTicks event_time = base::TimeTicks::Now(); 216 base::TimeTicks event_time = base::TimeTicks::Now();
215 int motion_event_id = 0; 217 int motion_event_id = 0;
216 218
217 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); 219 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
218 220
219 MockMotionEvent event = 221 MockMotionEvent event =
220 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 222 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
221 event.SetId(++motion_event_id); 223 event.SetId(++motion_event_id);
222 224
223 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 225 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
224 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 226 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
227 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
225 228
226 event = ObtainMotionEvent(event_time + kOneMicrosecond, 229 event = ObtainMotionEvent(event_time + kOneMicrosecond,
227 MotionEvent::ACTION_UP); 230 MotionEvent::ACTION_UP);
228 event.SetId(++motion_event_id); 231 event.SetId(++motion_event_id);
229 232
230 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 233 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
231 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); 234 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
232 // Ensure tap details have been set. 235 // Ensure tap details have been set.
233 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width()); 236 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
234 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height()); 237 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
235 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); 238 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
236 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 239 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
240 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
237 } 241 }
238 242
239 // Verify that a DOWN followed shortly by an UP will trigger 243 // Verify that a DOWN followed shortly by an UP will trigger
240 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled. 244 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled.
241 TEST_F(GestureProviderTest, GestureTapTapWithDelay) { 245 TEST_F(GestureProviderTest, GestureTapTapWithDelay) {
242 base::TimeTicks event_time = base::TimeTicks::Now(); 246 base::TimeTicks event_time = base::TimeTicks::Now();
243 int motion_event_id = 0; 247 int motion_event_id = 0;
244 248
245 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true); 249 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
246 250
247 MockMotionEvent event = 251 MockMotionEvent event =
248 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 252 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
249 event.SetId(++motion_event_id); 253 event.SetId(++motion_event_id);
250 254
251 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 255 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
252 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 256 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
253 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 257 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
258 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
254 259
255 event = ObtainMotionEvent(event_time + kOneMicrosecond, 260 event = ObtainMotionEvent(event_time + kOneMicrosecond,
256 MotionEvent::ACTION_UP); 261 MotionEvent::ACTION_UP);
257 event.SetId(++motion_event_id); 262 event.SetId(++motion_event_id);
258 263
259 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 264 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
260 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 265 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
261 // Ensure tap details have been set. 266 // Ensure tap details have been set.
262 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width()); 267 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().width());
263 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height()); 268 EXPECT_EQ(10, GetMostRecentGestureEvent().details.bounding_box().height());
264 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); 269 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
265 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 270 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
271 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
266 272
267 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP)); 273 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP));
268 } 274 }
269 275
270 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG). 276 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG).
271 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) { 277 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
272 base::TimeTicks event_time = TimeTicks::Now(); 278 base::TimeTicks event_time = TimeTicks::Now();
273 base::TimeDelta delta_time = kDeltaTimeForFlingSequences; 279 base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
274 int motion_event_id = 0; 280 int motion_event_id = 0;
275 281
276 MockMotionEvent event = 282 MockMotionEvent event =
277 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 283 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
278 event.SetId(++motion_event_id); 284 event.SetId(++motion_event_id);
279 285
280 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 286 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
281 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 287 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
282 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 288 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
289 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
283 290
284 event = ObtainMotionEvent(event_time + delta_time, 291 event = ObtainMotionEvent(event_time + delta_time,
285 MotionEvent::ACTION_MOVE, 292 MotionEvent::ACTION_MOVE,
286 kFakeCoordX * 10, 293 kFakeCoordX * 10,
287 kFakeCoordY * 10); 294 kFakeCoordY * 10);
288 event.SetId(++motion_event_id); 295 event.SetId(++motion_event_id);
289 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 296 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
290 297
291 event = ObtainMotionEvent(event_time + delta_time * 2, 298 event = ObtainMotionEvent(event_time + delta_time * 2,
292 MotionEvent::ACTION_UP, 299 MotionEvent::ACTION_UP,
293 kFakeCoordX * 10, 300 kFakeCoordX * 10,
294 kFakeCoordY * 10); 301 kFakeCoordY * 10);
295 event.SetId(++motion_event_id); 302 event.SetId(++motion_event_id);
296 303
297 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 304 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
298 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); 305 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType());
299 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 306 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
307 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
300 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS)); 308 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS));
301 } 309 }
302 310
303 // Verify that for a normal scroll the following events are sent: 311 // Verify that for a normal scroll the following events are sent:
304 // - ET_GESTURE_SCROLL_BEGIN 312 // - ET_GESTURE_SCROLL_BEGIN
305 // - ET_GESTURE_SCROLL_UPDATE 313 // - ET_GESTURE_SCROLL_UPDATE
306 // - ET_GESTURE_SCROLL_END 314 // - ET_GESTURE_SCROLL_END
307 TEST_F(GestureProviderTest, ScrollEventActionUpSequence) { 315 TEST_F(GestureProviderTest, ScrollEventActionUpSequence) {
308 CheckScrollEventSequenceForEndActionType(MotionEvent::ACTION_UP); 316 CheckScrollEventSequenceForEndActionType(MotionEvent::ACTION_UP);
309 } 317 }
(...skipping 25 matching lines...) Expand all
335 MotionEvent::ACTION_MOVE, 343 MotionEvent::ACTION_MOVE,
336 kFakeCoordX * 5, 344 kFakeCoordX * 5,
337 kFakeCoordY * 5); 345 kFakeCoordY * 5);
338 event.SetId(++motion_event_id); 346 event.SetId(++motion_event_id);
339 347
340 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 348 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
341 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); 349 EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
342 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 350 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
343 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 351 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
344 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 352 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
353 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
345 ASSERT_EQ(4U, GetReceivedGestureCount()); 354 ASSERT_EQ(4U, GetReceivedGestureCount());
346 ASSERT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type); 355 ASSERT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type);
347 EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id); 356 EXPECT_EQ(motion_event_id, GetReceivedGesture(2).motion_event_id);
348 357
349 // We don't want to take a dependency here on exactly how hints are calculated 358 // We don't want to take a dependency here on exactly how hints are calculated
350 // for a fling (eg. may depend on velocity), so just validate the direction. 359 // for a fling (eg. may depend on velocity), so just validate the direction.
351 int hint_x = GetReceivedGesture(2).details.scroll_x_hint(); 360 int hint_x = GetReceivedGesture(2).details.scroll_x_hint();
352 int hint_y = GetReceivedGesture(2).details.scroll_y_hint(); 361 int hint_y = GetReceivedGesture(2).details.scroll_y_hint();
353 EXPECT_TRUE(hint_x > 0 && hint_y > 0 && hint_x > hint_y) 362 EXPECT_TRUE(hint_x > 0 && hint_y > 0 && hint_x > hint_y)
354 << "ScrollBegin hint should be in positive X axis"; 363 << "ScrollBegin hint should be in positive X axis";
355 364
356 event = ObtainMotionEvent(event_time + delta_time * 2, 365 event = ObtainMotionEvent(event_time + delta_time * 2,
357 MotionEvent::ACTION_UP, 366 MotionEvent::ACTION_UP,
358 kFakeCoordX * 10, 367 kFakeCoordX * 10,
359 kFakeCoordY * 10); 368 kFakeCoordY * 10);
360 event.SetId(++motion_event_id); 369 event.SetId(++motion_event_id);
361 370
362 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 371 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
363 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); 372 EXPECT_FALSE(gesture_provider_->IsScrollInProgress());
364 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); 373 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType());
365 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 374 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
375 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
366 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); 376 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_END));
367 EXPECT_EQ(event_time + delta_time * 2, GetMostRecentGestureEvent().time) 377 EXPECT_EQ(event_time + delta_time * 2, GetMostRecentGestureEvent().time)
368 << "FlingStart should have the time of the ACTION_UP"; 378 << "FlingStart should have the time of the ACTION_UP";
369 } 379 }
370 380
371 TEST_F(GestureProviderTest, TapCancelledWhenWindowFocusLost) { 381 TEST_F(GestureProviderTest, TapCancelledWhenWindowFocusLost) {
372 const base::TimeTicks event_time = TimeTicks::Now(); 382 const base::TimeTicks event_time = TimeTicks::Now();
373 383
374 MockMotionEvent event = 384 MockMotionEvent event =
375 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 385 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
376 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 386 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
377 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 387 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
388 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
378 389
379 RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() + 390 RunTasksAndWait(GetLongPressTimeout() + GetShowPressTimeout() +
380 kOneMicrosecond); 391 kOneMicrosecond);
381 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS)); 392 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SHOW_PRESS));
382 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); 393 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
394 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
383 395
384 // The long press triggers window focus loss by opening a context menu 396 // The long press triggers window focus loss by opening a context menu
385 EXPECT_TRUE(CancelActiveTouchSequence()); 397 EXPECT_TRUE(CancelActiveTouchSequence());
386 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); 398 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType());
399 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
387 } 400 }
388 401
389 TEST_F(GestureProviderTest, TapCancelledWhenScrollBegins) { 402 TEST_F(GestureProviderTest, TapCancelledWhenScrollBegins) {
390 base::TimeTicks event_time = base::TimeTicks::Now(); 403 base::TimeTicks event_time = base::TimeTicks::Now();
391 404
392 MockMotionEvent event = 405 MockMotionEvent event =
393 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 406 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
394 407
395 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 408 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
396 409
397 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 410 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
411 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
398 event = ObtainMotionEvent(event_time + kOneMicrosecond, 412 event = ObtainMotionEvent(event_time + kOneMicrosecond,
399 MotionEvent::ACTION_MOVE, 413 MotionEvent::ACTION_MOVE,
400 kFakeCoordX + 50, 414 kFakeCoordX + 50,
401 kFakeCoordY + 50); 415 kFakeCoordY + 50);
402 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 416 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
403 417
404 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 418 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
419 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
405 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP_CANCEL)); 420 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP_CANCEL));
406 } 421 }
407 422
408 TEST_F(GestureProviderTest, DoubleTap) { 423 TEST_F(GestureProviderTest, DoubleTap) {
409 base::TimeTicks event_time = base::TimeTicks::Now(); 424 base::TimeTicks event_time = base::TimeTicks::Now();
410 425
411 MockMotionEvent event = 426 MockMotionEvent event =
412 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 427 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
413 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 428 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
414 429
415 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 430 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
431 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
416 432
417 event = ObtainMotionEvent(event_time + kOneMicrosecond, 433 event = ObtainMotionEvent(event_time + kOneMicrosecond,
418 MotionEvent::ACTION_UP, 434 MotionEvent::ACTION_UP,
419 kFakeCoordX, 435 kFakeCoordX,
420 kFakeCoordY); 436 kFakeCoordY);
421 gesture_provider_->OnTouchEvent(event); 437 gesture_provider_->OnTouchEvent(event);
422 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 438 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
439 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
423 440
424 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, 441 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
425 MotionEvent::ACTION_DOWN, 442 MotionEvent::ACTION_DOWN,
426 kFakeCoordX, 443 kFakeCoordX,
427 kFakeCoordY); 444 kFakeCoordY);
428 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 445 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
429 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 446 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
447 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
430 448
431 // Moving a very small amount of distance should not trigger the double tap 449 // Moving a very small amount of distance should not trigger the double tap
432 // drag zoom mode. 450 // drag zoom mode.
433 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3, 451 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3,
434 MotionEvent::ACTION_MOVE, 452 MotionEvent::ACTION_MOVE,
435 kFakeCoordX, 453 kFakeCoordX,
436 kFakeCoordY + 1); 454 kFakeCoordY + 1);
437 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 455 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
438 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 456 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
457 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
439 458
440 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3, 459 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3,
441 MotionEvent::ACTION_UP, 460 MotionEvent::ACTION_UP,
442 kFakeCoordX, 461 kFakeCoordX,
443 kFakeCoordY + 1); 462 kFakeCoordY + 1);
444 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 463 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
445 464
446 const GestureEventData& double_tap = GetMostRecentGestureEvent(); 465 const GestureEventData& double_tap = GetMostRecentGestureEvent();
447 EXPECT_EQ(ET_GESTURE_DOUBLE_TAP, double_tap.type); 466 EXPECT_EQ(ET_GESTURE_DOUBLE_TAP, double_tap.type);
448 // Ensure tap details have been set. 467 // Ensure tap details have been set.
449 EXPECT_EQ(10, double_tap.details.bounding_box().width()); 468 EXPECT_EQ(10, double_tap.details.bounding_box().width());
450 EXPECT_EQ(10, double_tap.details.bounding_box().height()); 469 EXPECT_EQ(10, double_tap.details.bounding_box().height());
451 EXPECT_EQ(1, double_tap.details.tap_count()); 470 EXPECT_EQ(1, double_tap.details.tap_count());
452 } 471 }
453 472
454 TEST_F(GestureProviderTest, DoubleTapDragZoomBasic) { 473 TEST_F(GestureProviderTest, DoubleTapDragZoomBasic) {
455 const base::TimeTicks down_time_1 = TimeTicks::Now(); 474 const base::TimeTicks down_time_1 = TimeTicks::Now();
456 const base::TimeTicks down_time_2 = down_time_1 + kOneMicrosecond * 2; 475 const base::TimeTicks down_time_2 = down_time_1 + kOneMicrosecond * 2;
457 476
458 MockMotionEvent event = 477 MockMotionEvent event =
459 ObtainMotionEvent(down_time_1, MotionEvent::ACTION_DOWN); 478 ObtainMotionEvent(down_time_1, MotionEvent::ACTION_DOWN);
460 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 479 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
461 480
462 event = ObtainMotionEvent(down_time_1 + kOneMicrosecond, 481 event = ObtainMotionEvent(down_time_1 + kOneMicrosecond,
463 MotionEvent::ACTION_UP, 482 MotionEvent::ACTION_UP,
464 kFakeCoordX, 483 kFakeCoordX,
465 kFakeCoordY); 484 kFakeCoordY);
466 gesture_provider_->OnTouchEvent(event); 485 gesture_provider_->OnTouchEvent(event);
467 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 486 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
487 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
468 488
469 event = ObtainMotionEvent( 489 event = ObtainMotionEvent(
470 down_time_2, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); 490 down_time_2, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
471 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 491 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
472 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 492 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
493 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
473 494
474 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond, 495 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond,
475 MotionEvent::ACTION_MOVE, 496 MotionEvent::ACTION_MOVE,
476 kFakeCoordX, 497 kFakeCoordX,
477 kFakeCoordY + 100); 498 kFakeCoordY + 100);
478 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 499 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
479 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 500 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
480 ASSERT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType()); 501 ASSERT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
481 502
482 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2, 503 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 2,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 kFakeCoordY - delta_y); 551 kFakeCoordY - delta_y);
531 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 552 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
532 553
533 // Make sure the reported gesture event has all the expected details. 554 // Make sure the reported gesture event has all the expected details.
534 ASSERT_LT(0U, GetReceivedGestureCount()); 555 ASSERT_LT(0U, GetReceivedGestureCount());
535 GestureEventData gesture = GetMostRecentGestureEvent(); 556 GestureEventData gesture = GetMostRecentGestureEvent();
536 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, gesture.type); 557 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, gesture.type);
537 EXPECT_EQ(event_time + kOneMicrosecond * 2, gesture.time); 558 EXPECT_EQ(event_time + kOneMicrosecond * 2, gesture.time);
538 EXPECT_EQ(kFakeCoordX - delta_x, gesture.x); 559 EXPECT_EQ(kFakeCoordX - delta_x, gesture.x);
539 EXPECT_EQ(kFakeCoordY - delta_y, gesture.y); 560 EXPECT_EQ(kFakeCoordY - delta_y, gesture.y);
561 EXPECT_EQ(1, gesture.details.touch_points());
540 562
541 // No horizontal delta because of snapping. 563 // No horizontal delta because of snapping.
542 EXPECT_EQ(0, gesture.details.scroll_x()); 564 EXPECT_EQ(0, gesture.details.scroll_x());
543 EXPECT_EQ(-delta_y / 2, gesture.details.scroll_y()); 565 EXPECT_EQ(-delta_y / 2, gesture.details.scroll_y());
544 } 566 }
545 567
546 // Verify that fractional scroll deltas are rounded as expected and that 568 // Verify that fractional scroll deltas are rounded as expected and that
547 // fractional scrolling doesn't break scroll snapping. 569 // fractional scrolling doesn't break scroll snapping.
548 TEST_F(GestureProviderTest, FractionalScroll) { 570 TEST_F(GestureProviderTest, FractionalScroll) {
549 const float delta_x = 0.4f; 571 const float delta_x = 0.4f;
(...skipping 21 matching lines...) Expand all
571 event = ObtainMotionEvent(event_time + kOneMicrosecond * i, 593 event = ObtainMotionEvent(event_time + kOneMicrosecond * i,
572 MotionEvent::ACTION_MOVE, 594 MotionEvent::ACTION_MOVE,
573 kFakeCoordX + delta_x * i, 595 kFakeCoordX + delta_x * i,
574 kFakeCoordY + delta_y * i); 596 kFakeCoordY + delta_y * i);
575 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 597 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
576 598
577 ASSERT_LT(0U, GetReceivedGestureCount()); 599 ASSERT_LT(0U, GetReceivedGestureCount());
578 GestureEventData gesture = GetMostRecentGestureEvent(); 600 GestureEventData gesture = GetMostRecentGestureEvent();
579 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, gesture.type); 601 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, gesture.type);
580 EXPECT_EQ(event_time + kOneMicrosecond * i, gesture.time); 602 EXPECT_EQ(event_time + kOneMicrosecond * i, gesture.time);
603 EXPECT_EQ(1, gesture.details.touch_points());
581 604
582 // Verify that the event co-ordinates are still the precise values we 605 // Verify that the event co-ordinates are still the precise values we
583 // supplied. 606 // supplied.
584 EXPECT_EQ(kFakeCoordX + delta_x * i, gesture.x); 607 EXPECT_EQ(kFakeCoordX + delta_x * i, gesture.x);
585 EXPECT_EQ(kFakeCoordY + delta_y * i, gesture.y); 608 EXPECT_EQ(kFakeCoordY + delta_y * i, gesture.y);
586 609
587 // Verify that we're scrolling vertically by the expected amount 610 // Verify that we're scrolling vertically by the expected amount
588 // (modulo rounding). 611 // (modulo rounding).
589 EXPECT_GE(gesture.details.scroll_y(), (int)delta_y); 612 EXPECT_GE(gesture.details.scroll_y(), (int)delta_y);
590 EXPECT_LE(gesture.details.scroll_y(), ((int)delta_y) + 1); 613 EXPECT_LE(gesture.details.scroll_y(), ((int)delta_y) + 1);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 683
661 MockMotionEvent event = 684 MockMotionEvent event =
662 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 685 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
663 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 686 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
664 687
665 const base::TimeDelta long_press_timeout = 688 const base::TimeDelta long_press_timeout =
666 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond; 689 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond;
667 RunTasksAndWait(long_press_timeout); 690 RunTasksAndWait(long_press_timeout);
668 691
669 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); 692 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
693 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
670 694
671 event = ObtainMotionEvent(event_time + kOneSecond, MotionEvent::ACTION_UP); 695 event = ObtainMotionEvent(event_time + kOneSecond, MotionEvent::ACTION_UP);
672 gesture_provider_->OnTouchEvent(event); 696 gesture_provider_->OnTouchEvent(event);
673 EXPECT_EQ(ET_GESTURE_LONG_TAP, GetMostRecentGestureEventType()); 697 EXPECT_EQ(ET_GESTURE_LONG_TAP, GetMostRecentGestureEventType());
698 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
674 } 699 }
675 700
676 TEST_F(GestureProviderTest, GestureLongPressDoesNotPreventScrolling) { 701 TEST_F(GestureProviderTest, GestureLongPressDoesNotPreventScrolling) {
677 base::TimeTicks event_time = base::TimeTicks::Now(); 702 base::TimeTicks event_time = base::TimeTicks::Now();
678 703
679 MockMotionEvent event = 704 MockMotionEvent event =
680 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 705 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
681 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 706 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
682 707
683 const base::TimeDelta long_press_timeout = 708 const base::TimeDelta long_press_timeout =
684 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond; 709 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond;
685 RunTasksAndWait(long_press_timeout); 710 RunTasksAndWait(long_press_timeout);
686 711
687 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); 712 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
713 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
688 event = ObtainMotionEvent(event_time + long_press_timeout, 714 event = ObtainMotionEvent(event_time + long_press_timeout,
689 MotionEvent::ACTION_MOVE, 715 MotionEvent::ACTION_MOVE,
690 kFakeCoordX + 100, 716 kFakeCoordX + 100,
691 kFakeCoordY + 100); 717 kFakeCoordY + 100);
692 gesture_provider_->OnTouchEvent(event); 718 gesture_provider_->OnTouchEvent(event);
693 719
694 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 720 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
721 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
695 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 722 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
696 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP_CANCEL)); 723 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP_CANCEL));
697 724
698 event = ObtainMotionEvent(event_time + long_press_timeout, 725 event = ObtainMotionEvent(event_time + long_press_timeout,
699 MotionEvent::ACTION_UP); 726 MotionEvent::ACTION_UP);
700 gesture_provider_->OnTouchEvent(event); 727 gesture_provider_->OnTouchEvent(event);
701 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP)); 728 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP));
702 } 729 }
703 730
704 TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) { 731 TEST_F(GestureProviderTest, NoGestureLongPressDuringDoubleTap) {
705 base::TimeTicks event_time = base::TimeTicks::Now(); 732 base::TimeTicks event_time = base::TimeTicks::Now();
706 int motion_event_id = 0; 733 int motion_event_id = 0;
707 734
708 MockMotionEvent event = ObtainMotionEvent( 735 MockMotionEvent event = ObtainMotionEvent(
709 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); 736 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
710 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 737 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
711 738
712 event = ObtainMotionEvent(event_time + kOneMicrosecond, 739 event = ObtainMotionEvent(event_time + kOneMicrosecond,
713 MotionEvent::ACTION_UP, 740 MotionEvent::ACTION_UP,
714 kFakeCoordX, 741 kFakeCoordX,
715 kFakeCoordY); 742 kFakeCoordY);
716 gesture_provider_->OnTouchEvent(event); 743 gesture_provider_->OnTouchEvent(event);
717 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 744 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
745 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
718 746
719 event = ObtainMotionEvent(event_time + kOneMicrosecond, 747 event = ObtainMotionEvent(event_time + kOneMicrosecond,
720 MotionEvent::ACTION_DOWN, 748 MotionEvent::ACTION_DOWN,
721 kFakeCoordX, 749 kFakeCoordX,
722 kFakeCoordY); 750 kFakeCoordY);
723 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 751 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
724 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 752 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
753 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
725 EXPECT_TRUE(gesture_provider_->IsDoubleTapInProgress()); 754 EXPECT_TRUE(gesture_provider_->IsDoubleTapInProgress());
726 755
727 const base::TimeDelta long_press_timeout = 756 const base::TimeDelta long_press_timeout =
728 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond; 757 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond;
729 RunTasksAndWait(long_press_timeout); 758 RunTasksAndWait(long_press_timeout);
730 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS)); 759 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS));
731 760
732 event = ObtainMotionEvent(event_time + long_press_timeout, 761 event = ObtainMotionEvent(event_time + long_press_timeout,
733 MotionEvent::ACTION_MOVE, 762 MotionEvent::ACTION_MOVE,
734 kFakeCoordX + 20, 763 kFakeCoordX + 20,
735 kFakeCoordY + 20); 764 kFakeCoordY + 20);
736 event.SetId(++motion_event_id); 765 event.SetId(++motion_event_id);
737 766
738 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 767 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
739 EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType()); 768 EXPECT_EQ(ET_GESTURE_PINCH_BEGIN, GetMostRecentGestureEventType());
740 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 769 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
770 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
741 EXPECT_TRUE(gesture_provider_->IsDoubleTapInProgress()); 771 EXPECT_TRUE(gesture_provider_->IsDoubleTapInProgress());
742 772
743 event = ObtainMotionEvent(event_time + long_press_timeout + kOneMicrosecond, 773 event = ObtainMotionEvent(event_time + long_press_timeout + kOneMicrosecond,
744 MotionEvent::ACTION_UP, 774 MotionEvent::ACTION_UP,
745 kFakeCoordX, 775 kFakeCoordX,
746 kFakeCoordY + 1); 776 kFakeCoordY + 1);
747 event.SetId(++motion_event_id); 777 event.SetId(++motion_event_id);
748 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 778 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
749 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 779 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
750 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 780 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
781 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
751 EXPECT_FALSE(gesture_provider_->IsDoubleTapInProgress()); 782 EXPECT_FALSE(gesture_provider_->IsDoubleTapInProgress());
752 } 783 }
753 784
754 // Verify that the touch slop region is removed from the first scroll delta to 785 // Verify that the touch slop region is removed from the first scroll delta to
755 // avoid a jump when starting to scroll. 786 // avoid a jump when starting to scroll.
756 TEST_F(GestureProviderTest, TouchSlopRemovedFromScroll) { 787 TEST_F(GestureProviderTest, TouchSlopRemovedFromScroll) {
757 const int scaled_touch_slop = GetTouchSlop(); 788 const int scaled_touch_slop = GetTouchSlop();
758 const int scroll_delta = 5; 789 const int scroll_delta = 5;
759 790
760 base::TimeTicks event_time = base::TimeTicks::Now(); 791 base::TimeTicks event_time = base::TimeTicks::Now();
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 gesture_provider_->SetMultiTouchSupportEnabled(true); 1032 gesture_provider_->SetMultiTouchSupportEnabled(true);
1002 1033
1003 int secondary_coord_x = kFakeCoordX + 20 * scaled_touch_slop; 1034 int secondary_coord_x = kFakeCoordX + 20 * scaled_touch_slop;
1004 int secondary_coord_y = kFakeCoordY + 20 * scaled_touch_slop; 1035 int secondary_coord_y = kFakeCoordY + 20 * scaled_touch_slop;
1005 1036
1006 MockMotionEvent event = 1037 MockMotionEvent event =
1007 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 1038 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
1008 event.SetId(++motion_event_id); 1039 event.SetId(++motion_event_id);
1009 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1040 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1010 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 1041 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
1042 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1011 1043
1012 event = ObtainMotionEvent(event_time, 1044 event = ObtainMotionEvent(event_time,
1013 MotionEvent::ACTION_POINTER_DOWN, 1045 MotionEvent::ACTION_POINTER_DOWN,
1014 kFakeCoordX, 1046 kFakeCoordX,
1015 kFakeCoordY, 1047 kFakeCoordY,
1016 secondary_coord_x, 1048 secondary_coord_x,
1017 secondary_coord_y); 1049 secondary_coord_y);
1018 event.SetId(++motion_event_id); 1050 event.SetId(++motion_event_id);
jdduke (slow) 2014/04/08 21:07:41 Hmm, it's a little odd you stop checking |touch_po
tdresser 2014/04/09 14:50:48 Done.
1019 1051
1020 gesture_provider_->OnTouchEvent(event); 1052 gesture_provider_->OnTouchEvent(event);
1021 EXPECT_EQ(1U, GetReceivedGestureCount()); 1053 EXPECT_EQ(1U, GetReceivedGestureCount());
1022 1054
1023 secondary_coord_x += 5 * scaled_touch_slop; 1055 secondary_coord_x += 5 * scaled_touch_slop;
1024 secondary_coord_y += 5 * scaled_touch_slop; 1056 secondary_coord_y += 5 * scaled_touch_slop;
1025 event = ObtainMotionEvent(event_time, 1057 event = ObtainMotionEvent(event_time,
1026 MotionEvent::ACTION_MOVE, 1058 MotionEvent::ACTION_MOVE,
1027 kFakeCoordX, 1059 kFakeCoordX,
1028 kFakeCoordY, 1060 kFakeCoordY,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 1111 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
1080 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1112 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1081 1113
1082 const base::TimeDelta long_press_timeout = 1114 const base::TimeDelta long_press_timeout =
1083 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond; 1115 GetLongPressTimeout() + GetShowPressTimeout() + kOneMicrosecond;
1084 RunTasksAndWait(long_press_timeout); 1116 RunTasksAndWait(long_press_timeout);
1085 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType()); 1117 EXPECT_EQ(ET_GESTURE_LONG_PRESS, GetMostRecentGestureEventType());
1086 1118
1087 EXPECT_TRUE(CancelActiveTouchSequence()); 1119 EXPECT_TRUE(CancelActiveTouchSequence());
1088 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType()); 1120 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetMostRecentGestureEventType());
1121 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1089 1122
1090 event = ObtainMotionEvent(event_time + long_press_timeout, 1123 event = ObtainMotionEvent(event_time + long_press_timeout,
1091 MotionEvent::ACTION_UP); 1124 MotionEvent::ACTION_UP);
1092 gesture_provider_->OnTouchEvent(event); 1125 gesture_provider_->OnTouchEvent(event);
1093 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP)); 1126 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_TAP));
1094 } 1127 }
1095 1128
1096 // Verify that inserting a touch cancel event will trigger proper touch and 1129 // Verify that inserting a touch cancel event will trigger proper touch and
1097 // gesture sequence cancellation. 1130 // gesture sequence cancellation.
1098 TEST_F(GestureProviderTest, CancelActiveTouchSequence) { 1131 TEST_F(GestureProviderTest, CancelActiveTouchSequence) {
(...skipping 30 matching lines...) Expand all
1129 } 1162 }
1130 1163
1131 // Verify that gesture begin and gesture end events are dispatched correctly. 1164 // Verify that gesture begin and gesture end events are dispatched correctly.
1132 TEST_F(GestureProviderTest, GestureBeginAndEnd) { 1165 TEST_F(GestureProviderTest, GestureBeginAndEnd) {
1133 SetBeginEndTypesEnabled(true); 1166 SetBeginEndTypesEnabled(true);
1134 base::TimeTicks event_time = base::TimeTicks::Now(); 1167 base::TimeTicks event_time = base::TimeTicks::Now();
1135 1168
1136 EXPECT_EQ(0U, GetReceivedGestureCount()); 1169 EXPECT_EQ(0U, GetReceivedGestureCount());
1137 MockMotionEvent event = 1170 MockMotionEvent event =
1138 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 1171 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
1172 event.pointer_count = 1;
1139 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1173 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1140 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); 1174 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type);
1141 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 1175 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
1142 EXPECT_EQ(2U, GetReceivedGestureCount()); 1176 EXPECT_EQ(2U, GetReceivedGestureCount());
1177 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1143 1178
1144 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); 1179 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN);
1180 event.pointer_count = 2;
1145 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1181 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1146 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); 1182 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType());
1147 EXPECT_EQ(3U, GetReceivedGestureCount()); 1183 EXPECT_EQ(3U, GetReceivedGestureCount());
1184 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points());
1148 1185
1149 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); 1186 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN);
1187 event.pointer_count = 3;
1150 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1188 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1151 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); 1189 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType());
1152 EXPECT_EQ(4U, GetReceivedGestureCount()); 1190 EXPECT_EQ(4U, GetReceivedGestureCount());
1191 EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points());
1153 1192
1154 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); 1193 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP);
1194 event.pointer_count = 2;
1155 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1195 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1156 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1196 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1157 EXPECT_EQ(5U, GetReceivedGestureCount()); 1197 EXPECT_EQ(5U, GetReceivedGestureCount());
1198 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points());
1158 1199
1159 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN); 1200 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_DOWN);
1201 event.pointer_count = 3;
1160 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1202 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1161 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType()); 1203 EXPECT_EQ(ET_GESTURE_BEGIN, GetMostRecentGestureEventType());
1162 EXPECT_EQ(6U, GetReceivedGestureCount()); 1204 EXPECT_EQ(6U, GetReceivedGestureCount());
1205 EXPECT_EQ(3, GetMostRecentGestureEvent().details.touch_points());
1163 1206
1164 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); 1207 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP);
1208 event.pointer_count = 2;
1165 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1209 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1166 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1210 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1167 EXPECT_EQ(7U, GetReceivedGestureCount()); 1211 EXPECT_EQ(7U, GetReceivedGestureCount());
1212 EXPECT_EQ(2, GetMostRecentGestureEvent().details.touch_points());
1168 1213
1169 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP); 1214 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_POINTER_UP);
1215 event.pointer_count = 1;
1170 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1216 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1171 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1217 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1172 EXPECT_EQ(8U, GetReceivedGestureCount()); 1218 EXPECT_EQ(8U, GetReceivedGestureCount());
1219 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1173 1220
1174 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP); 1221 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_UP);
1222 event.pointer_count = 1;
1175 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1223 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1176 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1224 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1177 EXPECT_EQ(9U, GetReceivedGestureCount()); 1225 EXPECT_EQ(9U, GetReceivedGestureCount());
1226 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1178 1227
1179 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 1228 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
1229 event.pointer_count = 1;
1180 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1230 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1181 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(9).type); 1231 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(9).type);
1182 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(10).type); 1232 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(10).type);
1183 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 1233 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
1184 EXPECT_EQ(12U, GetReceivedGestureCount()); 1234 EXPECT_EQ(12U, GetReceivedGestureCount());
1235 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1185 1236
1186 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL); 1237 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL);
1238 event.pointer_count = 1;
1187 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1239 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1188 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(12).type); 1240 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(12).type);
1189 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1241 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1190 EXPECT_EQ(14U, GetReceivedGestureCount()); 1242 EXPECT_EQ(14U, GetReceivedGestureCount());
1191 1243 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
1192
1193 } 1244 }
1194 1245
1195 } // namespace ui 1246 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698