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

Side by Side Diff: ui/touch_selection/touch_selection_controller_unittest.cc

Issue 2355403002: Consume entire touch sequence in touch selection controller (Closed)
Patch Set: Added a TODO comment Created 4 years, 2 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 | « ui/touch_selection/touch_selection_controller.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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
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
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
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
OLDNEW
« no previous file with comments | « ui/touch_selection/touch_selection_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698