Chromium Code Reviews| Index: ui/touch_selection/touch_selection_controller_unittest.cc |
| diff --git a/ui/touch_selection/touch_selection_controller_unittest.cc b/ui/touch_selection/touch_selection_controller_unittest.cc |
| index 73e11323534ffe527ac3ae5cce9af3ba8ea182c6..31f35b07e5ab3182c9f8a9453e5f63bedfe0a15a 100644 |
| --- a/ui/touch_selection/touch_selection_controller_unittest.cc |
| +++ b/ui/touch_selection/touch_selection_controller_unittest.cc |
| @@ -1321,4 +1321,118 @@ TEST_F(TouchSelectionControllerTest, RectBetweenBounds) { |
| EXPECT_EQ(gfx::RectF(), controller().GetRectBetweenBounds()); |
| } |
| +TEST_F(TouchSelectionControllerTest, SelectionNoOrientationChangeWhenSwapped) { |
| + TouchSelectionControllerTestApi test_controller(&controller()); |
| + base::TimeTicks event_time = base::TimeTicks::Now(); |
| + OnLongPressEvent(); |
| + |
| + float line_height = 10.f; |
| + gfx::RectF start_rect(50, line_height, 0, line_height); |
| + gfx::RectF end_rect(100, line_height, 0, line_height); |
| + bool visible = true; |
| + ChangeSelection(start_rect, visible, end_rect, visible); |
| + EXPECT_THAT(GetAndResetEvents(), |
| + ElementsAre(SELECTION_ESTABLISHED, SELECTION_HANDLES_SHOWN)); |
| + EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + SetDraggingEnabled(true); |
| + |
| + // Simulate moving the base, not triggering a swap of points. |
| + MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, |
| + start_rect.x(), start_rect.bottom()); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED)); |
| + |
| + gfx::RectF offset_rect = end_rect; |
| + offset_rect.Offset(gfx::Vector2dF(-10, 0)); |
| + ChangeSelection(offset_rect, visible, end_rect, visible); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + event_time += base::TimeDelta::FromMilliseconds(300); |
|
mohsen
2015/11/19 21:35:36
Can you write this based on |kDefaultTapTimeoutMs|
AviD
2015/12/11 11:25:54
Done.
|
| + event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
|
mohsen
2015/11/19 21:35:36
Where does this (10, 5) location come from? Should
AviD
2015/12/11 11:25:53
Here, the touch_up position does not matter as the
|
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + // Simulate moving the base, triggering a swap of points. |
| + event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, |
| + offset_rect.x(), offset_rect.bottom()); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED)); |
| + |
| + offset_rect.Offset(gfx::Vector2dF(20, 0)); |
| + ChangeSelection(end_rect, visible, offset_rect, visible); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + |
| + event_time += base::TimeDelta::FromMilliseconds(300); |
| + event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + // Simulate moving the anchor, not triggering a swap of points. |
| + event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, |
| + offset_rect.x(), offset_rect.bottom()); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED)); |
| + |
| + offset_rect.Offset(gfx::Vector2dF(-5, 0)); |
| + ChangeSelection(end_rect, visible, offset_rect, visible); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + event_time += base::TimeDelta::FromMilliseconds(300); |
| + event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + // Simulate moving the anchor, triggering a swap of points. |
| + event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, |
| + offset_rect.x(), offset_rect.bottom()); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STARTED)); |
| + |
| + offset_rect.Offset(gfx::Vector2dF(-15, 0)); |
| + ChangeSelection(offset_rect, visible, end_rect, visible); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLES_MOVED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| + |
| + event_time += base::TimeDelta::FromMilliseconds(300); |
| + event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
| + EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| + EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| + EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| + TouchHandleOrientation::LEFT); |
| + EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| + TouchHandleOrientation::RIGHT); |
| +} |
| + |
| } // namespace ui |