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

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

Issue 469523003: Add the actual location coordinates to the touch cancel event (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clone the state_point 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
« no previous file with comments | « no previous file | ui/aura/window_event_dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/scoped_vector.h" 6 #include "base/memory/scoped_vector.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/timer/timer.h" 9 #include "base/timer/timer.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 base::TimeDelta::FromMilliseconds(simulated_now_)); 524 base::TimeDelta::FromMilliseconds(simulated_now_));
525 ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&move); 525 ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&move);
526 ASSERT_FALSE(details.dispatcher_destroyed); 526 ASSERT_FALSE(details.dispatcher_destroyed);
527 simulated_now_++; 527 simulated_now_++;
528 } 528 }
529 }; 529 };
530 530
531 // An event handler to keep track of events. 531 // An event handler to keep track of events.
532 class TestEventHandler : public ui::EventHandler { 532 class TestEventHandler : public ui::EventHandler {
533 public: 533 public:
534 TestEventHandler() : touch_released_count_(0), 534 TestEventHandler()
535 touch_pressed_count_(0), 535 : touch_released_count_(0),
536 touch_moved_count_(0), 536 touch_pressed_count_(0),
537 touch_cancelled_count_(0) { 537 touch_moved_count_(0) {}
538 }
539 538
540 virtual ~TestEventHandler() {} 539 virtual ~TestEventHandler() {}
541 540
542 virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { 541 virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
543 switch (event->type()) { 542 switch (event->type()) {
544 case ui::ET_TOUCH_RELEASED: 543 case ui::ET_TOUCH_RELEASED:
545 touch_released_count_++; 544 touch_released_count_++;
546 break; 545 break;
547 case ui::ET_TOUCH_PRESSED: 546 case ui::ET_TOUCH_PRESSED:
548 touch_pressed_count_++; 547 touch_pressed_count_++;
549 break; 548 break;
550 case ui::ET_TOUCH_MOVED: 549 case ui::ET_TOUCH_MOVED:
551 touch_moved_count_++; 550 touch_moved_count_++;
552 break; 551 break;
553 case ui::ET_TOUCH_CANCELLED: 552 case ui::ET_TOUCH_CANCELLED:
554 touch_cancelled_count_++; 553 touch_points_.push_back(event->location());
555 break; 554 break;
556 default: 555 default:
557 break; 556 break;
558 } 557 }
559 } 558 }
560 559
561 void Reset() { 560 void Reset() {
562 touch_released_count_ = 0; 561 touch_released_count_ = 0;
563 touch_pressed_count_ = 0; 562 touch_pressed_count_ = 0;
564 touch_moved_count_ = 0; 563 touch_moved_count_ = 0;
565 touch_cancelled_count_ = 0; 564 touch_points_.clear();
566 } 565 }
567 566
568 int touch_released_count() const { return touch_released_count_; } 567 int touch_released_count() const { return touch_released_count_; }
569 int touch_pressed_count() const { return touch_pressed_count_; } 568 int touch_pressed_count() const { return touch_pressed_count_; }
570 int touch_moved_count() const { return touch_moved_count_; } 569 int touch_moved_count() const { return touch_moved_count_; }
571 int touch_cancelled_count() const { return touch_cancelled_count_; } 570 int touch_cancelled_count() const {
571 return static_cast<int>(touch_points_.size());
572 }
573 const std::vector<gfx::PointF>& touch_points() const { return touch_points_; }
572 574
573 private: 575 private:
574 int touch_released_count_; 576 int touch_released_count_;
575 int touch_pressed_count_; 577 int touch_pressed_count_;
576 int touch_moved_count_; 578 int touch_moved_count_;
577 int touch_cancelled_count_; 579 std::vector<gfx::PointF> touch_points_;
tdresser 2014/08/27 15:58:50 Perhaps we should name this |cancelled_touch_point
578 580
579 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); 581 DISALLOW_COPY_AND_ASSIGN(TestEventHandler);
580 }; 582 };
581 583
582 // Removes the target window from its parent when it receives a touch-cancel 584 // Removes the target window from its parent when it receives a touch-cancel
583 // event. 585 // event.
584 class RemoveOnTouchCancelHandler : public TestEventHandler { 586 class RemoveOnTouchCancelHandler : public TestEventHandler {
585 public: 587 public:
586 RemoveOnTouchCancelHandler() {} 588 RemoveOnTouchCancelHandler() {}
587 virtual ~RemoveOnTouchCancelHandler() {} 589 virtual ~RemoveOnTouchCancelHandler() {}
(...skipping 2930 matching lines...) Expand 10 before | Expand all | Expand 10 after
3518 EXPECT_FALSE(delegate->scroll_end()); 3520 EXPECT_FALSE(delegate->scroll_end());
3519 } 3521 }
3520 3522
3521 TEST_F(GestureRecognizerTest, 3523 TEST_F(GestureRecognizerTest,
3522 TransferEventDispatchesTouchCancel) { 3524 TransferEventDispatchesTouchCancel) {
3523 scoped_ptr<GestureEventConsumeDelegate> delegate( 3525 scoped_ptr<GestureEventConsumeDelegate> delegate(
3524 new GestureEventConsumeDelegate()); 3526 new GestureEventConsumeDelegate());
3525 TimedEvents tes; 3527 TimedEvents tes;
3526 const int kWindowWidth = 800; 3528 const int kWindowWidth = 800;
3527 const int kWindowHeight = 600; 3529 const int kWindowHeight = 600;
3528 const int kTouchId = 2; 3530 const int kTouchId1 = 1;
3531 const int kTouchId2 = 2;
3529 gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight); 3532 gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight);
3530 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 3533 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
3531 delegate.get(), -1234, bounds, root_window())); 3534 delegate.get(), -1234, bounds, root_window()));
3532 scoped_ptr<RemoveOnTouchCancelHandler> 3535 scoped_ptr<TestEventHandler> handler(new TestEventHandler());
3533 handler(new RemoveOnTouchCancelHandler());
3534 window->AddPreTargetHandler(handler.get()); 3536 window->AddPreTargetHandler(handler.get());
3535 3537
3536 // Start a gesture sequence on |window|. Then transfer the events to NULL. 3538 // Start a gesture sequence on |window|. Then transfer the events to NULL.
3537 // Make sure |window| receives a touch-cancel event. 3539 // Make sure |window| receives a touch-cancel event.
3538 delegate->Reset(); 3540 delegate->Reset();
3539 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 3541 ui::TouchEvent press(
3540 kTouchId, tes.Now()); 3542 ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1, tes.Now());
3541 ui::TouchEvent p2(ui::ET_TOUCH_PRESSED, gfx::Point(50, 50), 1, tes.Now());
3542 DispatchEventUsingWindowDispatcher(&press); 3543 DispatchEventUsingWindowDispatcher(&press);
3544 EXPECT_2_EVENTS(
3545 delegate->events(), ui::ET_GESTURE_BEGIN, ui::ET_GESTURE_TAP_DOWN);
3546 delegate->Reset();
3547 ui::TouchEvent p2(
3548 ui::ET_TOUCH_PRESSED, gfx::Point(50, 50), kTouchId2, tes.Now());
3543 DispatchEventUsingWindowDispatcher(&p2); 3549 DispatchEventUsingWindowDispatcher(&p2);
3544 EXPECT_FALSE(delegate->tap()); 3550 EXPECT_2_EVENTS(
3545 EXPECT_TRUE(delegate->tap_down()); 3551 delegate->events(), ui::ET_GESTURE_TAP_CANCEL, ui::ET_GESTURE_BEGIN);
3546 EXPECT_TRUE(delegate->tap_cancel()); 3552 delegate->Reset();
3547 EXPECT_TRUE(delegate->begin()); 3553 ui::TouchEvent move(
3554 ui::ET_TOUCH_MOVED, gfx::Point(350, 300), kTouchId2, tes.Now());
3555 DispatchEventUsingWindowDispatcher(&move);
3556 EXPECT_3_EVENTS(delegate->events(),
3557 ui::ET_GESTURE_SCROLL_BEGIN,
3558 ui::ET_GESTURE_SCROLL_UPDATE,
3559 ui::ET_GESTURE_PINCH_BEGIN);
3548 EXPECT_EQ(2, handler->touch_pressed_count()); 3560 EXPECT_EQ(2, handler->touch_pressed_count());
3549 delegate->Reset(); 3561 delegate->Reset();
3550 handler->Reset(); 3562 handler->Reset();
3551 3563
3552 ui::GestureRecognizer* gesture_recognizer = ui::GestureRecognizer::Get(); 3564 ui::GestureRecognizer* gesture_recognizer = ui::GestureRecognizer::Get();
3553 EXPECT_EQ(window.get(), 3565 EXPECT_EQ(window.get(),
3554 gesture_recognizer->GetTouchLockedTarget(press)); 3566 gesture_recognizer->GetTouchLockedTarget(press));
3555 gesture_recognizer->TransferEventsTo(window.get(), NULL); 3567 gesture_recognizer->TransferEventsTo(window.get(), NULL);
3556 EXPECT_EQ(NULL, 3568 EXPECT_EQ(NULL,
3557 gesture_recognizer->GetTouchLockedTarget(press)); 3569 gesture_recognizer->GetTouchLockedTarget(press));
3558 // The event-handler removes |window| from its parent on the first 3570 EXPECT_4_EVENTS(delegate->events(),
3559 // touch-cancel event, so it won't receive the second touch-cancel event. 3571 ui::ET_GESTURE_PINCH_END,
3560 EXPECT_EQ(1, handler->touch_cancelled_count()); 3572 ui::ET_GESTURE_SCROLL_END,
3573 ui::ET_GESTURE_END,
3574 ui::ET_GESTURE_END);
3575 const std::vector<gfx::PointF>& points = handler->touch_points();
3576 EXPECT_EQ(2U, points.size());
3577 EXPECT_EQ(gfx::Point(101, 201), points[0]);
3578 EXPECT_EQ(gfx::Point(350, 300), points[1]);
3561 } 3579 }
3562 3580
3563 // Check that appropriate touch events generate show press events 3581 // Check that appropriate touch events generate show press events
3564 TEST_F(GestureRecognizerTest, GestureEventShowPress) { 3582 TEST_F(GestureRecognizerTest, GestureEventShowPress) {
3565 scoped_ptr<GestureEventConsumeDelegate> delegate( 3583 scoped_ptr<GestureEventConsumeDelegate> delegate(
3566 new GestureEventConsumeDelegate()); 3584 new GestureEventConsumeDelegate());
3567 TimedEvents tes; 3585 TimedEvents tes;
3568 const int kWindowWidth = 123; 3586 const int kWindowWidth = 123;
3569 const int kWindowHeight = 45; 3587 const int kWindowHeight = 45;
3570 const int kTouchId = 2; 3588 const int kTouchId = 2;
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
4258 ui::TouchEvent move3( 4276 ui::TouchEvent move3(
4259 ui::ET_TOUCH_MOVED, gfx::Point(65, 202), kTouchId1, tes.Now()); 4277 ui::ET_TOUCH_MOVED, gfx::Point(65, 202), kTouchId1, tes.Now());
4260 DispatchEventUsingWindowDispatcher(&move3); 4278 DispatchEventUsingWindowDispatcher(&move3);
4261 4279
4262 delegate->ReceivedAck(); 4280 delegate->ReceivedAck();
4263 EXPECT_1_EVENT(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE); 4281 EXPECT_1_EVENT(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE);
4264 } 4282 }
4265 4283
4266 } // namespace test 4284 } // namespace test
4267 } // namespace aura 4285 } // namespace aura
OLDNEW
« no previous file with comments | « no previous file | ui/aura/window_event_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698