Chromium Code Reviews| Index: ui/chromeos/touch_exploration_controller_unittest.cc |
| diff --git a/ui/chromeos/touch_exploration_controller_unittest.cc b/ui/chromeos/touch_exploration_controller_unittest.cc |
| index 651dd12ac2e92fcb447ccc99225e0291da52fa82..97c0d6c98d516033253baaa5ad72964960bd2a23 100644 |
| --- a/ui/chromeos/touch_exploration_controller_unittest.cc |
| +++ b/ui/chromeos/touch_exploration_controller_unittest.cc |
| @@ -180,6 +180,10 @@ class TouchExplorationControllerTestApi { |
| touch_exploration_controller_->tick_clock_ = simulated_clock; |
| } |
| + void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { |
| + touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); |
| + } |
| + |
| private: |
| std::unique_ptr<TouchExplorationController> touch_exploration_controller_; |
| @@ -395,6 +399,10 @@ class TouchExplorationTest : public aura::test::AuraTestBase { |
| simulated_clock_->NowTicks().ToInternalValue()); |
| } |
| + void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { |
| + touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); |
| + } |
| + |
| std::unique_ptr<test::EventGenerator> generator_; |
| ui::GestureDetector::Config gesture_detector_config_; |
| // Owned by |generator_|. |
| @@ -707,6 +715,45 @@ TEST_F(TouchExplorationTest, DoubleTap) { |
| EXPECT_TRUE(IsInNoFingersDownState()); |
| } |
| +// If an explicit anchor point is set during touch exploration, double-tapping |
| +// should send a 'click' gesture rather than a simulated touch press and |
| +// release. |
| +TEST_F(TouchExplorationTest, DoubleTapWithExplicitAnchorPoint) { |
| + SwitchTouchExplorationMode(true); |
| + |
| + // Tap at one location, and get a mouse move event. |
| + gfx::Point tap_location(51, 52); |
| + generator_->set_current_location(tap_location); |
| + generator_->PressTouchId(1); |
| + generator_->ReleaseTouchId(1); |
| + AdvanceSimulatedTimePastTapDelay(); |
| + |
| + SetTouchAccessibilityAnchorPoint(tap_location); |
| + |
| + std::vector<ui::LocatedEvent*> events = |
| + GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
| + ASSERT_EQ(1U, events.size()); |
| + |
| + EXPECT_EQ(tap_location, events[0]->location()); |
| + EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); |
| + EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); |
| + ClearCapturedEvents(); |
| + |
| + // Now double-tap at a different location. This should result in |
| + // a click gesture. |
| + gfx::Point double_tap_location(33, 34); |
| + generator_->set_current_location(double_tap_location); |
| + generator_->PressTouch(); |
| + generator_->ReleaseTouch(); |
| + generator_->PressTouch(); |
| + generator_->ReleaseTouch(); |
| + |
| + std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
| + ASSERT_EQ(0U, captured_events.size()); |
| + EXPECT_TRUE(IsInNoFingersDownState()); |
| + EXPECT_EQ(ui::AX_GESTURE_CLICK, delegate_.GetLastGesture()); |
| +} |
| + |
| // Double-tapping where the user holds their finger down for the second time |
| // for a longer press should send a touch press and passthrough all further |
| // events from that finger. Other finger presses should be ignored. |
| @@ -914,6 +961,8 @@ TEST_F(TouchExplorationTest, SplitTap) { |
| gfx::Point initial_touch_location(11, 12); |
| gfx::Point second_touch_location(33, 34); |
| + LOG(ERROR) << "*** SplitTap initial hold ***"; |
|
oshima
2016/05/26 22:15:39
debug msg
dmazzoni
2016/05/26 22:53:48
Done.
|
| + |
| // Tap and hold at one location, and get a mouse move event in touch explore. |
| EnterTouchExplorationModeAtLocation(initial_touch_location); |
| std::vector<ui::LocatedEvent*> events = |
| @@ -926,6 +975,8 @@ TEST_F(TouchExplorationTest, SplitTap) { |
| ClearCapturedEvents(); |
| EXPECT_TRUE(IsInTouchToMouseMode()); |
| + LOG(ERROR) << "*** SplitTap press ***"; |
|
oshima
2016/05/26 22:15:39
ditto
dmazzoni
2016/05/26 22:53:48
Done.
|
| + |
| // Now tap and release at a different location. This should result in a |
| // single touch and release at the location of the first (held) tap, |
| // not at the location of the second tap and release. |
| @@ -1005,103 +1056,6 @@ TEST_F(TouchExplorationTest, SplitTapRelease) { |
| EXPECT_EQ(initial_touch_location, captured_events[1]->location()); |
| } |
| -// When in touch exploration mode, making a long press with a second finger |
| -// should send a touch press and released to the location of the last |
| -// successful touch exploration. There should be a delay between the |
| -// touch and release events (right click). |
| -TEST_F(TouchExplorationTest, SplitTapLongPress) { |
| - SwitchTouchExplorationMode(true); |
| - gfx::Point initial_touch_location(11, 12); |
| - gfx::Point second_touch_location(33, 34); |
| - |
| - // Tap and hold at one location, and get a mouse move event in touch explore. |
| - EnterTouchExplorationModeAtLocation(initial_touch_location); |
| - std::vector<ui::LocatedEvent*> events = |
| - GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
| - ASSERT_EQ(1U, events.size()); |
| - |
| - ClearCapturedEvents(); |
| - |
| - // Now tap, hold, and release at a different location. This should result |
| - // in a single touch and release (long press) at the location of the first |
| - // (held) tap, not at the location of the second tap and release. |
| - ui::TouchEvent split_tap_press( |
| - ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
| - generator_->Dispatch(&split_tap_press); |
| - // To simulate the behavior of the real device, we manually disable |
| - // mouse events, like in the SplitTap test. |
| - cursor_client()->DisableMouseEvents(); |
| - EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled()); |
| - EXPECT_FALSE(cursor_client()->IsCursorVisible()); |
| - EXPECT_FALSE(IsInGestureInProgressState()); |
| - simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); |
| - // After the release, there is still a finger in touch exploration, and |
| - // mouse events should be enabled again. |
| - ui::TouchEvent split_tap_release( |
| - ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); |
| - generator_->Dispatch(&split_tap_release); |
| - EXPECT_FALSE(IsInNoFingersDownState()); |
| - EXPECT_TRUE(IsInTouchToMouseMode()); |
| - |
| - std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
| - ASSERT_EQ(2U, captured_events.size()); |
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[0]->location()); |
| - base::TimeDelta pressed_time = captured_events[0]->time_stamp(); |
| - EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[1]->location()); |
| - base::TimeDelta released_time = captured_events[1]->time_stamp(); |
| - EXPECT_EQ(gesture_detector_config_.longpress_timeout, |
| - released_time - pressed_time); |
| -} |
| - |
| -// If split tap is started but the touch explore finger is released first, |
| -// there should still be a touch press and release sent to the location of |
| -// the last successful touch exploration. If the remaining finger is held |
| -// as a longpress, there should be a delay between the sent touch and release |
| -// events (right click).All fingers should be released after the click |
| -// goes through. |
| -TEST_F(TouchExplorationTest, SplitTapReleaseLongPress) { |
| - SwitchTouchExplorationMode(true); |
| - gfx::Point initial_touch_location(11, 12); |
| - gfx::Point second_touch_location(33, 34); |
| - |
| - // Tap and hold at one location, and get a mouse move event in touch explore. |
| - EnterTouchExplorationModeAtLocation(initial_touch_location); |
| - std::vector<ui::LocatedEvent*> events = |
| - GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
| - ASSERT_EQ(1U, events.size()); |
| - ClearCapturedEvents(); |
| - |
| - // Now tap at a different location. Release at the first location, |
| - // then release at the second. This should result in a |
| - // single touch and release at the location of the first (held) tap, |
| - // not at the location of the second tap and release. |
| - // After the release, TouchToMouseMode should still be on. |
| - ui::TouchEvent split_tap_press( |
| - ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
| - generator_->Dispatch(&split_tap_press); |
| - ui::TouchEvent touch_explore_release( |
| - ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); |
| - generator_->Dispatch(&touch_explore_release); |
| - simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); |
| - ui::TouchEvent split_tap_release( |
| - ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); |
| - generator_->Dispatch(&split_tap_release); |
| - EXPECT_TRUE(IsInTouchToMouseMode()); |
| - |
| - std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
| - ASSERT_EQ(2U, captured_events.size()); |
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[0]->location()); |
| - base::TimeDelta pressed_time = captured_events[0]->time_stamp(); |
| - EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[1]->location()); |
| - base::TimeDelta released_time = captured_events[1]->time_stamp(); |
| - EXPECT_EQ(gesture_detector_config_.longpress_timeout, |
| - released_time - pressed_time); |
| - } |
| - |
| TEST_F(TouchExplorationTest, SplitTapMultiFinger) { |
| SwitchTouchExplorationMode(true); |
| gfx::Point initial_touch_location(11, 12); |
| @@ -1120,20 +1074,20 @@ TEST_F(TouchExplorationTest, SplitTapMultiFinger) { |
| EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); |
| ClearCapturedEvents(); |
| - // Now tap at a different location and hold for long press. |
| + // Now tap at a different location |
| ui::TouchEvent split_tap_press( |
| ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
| generator_->Dispatch(&split_tap_press); |
| simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); |
| - // Placing a third finger on the screen should cancel the initial press and |
| + // Placing a third finger on the screen should cancel the split tap and |
| // enter the wait state. |
| ui::TouchEvent third_press( |
| ui::ET_TOUCH_PRESSED, third_touch_location, 2, Now()); |
| generator_->Dispatch(&third_press); |
| - // When all three fingers are released, the only events captured should be a |
| - // press and touch cancel. All fingers should then be up. |
| + // When all three fingers are released, no events should be captured. |
| + // All fingers should then be up. |
| ui::TouchEvent touch_explore_release( |
| ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); |
| generator_->Dispatch(&touch_explore_release); |
| @@ -1145,15 +1099,10 @@ TEST_F(TouchExplorationTest, SplitTapMultiFinger) { |
| generator_->Dispatch(&third_tap_release); |
| std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
| - ASSERT_EQ(2U, captured_events.size()); |
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[0]->location()); |
| - EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); |
| - EXPECT_EQ(initial_touch_location, captured_events[1]->location()); |
| + ASSERT_EQ(0U, captured_events.size()); |
| EXPECT_TRUE(IsInNoFingersDownState()); |
| } |
| - |
| TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { |
| SwitchTouchExplorationMode(true); |
| gfx::Point first_touch_location(11, 12); |
| @@ -1175,24 +1124,20 @@ TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { |
| generator_->Dispatch(&split_tap_press); |
| // Move the first finger out of slop and release both fingers. The split |
| - // tap should have been cancelled, so a touch press and touch cancel event |
| - // should go through at the last touch exploration location (the first press). |
| + // tap should have been cancelled. |
| ui::TouchEvent first_touch_move( |
| ui::ET_TOUCH_MOVED, first_move_location, 0, Now()); |
| generator_->Dispatch(&first_touch_move); |
| ui::TouchEvent first_touch_release( |
| ui::ET_TOUCH_RELEASED, first_move_location, 0, Now()); |
| generator_->Dispatch(&first_touch_release); |
| + LOG(ERROR) << "*** FINAL RELEASE ***"; |
| ui::TouchEvent second_touch_release( |
| ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); |
| generator_->Dispatch(&second_touch_release); |
| std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
| - ASSERT_EQ(2U, captured_events.size()); |
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
| - EXPECT_EQ(first_touch_location, captured_events[0]->location()); |
| - EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); |
| - EXPECT_EQ(first_touch_location, captured_events[1]->location()); |
| + ASSERT_EQ(0U, captured_events.size()); |
| EXPECT_TRUE(IsInNoFingersDownState()); |
| // Now do the same, but moving the split tap finger out of slop |
| @@ -1203,8 +1148,7 @@ TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { |
| generator_->Dispatch(&split_tap_press2); |
| // Move the second finger out of slop and release both fingers. The split |
| - // tap should have been cancelled, so a touch press and touch cancel event |
| - // should go through at the last touch exploration location (the first press). |
| + // tap should have been cancelled. |
| ui::TouchEvent second_touch_move2( |
| ui::ET_TOUCH_MOVED, second_move_location, 1, Now()); |
| generator_->Dispatch(&second_touch_move2); |
| @@ -1216,11 +1160,7 @@ TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { |
| generator_->Dispatch(&second_touch_release2); |
| captured_events = GetCapturedLocatedEvents(); |
| - ASSERT_EQ(2U, captured_events.size()); |
| - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
| - EXPECT_EQ(first_touch_location, captured_events[0]->location()); |
| - EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); |
| - EXPECT_EQ(first_touch_location, captured_events[1]->location()); |
| + ASSERT_EQ(0U, captured_events.size()); |
| EXPECT_TRUE(IsInNoFingersDownState()); |
| } |