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

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

Issue 1087893003: Support longpress drag selection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Code review Created 5 years, 7 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
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 "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/events/test/motion_event_test_utils.h" 11 #include "ui/events/test/motion_event_test_utils.h"
12 12
13 using base::TimeTicks;
13 using testing::ElementsAre; 14 using testing::ElementsAre;
14 using testing::IsEmpty; 15 using testing::IsEmpty;
15 using ui::test::MockMotionEvent; 16 using ui::test::MockMotionEvent;
16 17
17 namespace ui { 18 namespace ui {
18 namespace { 19 namespace {
19 20
20 const int kDefaultTapTimeoutMs = 200; 21 const int kDefaultTapTimeoutMs = 200;
21 const float kDefaulTapSlop = 10.f; 22 const float kDefaulTapSlop = 10.f;
22 23
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 start_bound.set_type(SelectionBound::LEFT); 140 start_bound.set_type(SelectionBound::LEFT);
140 end_bound.set_type(SelectionBound::RIGHT); 141 end_bound.set_type(SelectionBound::RIGHT);
141 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left()); 142 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left());
142 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left()); 143 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left());
143 start_bound.set_visible(start_visible); 144 start_bound.set_visible(start_visible);
144 end_bound.set_visible(end_visible); 145 end_bound.set_visible(end_visible);
145 controller_->OnSelectionBoundsChanged(start_bound, end_bound); 146 controller_->OnSelectionBoundsChanged(start_bound, end_bound);
146 } 147 }
147 148
148 void Animate() { 149 void Animate() {
149 base::TimeTicks now = base::TimeTicks::Now(); 150 TimeTicks now = TimeTicks::Now();
150 while (needs_animate_) { 151 while (needs_animate_) {
151 needs_animate_ = controller_->Animate(now); 152 needs_animate_ = controller_->Animate(now);
152 now += base::TimeDelta::FromMilliseconds(16); 153 now += base::TimeDelta::FromMilliseconds(16);
153 } 154 }
154 } 155 }
155 156
156 bool GetAndResetNeedsAnimate() { 157 bool GetAndResetNeedsAnimate() {
157 bool needs_animate = needs_animate_; 158 bool needs_animate = needs_animate_;
158 Animate(); 159 Animate();
159 return needs_animate; 160 return needs_animate;
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 ChangeInsertion(insertion_rect, visible); 275 ChangeInsertion(insertion_rect, visible);
275 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 276 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
276 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 277 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
277 278
278 // Reset the selection. 279 // Reset the selection.
279 controller().HideAndDisallowShowingAutomatically(); 280 controller().HideAndDisallowShowingAutomatically();
280 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 281 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
281 282
282 // Long-pressing should show the handle even if the editable region is empty. 283 // Long-pressing should show the handle even if the editable region is empty.
283 insertion_rect.Offset(2, -2); 284 insertion_rect.Offset(2, -2);
284 controller().OnLongPressEvent(); 285 controller().OnLongPressEvent(TimeTicks::Now(), insertion_rect.bottom_left());
285 controller().OnSelectionEmpty(true); 286 controller().OnSelectionEmpty(true);
286 ChangeInsertion(insertion_rect, visible); 287 ChangeInsertion(insertion_rect, visible);
287 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 288 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
288 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 289 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
289 290
290 // Single Tap on an empty edit field should clear insertion handle. 291 // Single Tap on an empty edit field should clear insertion handle.
291 controller().OnTapEvent(); 292 controller().OnTapEvent();
292 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 293 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
293 } 294 }
294 295
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 333
333 // If the user taps the *same* position as the cursor at the end of the text 334 // If the user taps the *same* position as the cursor at the end of the text
334 // entry, the handle should appear. 335 // entry, the handle should appear.
335 controller().OnTapEvent(); 336 controller().OnTapEvent();
336 ChangeInsertion(insertion_rect, visible); 337 ChangeInsertion(insertion_rect, visible);
337 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 338 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
338 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 339 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
339 } 340 }
340 341
341 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { 342 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) {
342 controller().OnLongPressEvent(); 343 controller().OnLongPressEvent(TimeTicks::Now(), gfx::PointF());
343 controller().OnSelectionEditable(true); 344 controller().OnSelectionEditable(true);
344 345
345 gfx::RectF start_rect(5, 5, 0, 10); 346 gfx::RectF start_rect(5, 5, 0, 10);
346 gfx::RectF end_rect(50, 5, 0, 10); 347 gfx::RectF end_rect(50, 5, 0, 10);
347 bool visible = true; 348 bool visible = true;
348 349
349 ChangeInsertion(start_rect, visible); 350 ChangeInsertion(start_rect, visible);
350 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 351 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
351 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 352 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
352 353
353 ChangeSelection(start_rect, visible, end_rect, visible); 354 ChangeSelection(start_rect, visible, end_rect, visible);
354 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 355 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
355 SELECTION_SHOWN)); 356 SELECTION_SHOWN));
356 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 357 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
357 358
358 ChangeInsertion(end_rect, visible); 359 ChangeInsertion(end_rect, visible);
359 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED, 360 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED,
360 INSERTION_SHOWN)); 361 INSERTION_SHOWN));
361 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 362 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());
362 363
364 /*
363 controller().HideAndDisallowShowingAutomatically(); 365 controller().HideAndDisallowShowingAutomatically();
364 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 366 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
365 367
366 controller().OnTapEvent(); 368 controller().OnTapEvent();
367 ChangeInsertion(end_rect, visible); 369 ChangeInsertion(end_rect, visible);
368 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 370 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
369 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 371 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());*/
370 } 372 }
371 373
372 TEST_F(TouchSelectionControllerTest, InsertionDragged) { 374 TEST_F(TouchSelectionControllerTest, InsertionDragged) {
373 base::TimeTicks event_time = base::TimeTicks::Now(); 375 base::TimeTicks event_time = base::TimeTicks::Now();
374 controller().OnTapEvent(); 376 controller().OnTapEvent();
375 controller().OnSelectionEditable(true); 377 controller().OnSelectionEditable(true);
376 378
377 // The touch sequence should not be handled if insertion is not active. 379 // The touch sequence should not be handled if insertion is not active.
378 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 380 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
379 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 381 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 518 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
517 INSERTION_DRAG_STOPPED)); 519 INSERTION_DRAG_STOPPED));
518 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 520 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
519 521
520 anchor_rect.Offset(5, 15); 522 anchor_rect.Offset(5, 15);
521 ChangeInsertion(anchor_rect, visible); 523 ChangeInsertion(anchor_rect, visible);
522 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 524 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
523 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 525 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
524 526
525 // Pressing shouldn't reset the active insertion point. 527 // Pressing shouldn't reset the active insertion point.
526 controller().OnLongPressEvent(); 528 controller().OnLongPressEvent(TimeTicks::Now(), gfx::PointF());
527 controller().OnSelectionEmpty(true); 529 controller().OnSelectionEmpty(true);
528 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 530 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
529 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 531 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
530 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 532 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
531 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 533 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
532 534
533 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 535 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
534 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 536 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
535 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 537 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
536 INSERTION_DRAG_STOPPED)); 538 INSERTION_DRAG_STOPPED));
537 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 539 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
538 } 540 }
539 541
540 TEST_F(TouchSelectionControllerTest, SelectionBasic) { 542 TEST_F(TouchSelectionControllerTest, SelectionBasic) {
541 gfx::RectF start_rect(5, 5, 0, 10); 543 gfx::RectF start_rect(5, 5, 0, 10);
542 gfx::RectF end_rect(50, 5, 0, 10); 544 gfx::RectF end_rect(50, 5, 0, 10);
543 bool visible = true; 545 bool visible = true;
544 546
545 // Selection events are ignored until automatic showing is enabled. 547 // Selection events are ignored until automatic showing is enabled.
546 ChangeSelection(start_rect, visible, end_rect, visible); 548 ChangeSelection(start_rect, visible, end_rect, visible);
547 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 549 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
548 550
549 controller().OnLongPressEvent(); 551 controller().OnLongPressEvent(TimeTicks::Now(), start_rect.bottom_left());
550 ChangeSelection(start_rect, visible, end_rect, visible); 552 ChangeSelection(start_rect, visible, end_rect, visible);
551 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 553 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
552 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 554 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
553 555
554 start_rect.Offset(1, 0); 556 start_rect.Offset(1, 0);
555 ChangeSelection(start_rect, visible, end_rect, visible); 557 ChangeSelection(start_rect, visible, end_rect, visible);
556 // Selection movement does not currently trigger a separate event. 558 // Selection movement does not currently trigger a separate event.
557 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 559 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
558 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 560 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
559 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 561 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
560 562
561 ClearSelection(); 563 ClearSelection();
562 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 564 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
563 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 565 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
564 } 566 }
565 567
566 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) { 568 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) {
567 gfx::RectF start_rect(5, 5, 0, 10); 569 gfx::RectF start_rect(5, 5, 0, 10);
568 gfx::RectF end_rect(50, 5, 0, 10); 570 gfx::RectF end_rect(50, 5, 0, 10);
569 bool visible = true; 571 bool visible = true;
570 572
571 controller().OnLongPressEvent(); 573 controller().OnLongPressEvent(TimeTicks::Now(), start_rect.bottom_left());
572 ChangeSelection(start_rect, visible, end_rect, visible); 574 ChangeSelection(start_rect, visible, end_rect, visible);
573 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 575 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
574 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 576 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
575 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 577 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
576 578
577 // A long press triggering a new selection should re-send the SELECTION_SHOWN 579 // A long press triggering a new selection should re-send the SELECTION_SHOWN
578 // event notification. 580 // event notification.
579 start_rect.Offset(10, 10); 581 start_rect.Offset(10, 10);
580 controller().OnLongPressEvent(); 582 controller().OnLongPressEvent(TimeTicks::Now(), start_rect.bottom_left());
581 ChangeSelection(start_rect, visible, end_rect, visible); 583 ChangeSelection(start_rect, visible, end_rect, visible);
582 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 584 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
583 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 585 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
584 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 586 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
585 } 587 }
586 588
587 TEST_F(TouchSelectionControllerTest, SelectionDragged) { 589 TEST_F(TouchSelectionControllerTest, SelectionDragged) {
588 base::TimeTicks event_time = base::TimeTicks::Now(); 590 base::TimeTicks event_time = base::TimeTicks::Now();
589 controller().OnLongPressEvent(); 591 controller().OnLongPressEvent(event_time, gfx::PointF());
590 592
591 // The touch sequence should not be handled if selection is not active. 593 // The touch sequence should not be handled if selection is not active.
592 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 594 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
593 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 595 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
594 596
595 float line_height = 10.f; 597 float line_height = 10.f;
596 gfx::RectF start_rect(0, 0, 0, line_height); 598 gfx::RectF start_rect(0, 0, 0, line_height);
597 gfx::RectF end_rect(50, 0, 0, line_height); 599 gfx::RectF end_rect(50, 0, 0, line_height);
598 bool visible = true; 600 bool visible = true;
599 ChangeSelection(start_rect, visible, end_rect, visible); 601 ChangeSelection(start_rect, visible, end_rect, visible);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 639 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
638 EXPECT_FALSE(GetAndResetSelectionMoved()); 640 EXPECT_FALSE(GetAndResetSelectionMoved());
639 641
640 // Once the drag is complete, no more touch events should be consumed until 642 // Once the drag is complete, no more touch events should be consumed until
641 // the next ACTION_DOWN. 643 // the next ACTION_DOWN.
642 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 644 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
643 } 645 }
644 646
645 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { 647 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) {
646 base::TimeTicks event_time = base::TimeTicks::Now(); 648 base::TimeTicks event_time = base::TimeTicks::Now();
647 controller().OnLongPressEvent(); 649 controller().OnLongPressEvent(event_time, gfx::PointF());
648 650
649 float line_height = 10.f; 651 float line_height = 10.f;
650 gfx::RectF start_rect(0, 0, 0, line_height); 652 gfx::RectF start_rect(0, 0, 0, line_height);
651 gfx::RectF end_rect(50, 0, 0, line_height); 653 gfx::RectF end_rect(50, 0, 0, line_height);
652 bool visible = true; 654 bool visible = true;
653 ChangeSelection(start_rect, visible, end_rect, visible); 655 ChangeSelection(start_rect, visible, end_rect, visible);
654 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 656 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
655 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 657 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
656 658
657 // The ACTION_DOWN should lock to the closest handle. 659 // The ACTION_DOWN should lock to the closest handle.
(...skipping 17 matching lines...) Expand all
675 GetLastSelectionEnd()); 677 GetLastSelectionEnd());
676 678
677 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 679 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
678 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 680 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
679 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 681 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
680 EXPECT_FALSE(GetAndResetSelectionMoved()); 682 EXPECT_FALSE(GetAndResetSelectionMoved());
681 } 683 }
682 684
683 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) { 685 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) {
684 base::TimeTicks event_time = base::TimeTicks::Now(); 686 base::TimeTicks event_time = base::TimeTicks::Now();
685 controller().OnLongPressEvent(); 687 controller().OnLongPressEvent(event_time, gfx::PointF());
686 688
687 float line_height = 10.f; 689 float line_height = 10.f;
688 gfx::RectF start_rect(50, line_height, 0, line_height); 690 gfx::RectF start_rect(50, line_height, 0, line_height);
689 gfx::RectF end_rect(100, line_height, 0, line_height); 691 gfx::RectF end_rect(100, line_height, 0, line_height);
690 bool visible = true; 692 bool visible = true;
691 ChangeSelection(start_rect, visible, end_rect, visible); 693 ChangeSelection(start_rect, visible, end_rect, visible);
692 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 694 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
693 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 695 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
694 696
695 SetDraggingEnabled(true); 697 SetDraggingEnabled(true);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 796 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd());
795 797
796 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 798 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
797 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 799 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
798 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 800 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
799 EXPECT_FALSE(GetAndResetSelectionMoved()); 801 EXPECT_FALSE(GetAndResetSelectionMoved());
800 } 802 }
801 803
802 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) { 804 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) {
803 base::TimeTicks event_time = base::TimeTicks::Now(); 805 base::TimeTicks event_time = base::TimeTicks::Now();
804 controller().OnLongPressEvent(); 806 controller().OnLongPressEvent(event_time, gfx::PointF());
805 807
806 float small_line_height = 1.f; 808 float small_line_height = 1.f;
807 float large_line_height = 50.f; 809 float large_line_height = 50.f;
808 gfx::RectF small_line_rect(0, 0, 0, small_line_height); 810 gfx::RectF small_line_rect(0, 0, 0, small_line_height);
809 gfx::RectF large_line_rect(50, 50, 0, large_line_height); 811 gfx::RectF large_line_rect(50, 50, 0, large_line_height);
810 bool visible = true; 812 bool visible = true;
811 ChangeSelection(small_line_rect, visible, large_line_rect, visible); 813 ChangeSelection(small_line_rect, visible, large_line_rect, visible);
812 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 814 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
813 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart()); 815 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart());
814 816
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 889
888 controller().SetTemporarilyHidden(false); 890 controller().SetTemporarilyHidden(false);
889 EXPECT_TRUE(GetAndResetNeedsAnimate()); 891 EXPECT_TRUE(GetAndResetNeedsAnimate());
890 } 892 }
891 893
892 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) { 894 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) {
893 gfx::RectF start_rect(5, 5, 0, 10); 895 gfx::RectF start_rect(5, 5, 0, 10);
894 gfx::RectF end_rect(50, 5, 0, 10); 896 gfx::RectF end_rect(50, 5, 0, 10);
895 bool visible = true; 897 bool visible = true;
896 898
897 controller().OnLongPressEvent(); 899 controller().OnLongPressEvent(TimeTicks::Now(), start_rect.bottom_left());
898 ChangeSelection(start_rect, visible, end_rect, visible); 900 ChangeSelection(start_rect, visible, end_rect, visible);
899 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 901 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
900 902
901 // Selection should not be cleared if the selection bounds have not changed. 903 // Selection should not be cleared if the selection bounds have not changed.
902 controller().OnTapEvent(); 904 controller().OnTapEvent();
903 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 905 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
904 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 906 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
905 907
906 controller().OnTapEvent(); 908 controller().OnTapEvent();
907 ClearSelection(); 909 ClearSelection();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 controller().OnSelectionEmpty(false); 941 controller().OnSelectionEmpty(false);
940 controller().HideAndDisallowShowingAutomatically(); 942 controller().HideAndDisallowShowingAutomatically();
941 gfx::RectF insertion_rect(5, 5, 0, 10); 943 gfx::RectF insertion_rect(5, 5, 0, 10);
942 ChangeInsertion(insertion_rect, visible); 944 ChangeInsertion(insertion_rect, visible);
943 controller().AllowShowingFromCurrentSelection(); 945 controller().AllowShowingFromCurrentSelection();
944 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 946 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
945 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 947 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
946 } 948 }
947 949
948 } // namespace ui 950 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698