| OLD | NEW |
| 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 "ui/touch_selection/touch_selection_controller.h" | 5 #include "ui/touch_selection/touch_selection_controller.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 10); | 422 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 10); |
| 423 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); | 423 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 424 EXPECT_TRUE(GetAndResetCaretMoved()); | 424 EXPECT_TRUE(GetAndResetCaretMoved()); |
| 425 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 10), GetLastCaretPosition()); | 425 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 10), GetLastCaretPosition()); |
| 426 | 426 |
| 427 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); | 427 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
| 428 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); | 428 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 429 EXPECT_FALSE(GetAndResetCaretMoved()); | 429 EXPECT_FALSE(GetAndResetCaretMoved()); |
| 430 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STOPPED)); | 430 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STOPPED)); |
| 431 | 431 |
| 432 // Once the drag is complete, no more touch events should be consumed until | 432 // Following ACTION_DOWN should not be consumed if it does not start handle |
| 433 // the next ACTION_DOWN. | 433 // dragging. |
| 434 SetDraggingEnabled(false); |
| 435 event = MockMotionEvent(MotionEvent::ACTION_DOWN, event_time, 0, 0); |
| 434 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); | 436 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); |
| 435 } | 437 } |
| 436 | 438 |
| 439 TEST_F(TouchSelectionControllerTest, InsertionDeactivatedWhileDragging) { |
| 440 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 441 OnTapEvent(); |
| 442 controller().OnSelectionEditable(true); |
| 443 |
| 444 float line_height = 10.f; |
| 445 gfx::RectF start_rect(10, 0, 0, line_height); |
| 446 bool visible = true; |
| 447 ChangeInsertion(start_rect, visible); |
| 448 EXPECT_THAT(GetAndResetEvents(), |
| 449 ElementsAre(SELECTION_ESTABLISHED, INSERTION_HANDLE_SHOWN)); |
| 450 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); |
| 451 |
| 452 // Enable dragging so that the following ACTION_DOWN starts handle dragging. |
| 453 SetDraggingEnabled(true); |
| 454 |
| 455 // Touch down to start dragging. |
| 456 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); |
| 457 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 458 EXPECT_FALSE(GetAndResetCaretMoved()); |
| 459 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STARTED)); |
| 460 |
| 461 // Move the handle. |
| 462 gfx::PointF start_offset = start_rect.CenterPoint(); |
| 463 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 5); |
| 464 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 465 EXPECT_TRUE(GetAndResetCaretMoved()); |
| 466 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5), GetLastCaretPosition()); |
| 467 |
| 468 // Deactivate touch selection to end dragging. |
| 469 controller().HideAndDisallowShowingAutomatically(); |
| 470 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_HANDLE_DRAG_STOPPED, |
| 471 INSERTION_HANDLE_CLEARED)); |
| 472 |
| 473 // Move the finger. There is no handle to move, so the cursor is not moved; |
| 474 // but, the event is still consumed because the touch down that started the |
| 475 // touch sequence was consumed. |
| 476 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 5, 5); |
| 477 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 478 EXPECT_FALSE(GetAndResetCaretMoved()); |
| 479 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5), GetLastCaretPosition()); |
| 480 |
| 481 // Lift the finger to end the touch sequence. |
| 482 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 5, 5); |
| 483 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 484 EXPECT_FALSE(GetAndResetCaretMoved()); |
| 485 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); |
| 486 |
| 487 // Following ACTION_DOWN should not be consumed if it does not start handle |
| 488 // dragging. |
| 489 SetDraggingEnabled(false); |
| 490 event = MockMotionEvent(MotionEvent::ACTION_DOWN, event_time, 0, 0); |
| 491 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); |
| 492 } |
| 493 |
| 437 TEST_F(TouchSelectionControllerTest, InsertionTapped) { | 494 TEST_F(TouchSelectionControllerTest, InsertionTapped) { |
| 438 base::TimeTicks event_time = base::TimeTicks::Now(); | 495 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 439 OnTapEvent(); | 496 OnTapEvent(); |
| 440 controller().OnSelectionEditable(true); | 497 controller().OnSelectionEditable(true); |
| 441 SetDraggingEnabled(true); | 498 SetDraggingEnabled(true); |
| 442 | 499 |
| 443 gfx::RectF start_rect(10, 0, 0, 10); | 500 gfx::RectF start_rect(10, 0, 0, 10); |
| 444 bool visible = true; | 501 bool visible = true; |
| 445 ChangeInsertion(start_rect, visible); | 502 ChangeInsertion(start_rect, visible); |
| 446 EXPECT_THAT(GetAndResetEvents(), | 503 EXPECT_THAT(GetAndResetEvents(), |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); | 764 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 708 EXPECT_TRUE(GetAndResetSelectionMoved()); | 765 EXPECT_TRUE(GetAndResetSelectionMoved()); |
| 709 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); | 766 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); |
| 710 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 5), GetLastSelectionEnd()); | 767 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 5), GetLastSelectionEnd()); |
| 711 | 768 |
| 712 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); | 769 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); |
| 713 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); | 770 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 714 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); | 771 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| 715 EXPECT_FALSE(GetAndResetSelectionMoved()); | 772 EXPECT_FALSE(GetAndResetSelectionMoved()); |
| 716 | 773 |
| 717 // Once the drag is complete, no more touch events should be consumed until | 774 // Following ACTION_DOWN should not be consumed if it does not start handle |
| 718 // the next ACTION_DOWN. | 775 // dragging. |
| 776 SetDraggingEnabled(false); |
| 777 event = MockMotionEvent(MotionEvent::ACTION_DOWN, event_time, 0, 0); |
| 719 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); | 778 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); |
| 720 } | 779 } |
| 721 | 780 |
| 722 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { | 781 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { |
| 723 base::TimeTicks event_time = base::TimeTicks::Now(); | 782 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 724 OnLongPressEvent(); | 783 OnLongPressEvent(); |
| 725 | 784 |
| 726 float line_height = 10.f; | 785 float line_height = 10.f; |
| 727 gfx::RectF start_rect(0, 0, 0, line_height); | 786 gfx::RectF start_rect(0, 0, 0, line_height); |
| 728 gfx::RectF end_rect(50, 0, 0, line_height); | 787 gfx::RectF end_rect(50, 0, 0, line_height); |
| (...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1444 offset_rect.x(), offset_rect.bottom()); | 1503 offset_rect.x(), offset_rect.bottom()); |
| 1445 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); | 1504 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); |
| 1446 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); | 1505 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_HANDLE_DRAG_STOPPED)); |
| 1447 EXPECT_EQ(test_controller.GetStartHandleOrientation(), | 1506 EXPECT_EQ(test_controller.GetStartHandleOrientation(), |
| 1448 TouchHandleOrientation::LEFT); | 1507 TouchHandleOrientation::LEFT); |
| 1449 EXPECT_EQ(test_controller.GetEndHandleOrientation(), | 1508 EXPECT_EQ(test_controller.GetEndHandleOrientation(), |
| 1450 TouchHandleOrientation::RIGHT); | 1509 TouchHandleOrientation::RIGHT); |
| 1451 } | 1510 } |
| 1452 | 1511 |
| 1453 } // namespace ui | 1512 } // namespace ui |
| OLD | NEW |