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

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

Issue 698253004: Reland: Implement Aura side of unified touch text selection for contents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed test failures on Mac 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"
(...skipping 18 matching lines...) Expand all
29 void SetOrientation(TouchHandleOrientation orientation) override {} 29 void SetOrientation(TouchHandleOrientation orientation) override {}
30 void SetAlpha(float alpha) override {} 30 void SetAlpha(float alpha) override {}
31 void SetFocus(const gfx::PointF& position) override {} 31 void SetFocus(const gfx::PointF& position) override {}
32 gfx::RectF GetVisibleBounds() const override { 32 gfx::RectF GetVisibleBounds() const override {
33 return *intersects_rect_ ? gfx::RectF(-1000, -1000, 2000, 2000) 33 return *intersects_rect_ ? gfx::RectF(-1000, -1000, 2000, 2000)
34 : gfx::RectF(-1000, -1000, 0, 0); 34 : gfx::RectF(-1000, -1000, 0, 0);
35 } 35 }
36 36
37 private: 37 private:
38 bool* intersects_rect_; 38 bool* intersects_rect_;
39
40 DISALLOW_COPY_AND_ASSIGN(MockTouchHandleDrawable);
39 }; 41 };
40 42
41 } // namespace 43 } // namespace
42 44
43 class TouchSelectionControllerTest : public testing::Test, 45 class TouchSelectionControllerTest : public testing::Test,
44 public TouchSelectionControllerClient { 46 public TouchSelectionControllerClient {
45 public: 47 public:
46 TouchSelectionControllerTest() 48 TouchSelectionControllerTest()
47 : caret_moved_(false), 49 : caret_moved_(false),
48 selection_moved_(false), 50 selection_moved_(false),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 void OnSelectionEvent(SelectionEventType event) override { 99 void OnSelectionEvent(SelectionEventType event) override {
98 events_.push_back(event); 100 events_.push_back(event);
99 last_event_start_ = controller_->GetStartPosition(); 101 last_event_start_ = controller_->GetStartPosition();
100 last_event_end_ = controller_->GetEndPosition(); 102 last_event_end_ = controller_->GetEndPosition();
101 } 103 }
102 104
103 scoped_ptr<TouchHandleDrawable> CreateDrawable() override { 105 scoped_ptr<TouchHandleDrawable> CreateDrawable() override {
104 return make_scoped_ptr(new MockTouchHandleDrawable(&dragging_enabled_)); 106 return make_scoped_ptr(new MockTouchHandleDrawable(&dragging_enabled_));
105 } 107 }
106 108
109 void OnScrollStarted() override {}
110 void OnScrollCompleted() override {}
111
107 void AllowShowingOnTapForEmptyEditable() { 112 void AllowShowingOnTapForEmptyEditable() {
108 bool show_on_tap_for_empty_editable = true; 113 bool show_on_tap_for_empty_editable = true;
109 controller_.reset(new TouchSelectionController( 114 controller_.reset(new TouchSelectionController(
110 this, 115 this,
111 base::TimeDelta::FromMilliseconds(kDefaultTapTimeoutMs), 116 base::TimeDelta::FromMilliseconds(kDefaultTapTimeoutMs),
112 kDefaulTapSlop, 117 kDefaulTapSlop,
113 show_on_tap_for_empty_editable)); 118 show_on_tap_for_empty_editable));
114 } 119 }
115 120
116 void SetAnimationEnabled(bool enabled) { animation_enabled_ = enabled; } 121 void SetAnimationEnabled(bool enabled) { animation_enabled_ = enabled; }
117 void SetDraggingEnabled(bool enabled) { dragging_enabled_ = enabled; } 122 void SetDraggingEnabled(bool enabled) { dragging_enabled_ = enabled; }
118 123
119 void ClearSelection() { 124 bool ClearSelection() {
120 controller_->OnSelectionBoundsChanged(SelectionBound(), 125 return controller_->OnSelectionBoundsUpdated(SelectionBound(),
121 SelectionBound()); 126 SelectionBound());
122 } 127 }
123 128
124 void ClearInsertion() { ClearSelection(); } 129 bool ClearInsertion() { return ClearSelection(); }
125 130
126 void ChangeInsertion(const gfx::RectF& rect, bool visible) { 131 bool ChangeInsertion(const gfx::RectF& rect, bool visible) {
127 SelectionBound bound; 132 SelectionBound bound;
128 bound.set_type(SelectionBound::CENTER); 133 bound.set_type(SelectionBound::CENTER);
129 bound.SetEdge(rect.origin(), rect.bottom_left()); 134 bound.SetEdge(rect.origin(), rect.bottom_left());
130 bound.set_visible(visible); 135 bound.set_visible(visible);
131 controller_->OnSelectionBoundsChanged(bound, bound); 136 return controller_->OnSelectionBoundsUpdated(bound, bound);
132 } 137 }
133 138
134 void ChangeSelection(const gfx::RectF& start_rect, 139 bool ChangeSelection(const gfx::RectF& start_rect,
135 bool start_visible, 140 bool start_visible,
136 const gfx::RectF& end_rect, 141 const gfx::RectF& end_rect,
137 bool end_visible) { 142 bool end_visible) {
138 SelectionBound start_bound, end_bound; 143 SelectionBound start_bound, end_bound;
139 start_bound.set_type(SelectionBound::LEFT); 144 start_bound.set_type(SelectionBound::LEFT);
140 end_bound.set_type(SelectionBound::RIGHT); 145 end_bound.set_type(SelectionBound::RIGHT);
141 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left()); 146 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left());
142 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left()); 147 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left());
143 start_bound.set_visible(start_visible); 148 start_bound.set_visible(start_visible);
144 end_bound.set_visible(end_visible); 149 end_bound.set_visible(end_visible);
145 controller_->OnSelectionBoundsChanged(start_bound, end_bound); 150 return controller_->OnSelectionBoundsUpdated(start_bound, end_bound);
146 } 151 }
147 152
148 void Animate() { 153 void Animate() {
149 base::TimeTicks now = base::TimeTicks::Now(); 154 base::TimeTicks now = base::TimeTicks::Now();
150 while (needs_animate_) { 155 while (needs_animate_) {
151 needs_animate_ = controller_->Animate(now); 156 needs_animate_ = controller_->Animate(now);
152 now += base::TimeDelta::FromMilliseconds(16); 157 now += base::TimeDelta::FromMilliseconds(16);
153 } 158 }
154 } 159 }
155 160
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 gfx::PointF selection_start_; 203 gfx::PointF selection_start_;
199 gfx::PointF selection_end_; 204 gfx::PointF selection_end_;
200 std::vector<SelectionEventType> events_; 205 std::vector<SelectionEventType> events_;
201 bool caret_moved_; 206 bool caret_moved_;
202 bool selection_moved_; 207 bool selection_moved_;
203 bool selection_points_swapped_; 208 bool selection_points_swapped_;
204 bool needs_animate_; 209 bool needs_animate_;
205 bool animation_enabled_; 210 bool animation_enabled_;
206 bool dragging_enabled_; 211 bool dragging_enabled_;
207 scoped_ptr<TouchSelectionController> controller_; 212 scoped_ptr<TouchSelectionController> controller_;
213
214 DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerTest);
208 }; 215 };
209 216
210 TEST_F(TouchSelectionControllerTest, InsertionBasic) { 217 TEST_F(TouchSelectionControllerTest, InsertionBasic) {
211 gfx::RectF insertion_rect(5, 5, 0, 10); 218 gfx::RectF insertion_rect(5, 5, 0, 10);
212 bool visible = true; 219 bool visible = true;
213 220
214 // Insertion events are ignored until automatic showing is enabled. 221 // Insertion events are ignored until automatic showing is enabled.
215 ChangeInsertion(insertion_rect, visible); 222 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
216 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 223 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
217 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 224 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
218 controller().OnTapEvent(); 225 controller().OnTapEvent();
219 226
220 // Insertion events are ignored until the selection region is marked editable. 227 // Insertion events are ignored until the selection region is marked editable.
221 ChangeInsertion(insertion_rect, visible); 228 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
222 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 229 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
223 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 230 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
224 231
225 controller().OnTapEvent(); 232 controller().OnTapEvent();
226 controller().OnSelectionEditable(true); 233 controller().OnSelectionEditable(true);
227 ChangeInsertion(insertion_rect, visible); 234 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
228 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 235 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
229 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 236 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
230 237
231 insertion_rect.Offset(1, 0); 238 insertion_rect.Offset(1, 0);
232 ChangeInsertion(insertion_rect, visible); 239 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
233 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 240 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
234 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 241 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
235 242
236 insertion_rect.Offset(0, 1); 243 insertion_rect.Offset(0, 1);
237 ChangeInsertion(insertion_rect, visible); 244 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
238 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 245 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
239 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 246 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
240 247
241 ClearInsertion(); 248 EXPECT_TRUE(ClearInsertion());
242 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 249 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
243 } 250 }
244 251
245 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) { 252 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) {
246 gfx::RectF insertion_rect(5, 5, 0, 10); 253 gfx::RectF insertion_rect(5, 5, 0, 10);
247 bool visible = true; 254 bool visible = true;
248 controller().OnTapEvent(); 255 controller().OnTapEvent();
249 controller().OnSelectionEditable(true); 256 controller().OnSelectionEditable(true);
250 257
251 ChangeInsertion(insertion_rect, visible); 258 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
252 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 259 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
253 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 260 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
254 261
255 controller().OnSelectionEditable(false); 262 controller().OnSelectionEditable(false);
256 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 263 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
257 } 264 }
258 265
259 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) { 266 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) {
260 gfx::RectF insertion_rect(5, 5, 0, 10); 267 gfx::RectF insertion_rect(5, 5, 0, 10);
261 bool visible = true; 268 bool visible = true;
262 controller().OnSelectionEditable(true); 269 controller().OnSelectionEditable(true);
263 270
264 // Taps on an empty editable region should be ignored if the controller is 271 // Taps on an empty editable region should be ignored if the controller is
265 // created with |show_on_tap_for_empty_editable| set to false. 272 // created with |show_on_tap_for_empty_editable| set to false.
266 controller().OnTapEvent(); 273 controller().OnTapEvent();
267 controller().OnSelectionEmpty(true); 274 controller().OnSelectionEmpty(true);
268 ChangeInsertion(insertion_rect, visible); 275 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
269 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 276 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
270 277
271 // Once the region becomes non-empty, taps should show the insertion handle. 278 // Once the region becomes non-empty, taps should show the insertion handle.
272 controller().OnTapEvent(); 279 controller().OnTapEvent();
273 controller().OnSelectionEmpty(false); 280 controller().OnSelectionEmpty(false);
274 ChangeInsertion(insertion_rect, visible); 281 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
275 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 282 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
276 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 283 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
277 284
278 // Reset the selection. 285 // Reset the selection.
279 controller().HideAndDisallowShowingAutomatically(); 286 controller().HideAndDisallowShowingAutomatically();
280 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 287 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
281 288
282 // Long-pressing should show the handle even if the editable region is empty. 289 // Long-pressing should show the handle even if the editable region is empty.
283 insertion_rect.Offset(2, -2); 290 insertion_rect.Offset(2, -2);
284 controller().OnLongPressEvent(); 291 controller().OnLongPressEvent();
285 controller().OnSelectionEmpty(true); 292 controller().OnSelectionEmpty(true);
286 ChangeInsertion(insertion_rect, visible); 293 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
287 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 294 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
288 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 295 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
289 296
290 // Single Tap on an empty edit field should clear insertion handle. 297 // Single Tap on an empty edit field should clear insertion handle.
291 controller().OnTapEvent(); 298 controller().OnTapEvent();
292 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 299 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
293 } 300 }
294 301
295 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) { 302 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) {
296 AllowShowingOnTapForEmptyEditable(); 303 AllowShowingOnTapForEmptyEditable();
297 304
298 gfx::RectF insertion_rect(5, 5, 0, 10); 305 gfx::RectF insertion_rect(5, 5, 0, 10);
299 bool visible = true; 306 bool visible = true;
300 controller().OnSelectionEditable(true); 307 controller().OnSelectionEditable(true);
301 308
302 // Taps on an empty editable region should show the insertion handle if the 309 // Taps on an empty editable region should show the insertion handle if the
303 // controller is created with |show_on_tap_for_empty_editable| set to true. 310 // controller is created with |show_on_tap_for_empty_editable| set to true.
304 controller().OnTapEvent(); 311 controller().OnTapEvent();
305 controller().OnSelectionEmpty(true); 312 controller().OnSelectionEmpty(true);
306 ChangeInsertion(insertion_rect, visible); 313 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
307 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 314 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
308 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 315 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
309 316
310 // Additional taps should not hide the insertion handle in this case. 317 // Additional taps should not hide the insertion handle in this case.
311 controller().OnTapEvent(); 318 controller().OnTapEvent();
312 ChangeInsertion(insertion_rect, visible); 319 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
313 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 320 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
314 } 321 }
315 322
316 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) { 323 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) {
317 gfx::RectF insertion_rect(5, 5, 0, 10); 324 gfx::RectF insertion_rect(5, 5, 0, 10);
318 bool visible = true; 325 bool visible = true;
319 326
320 // Simulate the user tapping an empty text field. 327 // Simulate the user tapping an empty text field.
321 controller().OnTapEvent(); 328 controller().OnTapEvent();
322 controller().OnSelectionEditable(true); 329 controller().OnSelectionEditable(true);
323 controller().OnSelectionEmpty(true); 330 controller().OnSelectionEmpty(true);
324 ChangeInsertion(insertion_rect, visible); 331 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
325 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 332 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
326 333
327 // Simulate the cursor moving while a user is typing. 334 // Simulate the cursor moving while a user is typing.
328 insertion_rect.Offset(10, 0); 335 insertion_rect.Offset(10, 0);
329 controller().OnSelectionEmpty(false); 336 controller().OnSelectionEmpty(false);
330 ChangeInsertion(insertion_rect, visible); 337 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
331 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 338 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
332 339
333 // If the user taps the *same* position as the cursor at the end of the text 340 // If the user taps the *same* position as the cursor at the end of the text
334 // entry, the handle should appear. 341 // entry, the handle should appear.
335 controller().OnTapEvent(); 342 controller().OnTapEvent();
336 ChangeInsertion(insertion_rect, visible); 343 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
337 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 344 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
338 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 345 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
339 } 346 }
340 347
341 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { 348 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) {
342 controller().OnLongPressEvent(); 349 controller().OnLongPressEvent();
343 controller().OnSelectionEditable(true); 350 controller().OnSelectionEditable(true);
344 351
345 gfx::RectF start_rect(5, 5, 0, 10); 352 gfx::RectF start_rect(5, 5, 0, 10);
346 gfx::RectF end_rect(50, 5, 0, 10); 353 gfx::RectF end_rect(50, 5, 0, 10);
347 bool visible = true; 354 bool visible = true;
348 355
349 ChangeInsertion(start_rect, visible); 356 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
350 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 357 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
351 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 358 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
352 359
353 ChangeSelection(start_rect, visible, end_rect, visible); 360 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
354 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 361 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
355 SELECTION_SHOWN)); 362 SELECTION_SHOWN));
356 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 363 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
357 364
358 ChangeInsertion(end_rect, visible); 365 EXPECT_TRUE(ChangeInsertion(end_rect, visible));
359 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED, 366 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED,
360 INSERTION_SHOWN)); 367 INSERTION_SHOWN));
361 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 368 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());
362 369
363 controller().HideAndDisallowShowingAutomatically(); 370 controller().HideAndDisallowShowingAutomatically();
364 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 371 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
365 372
366 controller().OnTapEvent(); 373 controller().OnTapEvent();
367 ChangeInsertion(end_rect, visible); 374 EXPECT_TRUE(ChangeInsertion(end_rect, visible));
368 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 375 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
369 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 376 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());
370 } 377 }
371 378
372 TEST_F(TouchSelectionControllerTest, InsertionDragged) { 379 TEST_F(TouchSelectionControllerTest, InsertionDragged) {
373 base::TimeTicks event_time = base::TimeTicks::Now(); 380 base::TimeTicks event_time = base::TimeTicks::Now();
374 controller().OnTapEvent(); 381 controller().OnTapEvent();
375 controller().OnSelectionEditable(true); 382 controller().OnSelectionEditable(true);
376 383
377 // The touch sequence should not be handled if insertion is not active. 384 // The touch sequence should not be handled if insertion is not active.
378 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 385 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
379 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 386 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
380 387
381 float line_height = 10.f; 388 float line_height = 10.f;
382 gfx::RectF start_rect(10, 0, 0, line_height); 389 gfx::RectF start_rect(10, 0, 0, line_height);
383 bool visible = true; 390 bool visible = true;
384 ChangeInsertion(start_rect, visible); 391 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
385 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 392 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
386 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 393 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
387 394
388 // The touch sequence should be handled only if the drawable reports a hit. 395 // The touch sequence should be handled only if the drawable reports a hit.
389 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 396 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
390 SetDraggingEnabled(true); 397 SetDraggingEnabled(true);
391 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 398 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
392 EXPECT_FALSE(GetAndResetCaretMoved()); 399 EXPECT_FALSE(GetAndResetCaretMoved());
393 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 400 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
394 401
(...skipping 26 matching lines...) Expand all
421 } 428 }
422 429
423 TEST_F(TouchSelectionControllerTest, InsertionTapped) { 430 TEST_F(TouchSelectionControllerTest, InsertionTapped) {
424 base::TimeTicks event_time = base::TimeTicks::Now(); 431 base::TimeTicks event_time = base::TimeTicks::Now();
425 controller().OnTapEvent(); 432 controller().OnTapEvent();
426 controller().OnSelectionEditable(true); 433 controller().OnSelectionEditable(true);
427 SetDraggingEnabled(true); 434 SetDraggingEnabled(true);
428 435
429 gfx::RectF start_rect(10, 0, 0, 10); 436 gfx::RectF start_rect(10, 0, 0, 10);
430 bool visible = true; 437 bool visible = true;
431 ChangeInsertion(start_rect, visible); 438 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
432 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 439 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
433 440
434 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 441 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
435 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 442 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
436 //TODO(AKV): this test case has to be modified once crbug.com/394093 is fixed.
437 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 443 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
438 444
439 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 445 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
440 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 446 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
441 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 447 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
442 INSERTION_DRAG_STOPPED)); 448 INSERTION_DRAG_STOPPED));
443 449
444 // Reset the insertion. 450 // Reset the insertion.
445 ClearInsertion(); 451 EXPECT_TRUE(ClearInsertion());
446 controller().OnTapEvent(); 452 controller().OnTapEvent();
447 ChangeInsertion(start_rect, visible); 453 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
448 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 454 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
449 INSERTION_SHOWN)); 455 INSERTION_SHOWN));
450 456
451 // No tap should be signalled if the time between DOWN and UP was too long. 457 // No tap should be signalled if the time between DOWN and UP was too long.
452 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 458 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
453 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 459 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
454 event = MockMotionEvent(MockMotionEvent::ACTION_UP, 460 event = MockMotionEvent(MockMotionEvent::ACTION_UP,
455 event_time + base::TimeDelta::FromSeconds(1), 461 event_time + base::TimeDelta::FromSeconds(1),
456 0, 462 0,
457 0); 463 0);
458 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 464 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
459 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 465 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
460 INSERTION_DRAG_STOPPED)); 466 INSERTION_DRAG_STOPPED));
461 467
462 // Reset the insertion. 468 // Reset the insertion.
463 ClearInsertion(); 469 EXPECT_TRUE(ClearInsertion());
464 controller().OnTapEvent(); 470 controller().OnTapEvent();
465 ChangeInsertion(start_rect, visible); 471 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
466 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 472 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
467 INSERTION_SHOWN)); 473 INSERTION_SHOWN));
468 474
469 // No tap should be signalled if the drag was too long. 475 // No tap should be signalled if the drag was too long.
470 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 476 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
471 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 477 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
472 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0); 478 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0);
473 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 479 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
474 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0); 480 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0);
475 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 481 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
476 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 482 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
477 INSERTION_DRAG_STOPPED)); 483 INSERTION_DRAG_STOPPED));
478 484
479 // Reset the insertion. 485 // Reset the insertion.
480 ClearInsertion(); 486 EXPECT_TRUE(ClearInsertion());
481 controller().OnTapEvent(); 487 controller().OnTapEvent();
482 ChangeInsertion(start_rect, visible); 488 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
483 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 489 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
484 INSERTION_SHOWN)); 490 INSERTION_SHOWN));
485 491
486 // No tap should be signalled if the touch sequence is cancelled. 492 // No tap should be signalled if the touch sequence is cancelled.
487 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 493 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
488 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 494 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
489 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0); 495 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0);
490 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 496 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
491 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 497 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
492 INSERTION_DRAG_STOPPED)); 498 INSERTION_DRAG_STOPPED));
493 } 499 }
494 500
495 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) { 501 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) {
496 base::TimeTicks event_time = base::TimeTicks::Now(); 502 base::TimeTicks event_time = base::TimeTicks::Now();
497 controller().OnTapEvent(); 503 controller().OnTapEvent();
498 controller().OnSelectionEditable(true); 504 controller().OnSelectionEditable(true);
499 SetDraggingEnabled(true); 505 SetDraggingEnabled(true);
500 506
501 gfx::RectF anchor_rect(10, 0, 0, 10); 507 gfx::RectF anchor_rect(10, 0, 0, 10);
502 bool visible = true; 508 bool visible = true;
503 ChangeInsertion(anchor_rect, visible); 509 EXPECT_TRUE(ChangeInsertion(anchor_rect, visible));
504 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 510 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
505 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 511 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
506 512
507 // Tapping again shouldn't reset the active insertion point. 513 // Tapping again shouldn't reset the active insertion point.
508 controller().OnTapEvent(); 514 controller().OnTapEvent();
509 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 515 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
510 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 516 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
511 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 517 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
512 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 518 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
513 519
514 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 520 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
515 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 521 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
516 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 522 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
517 INSERTION_DRAG_STOPPED)); 523 INSERTION_DRAG_STOPPED));
518 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 524 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
519 525
520 anchor_rect.Offset(5, 15); 526 anchor_rect.Offset(5, 15);
521 ChangeInsertion(anchor_rect, visible); 527 EXPECT_TRUE(ChangeInsertion(anchor_rect, visible));
522 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 528 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
523 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 529 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
524 530
525 // Pressing shouldn't reset the active insertion point. 531 // Pressing shouldn't reset the active insertion point.
526 controller().OnLongPressEvent(); 532 controller().OnLongPressEvent();
527 controller().OnSelectionEmpty(true); 533 controller().OnSelectionEmpty(true);
528 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 534 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
529 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 535 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
530 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 536 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
531 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 537 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
532 538
533 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 539 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
534 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 540 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
535 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 541 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
536 INSERTION_DRAG_STOPPED)); 542 INSERTION_DRAG_STOPPED));
537 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 543 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
538 } 544 }
539 545
540 TEST_F(TouchSelectionControllerTest, SelectionBasic) { 546 TEST_F(TouchSelectionControllerTest, SelectionBasic) {
541 gfx::RectF start_rect(5, 5, 0, 10); 547 gfx::RectF start_rect(5, 5, 0, 10);
542 gfx::RectF end_rect(50, 5, 0, 10); 548 gfx::RectF end_rect(50, 5, 0, 10);
543 bool visible = true; 549 bool visible = true;
544 550
545 // Selection events are ignored until automatic showing is enabled. 551 // Selection events are ignored until automatic showing is enabled.
546 ChangeSelection(start_rect, visible, end_rect, visible); 552 EXPECT_FALSE(ChangeSelection(start_rect, visible, end_rect, visible));
547 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 553 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
548 554
549 controller().OnLongPressEvent(); 555 controller().OnLongPressEvent();
550 ChangeSelection(start_rect, visible, end_rect, visible); 556 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
551 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 557 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
552 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 558 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
553 559
554 start_rect.Offset(1, 0); 560 start_rect.Offset(1, 0);
555 ChangeSelection(start_rect, visible, end_rect, visible); 561 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
556 // Selection movement does not currently trigger a separate event. 562 // Selection movement does not currently trigger a separate event.
557 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 563 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
558 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 564 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
559 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 565 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
560 566
561 ClearSelection(); 567 EXPECT_TRUE(ClearSelection());
562 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 568 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
563 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 569 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
564 } 570 }
565 571
566 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) { 572 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) {
567 gfx::RectF start_rect(5, 5, 0, 10); 573 gfx::RectF start_rect(5, 5, 0, 10);
568 gfx::RectF end_rect(50, 5, 0, 10); 574 gfx::RectF end_rect(50, 5, 0, 10);
569 bool visible = true; 575 bool visible = true;
570 576
571 controller().OnLongPressEvent(); 577 controller().OnLongPressEvent();
572 ChangeSelection(start_rect, visible, end_rect, visible); 578 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
573 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 579 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
574 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 580 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
575 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 581 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
576 582
577 // A long press triggering a new selection should re-send the SELECTION_SHOWN 583 // A long press triggering a new selection should re-send the SELECTION_SHOWN
578 // event notification. 584 // event notification.
579 start_rect.Offset(10, 10); 585 start_rect.Offset(10, 10);
580 controller().OnLongPressEvent(); 586 controller().OnLongPressEvent();
581 ChangeSelection(start_rect, visible, end_rect, visible); 587 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
582 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 588 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
583 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 589 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
584 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 590 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
585 } 591 }
586 592
587 TEST_F(TouchSelectionControllerTest, SelectionDragged) { 593 TEST_F(TouchSelectionControllerTest, SelectionDragged) {
588 base::TimeTicks event_time = base::TimeTicks::Now(); 594 base::TimeTicks event_time = base::TimeTicks::Now();
589 controller().OnLongPressEvent(); 595 controller().OnLongPressEvent();
590 596
591 // The touch sequence should not be handled if selection is not active. 597 // The touch sequence should not be handled if selection is not active.
592 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 598 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
593 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 599 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
594 600
595 float line_height = 10.f; 601 float line_height = 10.f;
596 gfx::RectF start_rect(0, 0, 0, line_height); 602 gfx::RectF start_rect(0, 0, 0, line_height);
597 gfx::RectF end_rect(50, 0, 0, line_height); 603 gfx::RectF end_rect(50, 0, 0, line_height);
598 bool visible = true; 604 bool visible = true;
599 ChangeSelection(start_rect, visible, end_rect, visible); 605 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
600 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 606 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
601 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 607 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
602 608
603 // The touch sequence should be handled only if the drawable reports a hit. 609 // The touch sequence should be handled only if the drawable reports a hit.
604 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 610 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
605 SetDraggingEnabled(true); 611 SetDraggingEnabled(true);
606 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 612 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
607 EXPECT_FALSE(GetAndResetSelectionMoved()); 613 EXPECT_FALSE(GetAndResetSelectionMoved());
608 614
609 // The SelectBetweenCoordinates() result should reflect the movement. Note 615 // The SelectBetweenCoordinates() result should reflect the movement. Note
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 } 649 }
644 650
645 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { 651 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) {
646 base::TimeTicks event_time = base::TimeTicks::Now(); 652 base::TimeTicks event_time = base::TimeTicks::Now();
647 controller().OnLongPressEvent(); 653 controller().OnLongPressEvent();
648 654
649 float line_height = 10.f; 655 float line_height = 10.f;
650 gfx::RectF start_rect(0, 0, 0, line_height); 656 gfx::RectF start_rect(0, 0, 0, line_height);
651 gfx::RectF end_rect(50, 0, 0, line_height); 657 gfx::RectF end_rect(50, 0, 0, line_height);
652 bool visible = true; 658 bool visible = true;
653 ChangeSelection(start_rect, visible, end_rect, visible); 659 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
654 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 660 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
655 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 661 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
656 662
657 // The ACTION_DOWN should lock to the closest handle. 663 // The ACTION_DOWN should lock to the closest handle.
658 gfx::PointF end_offset = end_rect.CenterPoint(); 664 gfx::PointF end_offset = end_rect.CenterPoint();
659 gfx::PointF fixed_offset = start_rect.CenterPoint(); 665 gfx::PointF fixed_offset = start_rect.CenterPoint();
660 float touch_down_x = (end_offset.x() + fixed_offset.x()) / 2 + 1.f; 666 float touch_down_x = (end_offset.x() + fixed_offset.x()) / 2 + 1.f;
661 MockMotionEvent event( 667 MockMotionEvent event(
662 MockMotionEvent::ACTION_DOWN, event_time, touch_down_x, 0); 668 MockMotionEvent::ACTION_DOWN, event_time, touch_down_x, 0);
663 SetDraggingEnabled(true); 669 SetDraggingEnabled(true);
(...skipping 17 matching lines...) Expand all
681 } 687 }
682 688
683 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) { 689 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) {
684 base::TimeTicks event_time = base::TimeTicks::Now(); 690 base::TimeTicks event_time = base::TimeTicks::Now();
685 controller().OnLongPressEvent(); 691 controller().OnLongPressEvent();
686 692
687 float line_height = 10.f; 693 float line_height = 10.f;
688 gfx::RectF start_rect(50, line_height, 0, line_height); 694 gfx::RectF start_rect(50, line_height, 0, line_height);
689 gfx::RectF end_rect(100, line_height, 0, line_height); 695 gfx::RectF end_rect(100, line_height, 0, line_height);
690 bool visible = true; 696 bool visible = true;
691 ChangeSelection(start_rect, visible, end_rect, visible); 697 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
692 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 698 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
693 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 699 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
694 700
695 SetDraggingEnabled(true); 701 SetDraggingEnabled(true);
696 702
697 // Move the extent, not triggering a swap of points. 703 // Move the extent, not triggering a swap of points.
698 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 704 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time,
699 end_rect.x(), end_rect.bottom()); 705 end_rect.x(), end_rect.bottom());
700 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 706 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
701 EXPECT_FALSE(GetAndResetSelectionMoved()); 707 EXPECT_FALSE(GetAndResetSelectionMoved());
702 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 708 EXPECT_FALSE(GetAndResetSelectionPointsSwapped());
703 709
704 gfx::PointF base_offset = start_rect.CenterPoint(); 710 gfx::PointF base_offset = start_rect.CenterPoint();
705 gfx::PointF extent_offset = end_rect.CenterPoint(); 711 gfx::PointF extent_offset = end_rect.CenterPoint();
706 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 712 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
707 end_rect.x(), end_rect.bottom() + 5); 713 end_rect.x(), end_rect.bottom() + 5);
708 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 714 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
709 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 715 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED));
710 EXPECT_TRUE(GetAndResetSelectionMoved()); 716 EXPECT_TRUE(GetAndResetSelectionMoved());
711 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 717 EXPECT_FALSE(GetAndResetSelectionPointsSwapped());
712 EXPECT_EQ(base_offset, GetLastSelectionStart()); 718 EXPECT_EQ(base_offset, GetLastSelectionStart());
713 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 719 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd());
714 720
715 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 721 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
716 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 722 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
717 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 723 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
718 EXPECT_FALSE(GetAndResetSelectionMoved()); 724 EXPECT_FALSE(GetAndResetSelectionMoved());
719 725
720 end_rect += gfx::Vector2dF(0, 5); 726 end_rect += gfx::Vector2dF(0, 5);
721 ChangeSelection(start_rect, visible, end_rect, visible); 727 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
722 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 728 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
723 729
724 // Move the base, triggering a swap of points. 730 // Move the base, triggering a swap of points.
725 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 731 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
726 start_rect.x(), start_rect.bottom()); 732 start_rect.x(), start_rect.bottom());
727 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 733 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
728 EXPECT_FALSE(GetAndResetSelectionMoved()); 734 EXPECT_FALSE(GetAndResetSelectionMoved());
729 EXPECT_TRUE(GetAndResetSelectionPointsSwapped()); 735 EXPECT_TRUE(GetAndResetSelectionPointsSwapped());
730 736
731 base_offset = end_rect.CenterPoint(); 737 base_offset = end_rect.CenterPoint();
732 extent_offset = start_rect.CenterPoint(); 738 extent_offset = start_rect.CenterPoint();
733 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 739 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
734 start_rect.x(), start_rect.bottom() + 5); 740 start_rect.x(), start_rect.bottom() + 5);
735 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 741 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
736 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 742 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED));
737 EXPECT_TRUE(GetAndResetSelectionMoved()); 743 EXPECT_TRUE(GetAndResetSelectionMoved());
738 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 744 EXPECT_FALSE(GetAndResetSelectionPointsSwapped());
739 EXPECT_EQ(base_offset, GetLastSelectionStart()); 745 EXPECT_EQ(base_offset, GetLastSelectionStart());
740 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 746 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd());
741 747
742 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 748 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
743 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 749 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
744 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 750 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
745 EXPECT_FALSE(GetAndResetSelectionMoved()); 751 EXPECT_FALSE(GetAndResetSelectionMoved());
746 752
747 start_rect += gfx::Vector2dF(0, 5); 753 start_rect += gfx::Vector2dF(0, 5);
748 ChangeSelection(start_rect, visible, end_rect, visible); 754 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
749 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 755 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
750 756
751 // Move the same point again, not triggering a swap of points. 757 // Move the same point again, not triggering a swap of points.
752 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 758 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
753 start_rect.x(), start_rect.bottom()); 759 start_rect.x(), start_rect.bottom());
754 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 760 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
755 EXPECT_FALSE(GetAndResetSelectionMoved()); 761 EXPECT_FALSE(GetAndResetSelectionMoved());
756 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 762 EXPECT_FALSE(GetAndResetSelectionPointsSwapped());
757 763
758 base_offset = end_rect.CenterPoint(); 764 base_offset = end_rect.CenterPoint();
759 extent_offset = start_rect.CenterPoint(); 765 extent_offset = start_rect.CenterPoint();
760 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 766 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
761 start_rect.x(), start_rect.bottom() + 5); 767 start_rect.x(), start_rect.bottom() + 5);
762 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 768 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
763 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 769 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED));
764 EXPECT_TRUE(GetAndResetSelectionMoved()); 770 EXPECT_TRUE(GetAndResetSelectionMoved());
765 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 771 EXPECT_FALSE(GetAndResetSelectionPointsSwapped());
766 EXPECT_EQ(base_offset, GetLastSelectionStart()); 772 EXPECT_EQ(base_offset, GetLastSelectionStart());
767 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 773 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd());
768 774
769 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 775 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
770 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 776 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
771 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 777 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
772 EXPECT_FALSE(GetAndResetSelectionMoved()); 778 EXPECT_FALSE(GetAndResetSelectionMoved());
773 779
774 start_rect += gfx::Vector2dF(0, 5); 780 start_rect += gfx::Vector2dF(0, 5);
775 ChangeSelection(start_rect, visible, end_rect, visible); 781 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
776 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 782 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
777 783
778 // Move the base, triggering a swap of points. 784 // Move the base, triggering a swap of points.
779 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 785 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
780 end_rect.x(), end_rect.bottom()); 786 end_rect.x(), end_rect.bottom());
781 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 787 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
782 EXPECT_FALSE(GetAndResetSelectionMoved()); 788 EXPECT_FALSE(GetAndResetSelectionMoved());
783 EXPECT_TRUE(GetAndResetSelectionPointsSwapped()); 789 EXPECT_TRUE(GetAndResetSelectionPointsSwapped());
784 790
785 base_offset = start_rect.CenterPoint(); 791 base_offset = start_rect.CenterPoint();
(...skipping 15 matching lines...) Expand all
801 807
802 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) { 808 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) {
803 base::TimeTicks event_time = base::TimeTicks::Now(); 809 base::TimeTicks event_time = base::TimeTicks::Now();
804 controller().OnLongPressEvent(); 810 controller().OnLongPressEvent();
805 811
806 float small_line_height = 1.f; 812 float small_line_height = 1.f;
807 float large_line_height = 50.f; 813 float large_line_height = 50.f;
808 gfx::RectF small_line_rect(0, 0, 0, small_line_height); 814 gfx::RectF small_line_rect(0, 0, 0, small_line_height);
809 gfx::RectF large_line_rect(50, 50, 0, large_line_height); 815 gfx::RectF large_line_rect(50, 50, 0, large_line_height);
810 bool visible = true; 816 bool visible = true;
811 ChangeSelection(small_line_rect, visible, large_line_rect, visible); 817 EXPECT_TRUE(
818 ChangeSelection(small_line_rect, visible, large_line_rect, visible));
812 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 819 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
813 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart()); 820 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart());
814 821
815 // Start dragging the handle on the small line. 822 // Start dragging the handle on the small line.
816 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 823 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time,
817 small_line_rect.x(), small_line_rect.y()); 824 small_line_rect.x(), small_line_rect.y());
818 SetDraggingEnabled(true); 825 SetDraggingEnabled(true);
819 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 826 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
820 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 827 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED));
821 // The drag coordinate for large lines should be capped to a reasonable 828 // The drag coordinate for large lines should be capped to a reasonable
(...skipping 12 matching lines...) Expand all
834 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd()); 841 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd());
835 } 842 }
836 843
837 TEST_F(TouchSelectionControllerTest, Animation) { 844 TEST_F(TouchSelectionControllerTest, Animation) {
838 controller().OnTapEvent(); 845 controller().OnTapEvent();
839 controller().OnSelectionEditable(true); 846 controller().OnSelectionEditable(true);
840 847
841 gfx::RectF insertion_rect(5, 5, 0, 10); 848 gfx::RectF insertion_rect(5, 5, 0, 10);
842 849
843 bool visible = true; 850 bool visible = true;
844 ChangeInsertion(insertion_rect, visible); 851 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
845 EXPECT_FALSE(GetAndResetNeedsAnimate()); 852 EXPECT_FALSE(GetAndResetNeedsAnimate());
846 853
847 visible = false; 854 visible = false;
848 ChangeInsertion(insertion_rect, visible); 855 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
849 EXPECT_TRUE(GetAndResetNeedsAnimate()); 856 EXPECT_TRUE(GetAndResetNeedsAnimate());
850 857
851 visible = true; 858 visible = true;
852 ChangeInsertion(insertion_rect, visible); 859 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
853 EXPECT_TRUE(GetAndResetNeedsAnimate()); 860 EXPECT_TRUE(GetAndResetNeedsAnimate());
854 861
855 // If the handles are explicity hidden, no animation should be triggered. 862 // If the handles are explicity hidden, no animation should be triggered.
856 controller().HideAndDisallowShowingAutomatically(); 863 controller().HideAndDisallowShowingAutomatically();
857 EXPECT_FALSE(GetAndResetNeedsAnimate()); 864 EXPECT_FALSE(GetAndResetNeedsAnimate());
858 865
859 // If the client doesn't support animation, no animation should be triggered. 866 // If the client doesn't support animation, no animation should be triggered.
860 SetAnimationEnabled(false); 867 SetAnimationEnabled(false);
861 controller().OnTapEvent(); 868 controller().OnTapEvent();
862 visible = true; 869 visible = true;
863 ChangeInsertion(insertion_rect, visible); 870 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
864 EXPECT_FALSE(GetAndResetNeedsAnimate()); 871 EXPECT_FALSE(GetAndResetNeedsAnimate());
865 } 872 }
866 873
867 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) { 874 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) {
868 controller().OnTapEvent(); 875 controller().OnTapEvent();
869 controller().OnSelectionEditable(true); 876 controller().OnSelectionEditable(true);
870 877
871 gfx::RectF insertion_rect(5, 5, 0, 10); 878 gfx::RectF insertion_rect(5, 5, 0, 10);
872 879
873 bool visible = true; 880 bool visible = true;
874 ChangeInsertion(insertion_rect, visible); 881 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
875 EXPECT_FALSE(GetAndResetNeedsAnimate()); 882 EXPECT_FALSE(GetAndResetNeedsAnimate());
876 883
877 controller().SetTemporarilyHidden(true); 884 controller().SetTemporarilyHidden(true);
878 EXPECT_TRUE(GetAndResetNeedsAnimate()); 885 EXPECT_TRUE(GetAndResetNeedsAnimate());
879 886
880 visible = false; 887 visible = false;
881 ChangeInsertion(insertion_rect, visible); 888 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
882 EXPECT_FALSE(GetAndResetNeedsAnimate()); 889 EXPECT_FALSE(GetAndResetNeedsAnimate());
883 890
884 visible = true; 891 visible = true;
885 ChangeInsertion(insertion_rect, visible); 892 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
886 EXPECT_FALSE(GetAndResetNeedsAnimate()); 893 EXPECT_FALSE(GetAndResetNeedsAnimate());
887 894
888 controller().SetTemporarilyHidden(false); 895 controller().SetTemporarilyHidden(false);
889 EXPECT_TRUE(GetAndResetNeedsAnimate()); 896 EXPECT_TRUE(GetAndResetNeedsAnimate());
890 } 897 }
891 898
892 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) { 899 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) {
893 gfx::RectF start_rect(5, 5, 0, 10); 900 gfx::RectF start_rect(5, 5, 0, 10);
894 gfx::RectF end_rect(50, 5, 0, 10); 901 gfx::RectF end_rect(50, 5, 0, 10);
895 bool visible = true; 902 bool visible = true;
896 903
897 controller().OnLongPressEvent(); 904 controller().OnLongPressEvent();
898 ChangeSelection(start_rect, visible, end_rect, visible); 905 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
899 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 906 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
900 907
901 // Selection should not be cleared if the selection bounds have not changed. 908 // Selection should not be cleared if the selection bounds have not changed.
902 controller().OnTapEvent(); 909 controller().OnTapEvent();
903 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 910 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
904 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 911 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
905 912
906 controller().OnTapEvent(); 913 controller().OnTapEvent();
907 ClearSelection(); 914 EXPECT_TRUE(ClearSelection());
908 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 915 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
909 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 916 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
910 } 917 }
911 918
912 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) { 919 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) {
913 gfx::RectF start_rect(5, 5, 0, 10); 920 gfx::RectF start_rect(5, 5, 0, 10);
914 gfx::RectF end_rect(50, 5, 0, 10); 921 gfx::RectF end_rect(50, 5, 0, 10);
915 bool visible = true; 922 bool visible = true;
916 923
917 // The selection should not be activated, as it wasn't yet allowed. 924 // The selection should not be activated, as it wasn't yet allowed.
918 ChangeSelection(start_rect, visible, end_rect, visible); 925 EXPECT_FALSE(ChangeSelection(start_rect, visible, end_rect, visible));
919 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 926 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
920 927
921 // Now explicitly allow showing from the previously supplied bounds. 928 // Now explicitly allow showing from the previously supplied bounds.
922 controller().AllowShowingFromCurrentSelection(); 929 controller().AllowShowingFromCurrentSelection();
923 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 930 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
924 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 931 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
925 932
926 // Repeated calls to show from the current selection should be ignored. 933 // Repeated calls to show from the current selection should be ignored.
927 controller().AllowShowingFromCurrentSelection(); 934 controller().AllowShowingFromCurrentSelection();
928 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 935 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
929 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 936 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
930 937
931 // Trying to show from an empty selection will have no result. 938 // Trying to show from an empty selection will have no result.
932 ClearSelection(); 939 EXPECT_TRUE(ClearSelection());
933 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 940 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
934 controller().AllowShowingFromCurrentSelection(); 941 controller().AllowShowingFromCurrentSelection();
935 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 942 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
936 943
937 // Showing the insertion handle should also be supported. 944 // Showing the insertion handle should also be supported.
938 controller().OnSelectionEditable(true); 945 controller().OnSelectionEditable(true);
939 controller().OnSelectionEmpty(false); 946 controller().OnSelectionEmpty(false);
940 controller().HideAndDisallowShowingAutomatically(); 947 controller().HideAndDisallowShowingAutomatically();
941 gfx::RectF insertion_rect(5, 5, 0, 10); 948 gfx::RectF insertion_rect(5, 5, 0, 10);
942 ChangeInsertion(insertion_rect, visible); 949 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
943 controller().AllowShowingFromCurrentSelection(); 950 controller().AllowShowingFromCurrentSelection();
944 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 951 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
945 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 952 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
946 } 953 }
947 954
948 } // namespace ui 955 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698