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

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

Issue 567783002: Add modifier flags to MotionEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove MotionEvent modifiers Created 6 years, 3 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
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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 267
268 bool HasDownEvent() const { return gesture_provider_->current_down_event(); } 268 bool HasDownEvent() const { return gesture_provider_->current_down_event(); }
269 269
270 protected: 270 protected:
271 void CheckScrollEventSequenceForEndActionType( 271 void CheckScrollEventSequenceForEndActionType(
272 MotionEvent::Action end_action_type) { 272 MotionEvent::Action end_action_type) {
273 base::TimeTicks event_time = base::TimeTicks::Now(); 273 base::TimeTicks event_time = base::TimeTicks::Now();
274 const float scroll_to_x = kFakeCoordX + 100; 274 const float scroll_to_x = kFakeCoordX + 100;
275 const float scroll_to_y = kFakeCoordY + 100; 275 const float scroll_to_y = kFakeCoordY + 100;
276 int motion_event_id = 0; 276 int motion_event_id = 0;
277 int motion_event_flags = EF_SHIFT_DOWN | EF_CAPS_LOCK_DOWN;
277 278
278 MockMotionEvent event = 279 MockMotionEvent event =
279 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 280 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
280 event.set_id(++motion_event_id); 281 event.set_id(++motion_event_id);
282 event.set_flags(motion_event_flags);
281 283
282 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 284 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
285 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
283 286
284 event = ObtainMotionEvent(event_time + kOneSecond, 287 event = ObtainMotionEvent(event_time + kOneSecond,
285 MotionEvent::ACTION_MOVE, 288 MotionEvent::ACTION_MOVE,
286 scroll_to_x, 289 scroll_to_x,
287 scroll_to_y); 290 scroll_to_y);
288 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); 291 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
289 event.set_id(++motion_event_id); 292 event.set_id(++motion_event_id);
293 event.set_flags(motion_event_flags);
290 294
291 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 295 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
292 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); 296 EXPECT_TRUE(gesture_provider_->IsScrollInProgress());
293 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 297 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
294 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 298 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
299 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
295 EXPECT_EQ(event.GetToolType(0), 300 EXPECT_EQ(event.GetToolType(0),
296 GetMostRecentGestureEvent().primary_tool_type); 301 GetMostRecentGestureEvent().primary_tool_type);
297 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 302 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
298 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y), 303 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(scroll_to_x, scroll_to_y),
299 GetMostRecentGestureEvent().details.bounding_box()); 304 GetMostRecentGestureEvent().details.bounding_box());
300 ASSERT_EQ(3U, GetReceivedGestureCount()) << "Only TapDown, " 305 ASSERT_EQ(3U, GetReceivedGestureCount()) << "Only TapDown, "
301 "ScrollBegin and ScrollBy " 306 "ScrollBegin and ScrollBy "
302 "should have been sent"; 307 "should have been sent";
303 308
304 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type()); 309 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(1).type());
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 std::vector<GestureEventData> gestures_; 409 std::vector<GestureEventData> gestures_;
405 scoped_ptr<GestureProvider> gesture_provider_; 410 scoped_ptr<GestureProvider> gesture_provider_;
406 scoped_ptr<GestureEventData> active_scroll_begin_event_; 411 scoped_ptr<GestureEventData> active_scroll_begin_event_;
407 base::MessageLoopForUI message_loop_; 412 base::MessageLoopForUI message_loop_;
408 }; 413 };
409 414
410 // Verify that a DOWN followed shortly by an UP will trigger a single tap. 415 // Verify that a DOWN followed shortly by an UP will trigger a single tap.
411 TEST_F(GestureProviderTest, GestureTap) { 416 TEST_F(GestureProviderTest, GestureTap) {
412 base::TimeTicks event_time = base::TimeTicks::Now(); 417 base::TimeTicks event_time = base::TimeTicks::Now();
413 int motion_event_id = 0; 418 int motion_event_id = 0;
419 int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN;
414 420
415 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); 421 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
416 422
417 MockMotionEvent event = 423 MockMotionEvent event =
418 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 424 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
419 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); 425 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
420 event.set_id(++motion_event_id); 426 event.set_id(++motion_event_id);
427 event.set_flags(motion_event_flags);
421 428
422 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 429 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
423 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 430 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
424 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 431 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
425 EXPECT_EQ(event.GetToolType(0), 432 EXPECT_EQ(event.GetToolType(0),
426 GetMostRecentGestureEvent().primary_tool_type); 433 GetMostRecentGestureEvent().primary_tool_type);
434 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
427 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), 435 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
428 GetMostRecentGestureEvent().details.bounding_box()); 436 GetMostRecentGestureEvent().details.bounding_box());
429 437
430 event = ObtainMotionEvent(event_time + kOneMicrosecond, 438 event = ObtainMotionEvent(event_time + kOneMicrosecond,
431 MotionEvent::ACTION_UP); 439 MotionEvent::ACTION_UP);
432 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); 440 event.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER);
433 event.set_id(++motion_event_id); 441 event.set_id(++motion_event_id);
442 event.set_flags(motion_event_flags);
434 443
435 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 444 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
436 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); 445 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
437 // Ensure tap details have been set. 446 // Ensure tap details have been set.
438 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); 447 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
439 EXPECT_EQ(event.GetToolType(0), 448 EXPECT_EQ(event.GetToolType(0),
440 GetMostRecentGestureEvent().primary_tool_type); 449 GetMostRecentGestureEvent().primary_tool_type);
441 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 450 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
451 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
442 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 452 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
443 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), 453 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
444 GetMostRecentGestureEvent().details.bounding_box()); 454 GetMostRecentGestureEvent().details.bounding_box());
445 } 455 }
446 456
447 // Verify that a DOWN followed shortly by an UP will trigger 457 // Verify that a DOWN followed shortly by an UP will trigger
448 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled. 458 // a ET_GESTURE_TAP_UNCONFIRMED event if double-tap is enabled.
449 TEST_F(GestureProviderTest, GestureTapWithDelay) { 459 TEST_F(GestureProviderTest, GestureTapWithDelay) {
450 base::TimeTicks event_time = base::TimeTicks::Now(); 460 base::TimeTicks event_time = base::TimeTicks::Now();
451 int motion_event_id = 0; 461 int motion_event_id = 0;
462 int motion_event_flags = EF_CONTROL_DOWN | EF_ALT_DOWN | EF_CAPS_LOCK_DOWN;
452 463
453 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true); 464 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(true);
454 465
455 MockMotionEvent event = 466 MockMotionEvent event =
456 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 467 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
457 event.set_id(++motion_event_id); 468 event.set_id(++motion_event_id);
469 event.set_flags(motion_event_flags);
458 470
459 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 471 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
460 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 472 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
461 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 473 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
474 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
462 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
463 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), 476 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
464 GetMostRecentGestureEvent().details.bounding_box()); 477 GetMostRecentGestureEvent().details.bounding_box());
465 478
466 event = ObtainMotionEvent(event_time + kOneMicrosecond, 479 event = ObtainMotionEvent(event_time + kOneMicrosecond,
467 MotionEvent::ACTION_UP); 480 MotionEvent::ACTION_UP);
468 event.set_id(++motion_event_id); 481 event.set_id(++motion_event_id);
482 event.set_flags(motion_event_flags);
469 483
470 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 484 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
471 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType()); 485 EXPECT_EQ(ET_GESTURE_TAP_UNCONFIRMED, GetMostRecentGestureEventType());
472 // Ensure tap details have been set. 486 // Ensure tap details have been set.
473 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); 487 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
474 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 488 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
489 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 490 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
476 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY), 491 EXPECT_EQ(BoundsForSingleMockTouchAtLocation(kFakeCoordX, kFakeCoordY),
477 GetMostRecentGestureEvent().details.bounding_box()); 492 GetMostRecentGestureEvent().details.bounding_box());
478 493
479 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP)); 494 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_TAP));
480 RunTasksAndWait(GetDoubleTapTimeout()); 495 RunTasksAndWait(GetDoubleTapTimeout());
481 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP)); 496 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_TAP));
482 } 497 }
483 498
484 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG). 499 // Verify that a DOWN followed by a MOVE will trigger fling (but not LONG).
485 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) { 500 TEST_F(GestureProviderTest, GestureFlingAndCancelLongPress) {
486 base::TimeTicks event_time = TimeTicks::Now(); 501 base::TimeTicks event_time = TimeTicks::Now();
487 base::TimeDelta delta_time = kDeltaTimeForFlingSequences; 502 base::TimeDelta delta_time = kDeltaTimeForFlingSequences;
488 int motion_event_id = 0; 503 int motion_event_id = 0;
504 int motion_event_flags = EF_ALT_DOWN;
489 505
490 MockMotionEvent event = 506 MockMotionEvent event =
491 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 507 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
492 event.set_id(++motion_event_id); 508 event.set_id(++motion_event_id);
509 event.set_flags(motion_event_flags);
493 510
494 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 511 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
495 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 512 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
496 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 513 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
514 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
497 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 515 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
498 516
499 event = ObtainMotionEvent(event_time + delta_time, 517 event = ObtainMotionEvent(event_time + delta_time,
500 MotionEvent::ACTION_MOVE, 518 MotionEvent::ACTION_MOVE,
501 kFakeCoordX * 10, 519 kFakeCoordX * 10,
502 kFakeCoordY * 10); 520 kFakeCoordY * 10);
503 event.set_id(++motion_event_id); 521 event.set_id(++motion_event_id);
522 event.set_flags(motion_event_flags);
504 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 523 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
505 524
506 event = ObtainMotionEvent(event_time + delta_time * 2, 525 event = ObtainMotionEvent(event_time + delta_time * 2,
507 MotionEvent::ACTION_UP, 526 MotionEvent::ACTION_UP,
508 kFakeCoordX * 10, 527 kFakeCoordX * 10,
509 kFakeCoordY * 10); 528 kFakeCoordY * 10);
510 event.set_id(++motion_event_id); 529 event.set_id(++motion_event_id);
530 event.set_flags(motion_event_flags);
511 531
512 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 532 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
513 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); 533 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType());
514 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 534 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
535 EXPECT_EQ(motion_event_flags, GetMostRecentGestureEvent().flags);
515 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 536 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
516 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS)); 537 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_LONG_PRESS));
517 EXPECT_EQ( 538 EXPECT_EQ(
518 BoundsForSingleMockTouchAtLocation(kFakeCoordX * 10, kFakeCoordY * 10), 539 BoundsForSingleMockTouchAtLocation(kFakeCoordX * 10, kFakeCoordY * 10),
519 GetMostRecentGestureEvent().details.bounding_box()); 540 GetMostRecentGestureEvent().details.bounding_box());
520 } 541 }
521 542
522 // Verify that for a normal scroll the following events are sent: 543 // Verify that for a normal scroll the following events are sent:
523 // - ET_GESTURE_SCROLL_BEGIN 544 // - ET_GESTURE_SCROLL_BEGIN
524 // - ET_GESTURE_SCROLL_UPDATE 545 // - ET_GESTURE_SCROLL_UPDATE
(...skipping 1947 matching lines...) Expand 10 before | Expand all | Expand 10 after
2472 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 2493 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
2473 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); 2494 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType());
2474 2495
2475 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count()); 2496 EXPECT_EQ(1, GetMostRecentGestureEvent().details.tap_count());
2476 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points()); 2497 EXPECT_EQ(1, GetMostRecentGestureEvent().details.touch_points());
2477 EXPECT_EQ(gfx::RectF(0, 0, 20, 20), 2498 EXPECT_EQ(gfx::RectF(0, 0, 20, 20),
2478 GetMostRecentGestureEvent().details.bounding_box()); 2499 GetMostRecentGestureEvent().details.bounding_box());
2479 } 2500 }
2480 2501
2481 } // namespace ui 2502 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/gesture_detection/gesture_provider.cc ('k') | ui/events/gesture_detection/motion_event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698