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

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

Issue 1102933003: [Contextual Search] Add support for tap on the selection. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added unit tests. 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 testing::ElementsAre; 13 using testing::ElementsAre;
14 using testing::IsEmpty; 14 using testing::IsEmpty;
15 using ui::test::MockMotionEvent; 15 using ui::test::MockMotionEvent;
16 16
17 namespace ui { 17 namespace ui {
18 namespace { 18 namespace {
19 19
20 const int kDefaultTapTimeoutMs = 200; 20 const int kDefaultTapTimeoutMs = 200;
21 const float kDefaulTapSlop = 10.f; 21 const float kDefaulTapSlop = 10.f;
22 const gfx::PointF kIgnoredPoint(0, 0);
22 23
23 class MockTouchHandleDrawable : public TouchHandleDrawable { 24 class MockTouchHandleDrawable : public TouchHandleDrawable {
24 public: 25 public:
25 explicit MockTouchHandleDrawable(bool* contains_point) 26 explicit MockTouchHandleDrawable(bool* contains_point)
26 : intersects_rect_(contains_point) {} 27 : intersects_rect_(contains_point) {}
27 ~MockTouchHandleDrawable() override {} 28 ~MockTouchHandleDrawable() override {}
28 void SetEnabled(bool enabled) override {} 29 void SetEnabled(bool enabled) override {}
29 void SetOrientation(TouchHandleOrientation orientation) override {} 30 void SetOrientation(TouchHandleOrientation orientation) override {}
30 void SetAlpha(float alpha) override {} 31 void SetAlpha(float alpha) override {}
31 void SetFocus(const gfx::PointF& position) override {} 32 void SetFocus(const gfx::PointF& position) override {}
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 SelectionBound start_bound, end_bound; 139 SelectionBound start_bound, end_bound;
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
149 void ChangeSelectionToFiveFiftyTen() {
150 gfx::RectF start_rect(5, 5, 0, 10);
151 gfx::RectF end_rect(50, 5, 0, 10);
152 bool visible = false;
153
154 // Establish a selection without handles.
155 ChangeSelection(start_rect, visible, end_rect, visible);
156 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
157 }
158
159 void OnLongPressEvent() {
160 ASSERT_FALSE(controller().WillHandleLongPressEvent(kIgnoredPoint));
161 }
162
163 void OnTapEvent() {
164 ASSERT_FALSE(controller().WillHandleTapEvent(kIgnoredPoint));
165 }
166
148 void Animate() { 167 void Animate() {
149 base::TimeTicks now = base::TimeTicks::Now(); 168 base::TimeTicks now = base::TimeTicks::Now();
150 while (needs_animate_) { 169 while (needs_animate_) {
151 needs_animate_ = controller_->Animate(now); 170 needs_animate_ = controller_->Animate(now);
152 now += base::TimeDelta::FromMilliseconds(16); 171 now += base::TimeDelta::FromMilliseconds(16);
153 } 172 }
154 } 173 }
155 174
156 bool GetAndResetNeedsAnimate() { 175 bool GetAndResetNeedsAnimate() {
157 bool needs_animate = needs_animate_; 176 bool needs_animate = needs_animate_;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 }; 227 };
209 228
210 TEST_F(TouchSelectionControllerTest, InsertionBasic) { 229 TEST_F(TouchSelectionControllerTest, InsertionBasic) {
211 gfx::RectF insertion_rect(5, 5, 0, 10); 230 gfx::RectF insertion_rect(5, 5, 0, 10);
212 bool visible = true; 231 bool visible = true;
213 232
214 // Insertion events are ignored until automatic showing is enabled. 233 // Insertion events are ignored until automatic showing is enabled.
215 ChangeInsertion(insertion_rect, visible); 234 ChangeInsertion(insertion_rect, visible);
216 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 235 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
217 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 236 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
218 controller().OnTapEvent(); 237 OnTapEvent();
219 238
220 // Insertion events are ignored until the selection region is marked editable. 239 // Insertion events are ignored until the selection region is marked editable.
221 ChangeInsertion(insertion_rect, visible); 240 ChangeInsertion(insertion_rect, visible);
222 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 241 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
223 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 242 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
224 243
225 controller().OnTapEvent(); 244 OnTapEvent();
226 controller().OnSelectionEditable(true); 245 controller().OnSelectionEditable(true);
227 ChangeInsertion(insertion_rect, visible); 246 ChangeInsertion(insertion_rect, visible);
228 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 247 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
229 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 248 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
230 249
231 insertion_rect.Offset(1, 0); 250 insertion_rect.Offset(1, 0);
232 ChangeInsertion(insertion_rect, visible); 251 ChangeInsertion(insertion_rect, visible);
233 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 252 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
234 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 253 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
235 254
236 insertion_rect.Offset(0, 1); 255 insertion_rect.Offset(0, 1);
237 ChangeInsertion(insertion_rect, visible); 256 ChangeInsertion(insertion_rect, visible);
238 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 257 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
239 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 258 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
240 259
241 ClearInsertion(); 260 ClearInsertion();
242 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 261 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
243 } 262 }
244 263
245 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) { 264 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) {
246 gfx::RectF insertion_rect(5, 5, 0, 10); 265 gfx::RectF insertion_rect(5, 5, 0, 10);
247 bool visible = true; 266 bool visible = true;
248 controller().OnTapEvent(); 267 OnTapEvent();
249 controller().OnSelectionEditable(true); 268 controller().OnSelectionEditable(true);
250 269
251 ChangeInsertion(insertion_rect, visible); 270 ChangeInsertion(insertion_rect, visible);
252 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 271 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
253 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 272 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
254 273
255 controller().OnSelectionEditable(false); 274 controller().OnSelectionEditable(false);
256 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 275 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
257 } 276 }
258 277
259 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) { 278 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) {
260 gfx::RectF insertion_rect(5, 5, 0, 10); 279 gfx::RectF insertion_rect(5, 5, 0, 10);
261 bool visible = true; 280 bool visible = true;
262 controller().OnSelectionEditable(true); 281 controller().OnSelectionEditable(true);
263 282
264 // Taps on an empty editable region should be ignored if the controller is 283 // 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. 284 // created with |show_on_tap_for_empty_editable| set to false.
266 controller().OnTapEvent(); 285 OnTapEvent();
267 controller().OnSelectionEmpty(true); 286 controller().OnSelectionEmpty(true);
268 ChangeInsertion(insertion_rect, visible); 287 ChangeInsertion(insertion_rect, visible);
269 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 288 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
270 289
271 // Once the region becomes non-empty, taps should show the insertion handle. 290 // Once the region becomes non-empty, taps should show the insertion handle.
272 controller().OnTapEvent(); 291 OnTapEvent();
273 controller().OnSelectionEmpty(false); 292 controller().OnSelectionEmpty(false);
274 ChangeInsertion(insertion_rect, visible); 293 ChangeInsertion(insertion_rect, visible);
275 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 294 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
276 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 295 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
277 296
278 // Reset the selection. 297 // Reset the selection.
279 controller().HideAndDisallowShowingAutomatically(); 298 controller().HideAndDisallowShowingAutomatically();
280 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 299 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
281 300
282 // Long-pressing should show the handle even if the editable region is empty. 301 // Long-pressing should show the handle even if the editable region is empty.
283 insertion_rect.Offset(2, -2); 302 insertion_rect.Offset(2, -2);
284 controller().OnLongPressEvent(); 303 OnLongPressEvent();
285 controller().OnSelectionEmpty(true); 304 controller().OnSelectionEmpty(true);
286 ChangeInsertion(insertion_rect, visible); 305 ChangeInsertion(insertion_rect, visible);
287 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 306 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
288 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 307 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
289 308
290 // Single Tap on an empty edit field should clear insertion handle. 309 // Single Tap on an empty edit field should clear insertion handle.
291 controller().OnTapEvent(); 310 OnTapEvent();
292 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 311 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
293 } 312 }
294 313
295 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) { 314 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) {
296 AllowShowingOnTapForEmptyEditable(); 315 AllowShowingOnTapForEmptyEditable();
297 316
298 gfx::RectF insertion_rect(5, 5, 0, 10); 317 gfx::RectF insertion_rect(5, 5, 0, 10);
299 bool visible = true; 318 bool visible = true;
300 controller().OnSelectionEditable(true); 319 controller().OnSelectionEditable(true);
301 320
302 // Taps on an empty editable region should show the insertion handle if the 321 // 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. 322 // controller is created with |show_on_tap_for_empty_editable| set to true.
304 controller().OnTapEvent(); 323 OnTapEvent();
305 controller().OnSelectionEmpty(true); 324 controller().OnSelectionEmpty(true);
306 ChangeInsertion(insertion_rect, visible); 325 ChangeInsertion(insertion_rect, visible);
307 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 326 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
308 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 327 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
309 328
310 // Additional taps should not hide the insertion handle in this case. 329 // Additional taps should not hide the insertion handle in this case.
311 controller().OnTapEvent(); 330 OnTapEvent();
312 ChangeInsertion(insertion_rect, visible); 331 ChangeInsertion(insertion_rect, visible);
313 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 332 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
314 } 333 }
315 334
316 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) { 335 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) {
317 gfx::RectF insertion_rect(5, 5, 0, 10); 336 gfx::RectF insertion_rect(5, 5, 0, 10);
318 bool visible = true; 337 bool visible = true;
319 338
320 // Simulate the user tapping an empty text field. 339 // Simulate the user tapping an empty text field.
321 controller().OnTapEvent(); 340 OnTapEvent();
322 controller().OnSelectionEditable(true); 341 controller().OnSelectionEditable(true);
323 controller().OnSelectionEmpty(true); 342 controller().OnSelectionEmpty(true);
324 ChangeInsertion(insertion_rect, visible); 343 ChangeInsertion(insertion_rect, visible);
325 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 344 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
326 345
327 // Simulate the cursor moving while a user is typing. 346 // Simulate the cursor moving while a user is typing.
328 insertion_rect.Offset(10, 0); 347 insertion_rect.Offset(10, 0);
329 controller().OnSelectionEmpty(false); 348 controller().OnSelectionEmpty(false);
330 ChangeInsertion(insertion_rect, visible); 349 ChangeInsertion(insertion_rect, visible);
331 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 350 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
332 351
333 // If the user taps the *same* position as the cursor at the end of the text 352 // If the user taps the *same* position as the cursor at the end of the text
334 // entry, the handle should appear. 353 // entry, the handle should appear.
335 controller().OnTapEvent(); 354 OnTapEvent();
336 ChangeInsertion(insertion_rect, visible); 355 ChangeInsertion(insertion_rect, visible);
337 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 356 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
338 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 357 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
339 } 358 }
340 359
341 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { 360 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) {
342 controller().OnLongPressEvent(); 361 OnLongPressEvent();
343 controller().OnSelectionEditable(true); 362 controller().OnSelectionEditable(true);
344 363
345 gfx::RectF start_rect(5, 5, 0, 10); 364 gfx::RectF start_rect(5, 5, 0, 10);
346 gfx::RectF end_rect(50, 5, 0, 10); 365 gfx::RectF end_rect(50, 5, 0, 10);
347 bool visible = true; 366 bool visible = true;
348 367
349 ChangeInsertion(start_rect, visible); 368 ChangeInsertion(start_rect, visible);
350 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 369 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
351 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 370 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
352 371
353 ChangeSelection(start_rect, visible, end_rect, visible); 372 ChangeSelection(start_rect, visible, end_rect, visible);
354 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 373 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
355 SELECTION_SHOWN)); 374 SELECTION_SHOWN));
356 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 375 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
357 376
358 ChangeInsertion(end_rect, visible); 377 ChangeInsertion(end_rect, visible);
359 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED, 378 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED,
360 INSERTION_SHOWN)); 379 INSERTION_SHOWN));
361 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 380 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());
362 381
363 controller().HideAndDisallowShowingAutomatically(); 382 controller().HideAndDisallowShowingAutomatically();
364 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 383 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
365 384
366 controller().OnTapEvent(); 385 OnTapEvent();
367 ChangeInsertion(end_rect, visible); 386 ChangeInsertion(end_rect, visible);
368 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 387 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
369 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart()); 388 EXPECT_EQ(end_rect.bottom_left(), GetLastEventStart());
370 } 389 }
371 390
372 TEST_F(TouchSelectionControllerTest, InsertionDragged) { 391 TEST_F(TouchSelectionControllerTest, InsertionDragged) {
373 base::TimeTicks event_time = base::TimeTicks::Now(); 392 base::TimeTicks event_time = base::TimeTicks::Now();
374 controller().OnTapEvent(); 393 OnTapEvent();
375 controller().OnSelectionEditable(true); 394 controller().OnSelectionEditable(true);
376 395
377 // The touch sequence should not be handled if insertion is not active. 396 // The touch sequence should not be handled if insertion is not active.
378 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 397 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
379 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 398 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
380 399
381 float line_height = 10.f; 400 float line_height = 10.f;
382 gfx::RectF start_rect(10, 0, 0, line_height); 401 gfx::RectF start_rect(10, 0, 0, line_height);
383 bool visible = true; 402 bool visible = true;
384 ChangeInsertion(start_rect, visible); 403 ChangeInsertion(start_rect, visible);
(...skipping 30 matching lines...) Expand all
415 EXPECT_FALSE(GetAndResetCaretMoved()); 434 EXPECT_FALSE(GetAndResetCaretMoved());
416 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STOPPED)); 435 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STOPPED));
417 436
418 // Once the drag is complete, no more touch events should be consumed until 437 // Once the drag is complete, no more touch events should be consumed until
419 // the next ACTION_DOWN. 438 // the next ACTION_DOWN.
420 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 439 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
421 } 440 }
422 441
423 TEST_F(TouchSelectionControllerTest, InsertionTapped) { 442 TEST_F(TouchSelectionControllerTest, InsertionTapped) {
424 base::TimeTicks event_time = base::TimeTicks::Now(); 443 base::TimeTicks event_time = base::TimeTicks::Now();
425 controller().OnTapEvent(); 444 OnTapEvent();
426 controller().OnSelectionEditable(true); 445 controller().OnSelectionEditable(true);
427 SetDraggingEnabled(true); 446 SetDraggingEnabled(true);
428 447
429 gfx::RectF start_rect(10, 0, 0, 10); 448 gfx::RectF start_rect(10, 0, 0, 10);
430 bool visible = true; 449 bool visible = true;
431 ChangeInsertion(start_rect, visible); 450 ChangeInsertion(start_rect, visible);
432 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 451 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
433 452
434 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 453 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
435 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 454 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
436 //TODO(AKV): this test case has to be modified once crbug.com/394093 is fixed. 455 //TODO(AKV): this test case has to be modified once crbug.com/394093 is fixed.
437 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 456 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
438 457
439 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 458 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
440 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 459 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
441 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 460 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
442 INSERTION_DRAG_STOPPED)); 461 INSERTION_DRAG_STOPPED));
443 462
444 // Reset the insertion. 463 // Reset the insertion.
445 ClearInsertion(); 464 ClearInsertion();
446 controller().OnTapEvent(); 465 OnTapEvent();
447 ChangeInsertion(start_rect, visible); 466 ChangeInsertion(start_rect, visible);
448 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 467 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
449 INSERTION_SHOWN)); 468 INSERTION_SHOWN));
450 469
451 // No tap should be signalled if the time between DOWN and UP was too long. 470 // 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); 471 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
453 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 472 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
454 event = MockMotionEvent(MockMotionEvent::ACTION_UP, 473 event = MockMotionEvent(MockMotionEvent::ACTION_UP,
455 event_time + base::TimeDelta::FromSeconds(1), 474 event_time + base::TimeDelta::FromSeconds(1),
456 0, 475 0,
457 0); 476 0);
458 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 477 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
459 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 478 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
460 INSERTION_DRAG_STOPPED)); 479 INSERTION_DRAG_STOPPED));
461 480
462 // Reset the insertion. 481 // Reset the insertion.
463 ClearInsertion(); 482 ClearInsertion();
464 controller().OnTapEvent(); 483 OnTapEvent();
465 ChangeInsertion(start_rect, visible); 484 ChangeInsertion(start_rect, visible);
466 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 485 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
467 INSERTION_SHOWN)); 486 INSERTION_SHOWN));
468 487
469 // No tap should be signalled if the drag was too long. 488 // No tap should be signalled if the drag was too long.
470 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 489 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
471 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 490 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
472 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0); 491 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0);
473 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 492 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
474 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0); 493 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0);
475 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 494 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
476 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 495 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
477 INSERTION_DRAG_STOPPED)); 496 INSERTION_DRAG_STOPPED));
478 497
479 // Reset the insertion. 498 // Reset the insertion.
480 ClearInsertion(); 499 ClearInsertion();
481 controller().OnTapEvent(); 500 OnTapEvent();
482 ChangeInsertion(start_rect, visible); 501 ChangeInsertion(start_rect, visible);
483 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 502 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED,
484 INSERTION_SHOWN)); 503 INSERTION_SHOWN));
485 504
486 // No tap should be signalled if the touch sequence is cancelled. 505 // No tap should be signalled if the touch sequence is cancelled.
487 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 506 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
488 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 507 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
489 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0); 508 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0);
490 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 509 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
491 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 510 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED,
492 INSERTION_DRAG_STOPPED)); 511 INSERTION_DRAG_STOPPED));
493 } 512 }
494 513
495 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) { 514 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) {
496 base::TimeTicks event_time = base::TimeTicks::Now(); 515 base::TimeTicks event_time = base::TimeTicks::Now();
497 controller().OnTapEvent(); 516 OnTapEvent();
498 controller().OnSelectionEditable(true); 517 controller().OnSelectionEditable(true);
499 SetDraggingEnabled(true); 518 SetDraggingEnabled(true);
500 519
501 gfx::RectF anchor_rect(10, 0, 0, 10); 520 gfx::RectF anchor_rect(10, 0, 0, 10);
502 bool visible = true; 521 bool visible = true;
503 ChangeInsertion(anchor_rect, visible); 522 ChangeInsertion(anchor_rect, visible);
504 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 523 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
505 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 524 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
506 525
507 // Tapping again shouldn't reset the active insertion point. 526 // Tapping again shouldn't reset the active insertion point.
508 controller().OnTapEvent(); 527 OnTapEvent();
509 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 528 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
510 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 529 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
511 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 530 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
512 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 531 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
513 532
514 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 533 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
515 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 534 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
516 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 535 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
517 INSERTION_DRAG_STOPPED)); 536 INSERTION_DRAG_STOPPED));
518 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 537 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
519 538
520 anchor_rect.Offset(5, 15); 539 anchor_rect.Offset(5, 15);
521 ChangeInsertion(anchor_rect, visible); 540 ChangeInsertion(anchor_rect, visible);
522 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 541 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
523 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 542 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
524 543
525 // Pressing shouldn't reset the active insertion point. 544 // Pressing shouldn't reset the active insertion point.
526 controller().OnLongPressEvent(); 545 OnLongPressEvent();
527 controller().OnSelectionEmpty(true); 546 controller().OnSelectionEmpty(true);
528 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 547 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
529 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 548 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
530 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 549 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED));
531 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 550 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
532 551
533 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 552 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
534 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 553 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
535 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 554 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED,
536 INSERTION_DRAG_STOPPED)); 555 INSERTION_DRAG_STOPPED));
537 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart()); 556 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventStart());
538 } 557 }
539 558
540 TEST_F(TouchSelectionControllerTest, SelectionBasic) { 559 TEST_F(TouchSelectionControllerTest, SelectionBasic) {
541 gfx::RectF start_rect(5, 5, 0, 10); 560 gfx::RectF start_rect(5, 5, 0, 10);
542 gfx::RectF end_rect(50, 5, 0, 10); 561 gfx::RectF end_rect(50, 5, 0, 10);
543 bool visible = true; 562 bool visible = true;
544 563
545 // Selection events are ignored until automatic showing is enabled. 564 // Selection events are ignored until automatic showing is enabled.
546 ChangeSelection(start_rect, visible, end_rect, visible); 565 ChangeSelection(start_rect, visible, end_rect, visible);
547 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 566 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
548 567
549 controller().OnLongPressEvent(); 568 OnLongPressEvent();
550 ChangeSelection(start_rect, visible, end_rect, visible); 569 ChangeSelection(start_rect, visible, end_rect, visible);
551 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 570 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
552 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 571 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
553 572
554 start_rect.Offset(1, 0); 573 start_rect.Offset(1, 0);
555 ChangeSelection(start_rect, visible, end_rect, visible); 574 ChangeSelection(start_rect, visible, end_rect, visible);
556 // Selection movement does not currently trigger a separate event. 575 // Selection movement does not currently trigger a separate event.
557 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED)); 576 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_MOVED));
558 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 577 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
559 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 578 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
560 579
561 ClearSelection(); 580 ClearSelection();
562 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 581 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
563 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 582 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
564 } 583 }
565 584
566 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) { 585 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) {
567 gfx::RectF start_rect(5, 5, 0, 10); 586 gfx::RectF start_rect(5, 5, 0, 10);
568 gfx::RectF end_rect(50, 5, 0, 10); 587 gfx::RectF end_rect(50, 5, 0, 10);
569 bool visible = true; 588 bool visible = true;
570 589
571 controller().OnLongPressEvent(); 590 OnLongPressEvent();
572 ChangeSelection(start_rect, visible, end_rect, visible); 591 ChangeSelection(start_rect, visible, end_rect, visible);
573 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 592 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
574 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 593 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
575 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 594 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
576 595
577 // A long press triggering a new selection should re-send the SELECTION_SHOWN 596 // A long press triggering a new selection should re-send the SELECTION_SHOWN
578 // event notification. 597 // event notification.
579 start_rect.Offset(10, 10); 598 start_rect.Offset(10, 10);
580 controller().OnLongPressEvent(); 599 OnLongPressEvent();
581 ChangeSelection(start_rect, visible, end_rect, visible); 600 ChangeSelection(start_rect, visible, end_rect, visible);
582 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 601 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
583 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 602 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
584 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd()); 603 EXPECT_EQ(end_rect.bottom_left(), GetLastEventEnd());
585 } 604 }
586 605
587 TEST_F(TouchSelectionControllerTest, SelectionDragged) { 606 TEST_F(TouchSelectionControllerTest, SelectionDragged) {
588 base::TimeTicks event_time = base::TimeTicks::Now(); 607 base::TimeTicks event_time = base::TimeTicks::Now();
589 controller().OnLongPressEvent(); 608 OnLongPressEvent();
590 609
591 // The touch sequence should not be handled if selection is not active. 610 // The touch sequence should not be handled if selection is not active.
592 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 611 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
593 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 612 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
594 613
595 float line_height = 10.f; 614 float line_height = 10.f;
596 gfx::RectF start_rect(0, 0, 0, line_height); 615 gfx::RectF start_rect(0, 0, 0, line_height);
597 gfx::RectF end_rect(50, 0, 0, line_height); 616 gfx::RectF end_rect(50, 0, 0, line_height);
598 bool visible = true; 617 bool visible = true;
599 ChangeSelection(start_rect, visible, end_rect, visible); 618 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)); 656 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
638 EXPECT_FALSE(GetAndResetSelectionMoved()); 657 EXPECT_FALSE(GetAndResetSelectionMoved());
639 658
640 // Once the drag is complete, no more touch events should be consumed until 659 // Once the drag is complete, no more touch events should be consumed until
641 // the next ACTION_DOWN. 660 // the next ACTION_DOWN.
642 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 661 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
643 } 662 }
644 663
645 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { 664 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) {
646 base::TimeTicks event_time = base::TimeTicks::Now(); 665 base::TimeTicks event_time = base::TimeTicks::Now();
647 controller().OnLongPressEvent(); 666 OnLongPressEvent();
648 667
649 float line_height = 10.f; 668 float line_height = 10.f;
650 gfx::RectF start_rect(0, 0, 0, line_height); 669 gfx::RectF start_rect(0, 0, 0, line_height);
651 gfx::RectF end_rect(50, 0, 0, line_height); 670 gfx::RectF end_rect(50, 0, 0, line_height);
652 bool visible = true; 671 bool visible = true;
653 ChangeSelection(start_rect, visible, end_rect, visible); 672 ChangeSelection(start_rect, visible, end_rect, visible);
654 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 673 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
655 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 674 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
656 675
657 // The ACTION_DOWN should lock to the closest handle. 676 // The ACTION_DOWN should lock to the closest handle.
(...skipping 17 matching lines...) Expand all
675 GetLastSelectionEnd()); 694 GetLastSelectionEnd());
676 695
677 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 696 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
678 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 697 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
679 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 698 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
680 EXPECT_FALSE(GetAndResetSelectionMoved()); 699 EXPECT_FALSE(GetAndResetSelectionMoved());
681 } 700 }
682 701
683 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) { 702 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) {
684 base::TimeTicks event_time = base::TimeTicks::Now(); 703 base::TimeTicks event_time = base::TimeTicks::Now();
685 controller().OnLongPressEvent(); 704 OnLongPressEvent();
686 705
687 float line_height = 10.f; 706 float line_height = 10.f;
688 gfx::RectF start_rect(50, line_height, 0, line_height); 707 gfx::RectF start_rect(50, line_height, 0, line_height);
689 gfx::RectF end_rect(100, line_height, 0, line_height); 708 gfx::RectF end_rect(100, line_height, 0, line_height);
690 bool visible = true; 709 bool visible = true;
691 ChangeSelection(start_rect, visible, end_rect, visible); 710 ChangeSelection(start_rect, visible, end_rect, visible);
692 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 711 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
693 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 712 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
694 713
695 SetDraggingEnabled(true); 714 SetDraggingEnabled(true);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 813 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd());
795 814
796 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 815 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
797 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 816 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
798 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 817 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED));
799 EXPECT_FALSE(GetAndResetSelectionMoved()); 818 EXPECT_FALSE(GetAndResetSelectionMoved());
800 } 819 }
801 820
802 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) { 821 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) {
803 base::TimeTicks event_time = base::TimeTicks::Now(); 822 base::TimeTicks event_time = base::TimeTicks::Now();
804 controller().OnLongPressEvent(); 823 OnLongPressEvent();
805 824
806 float small_line_height = 1.f; 825 float small_line_height = 1.f;
807 float large_line_height = 50.f; 826 float large_line_height = 50.f;
808 gfx::RectF small_line_rect(0, 0, 0, small_line_height); 827 gfx::RectF small_line_rect(0, 0, 0, small_line_height);
809 gfx::RectF large_line_rect(50, 50, 0, large_line_height); 828 gfx::RectF large_line_rect(50, 50, 0, large_line_height);
810 bool visible = true; 829 bool visible = true;
811 ChangeSelection(small_line_rect, visible, large_line_rect, visible); 830 ChangeSelection(small_line_rect, visible, large_line_rect, visible);
812 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 831 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
813 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart()); 832 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventStart());
814 833
(...skipping 13 matching lines...) Expand all
828 847
829 small_line_rect += gfx::Vector2dF(25.f, 0); 848 small_line_rect += gfx::Vector2dF(25.f, 0);
830 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 849 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
831 small_line_rect.x(), small_line_rect.y()); 850 small_line_rect.x(), small_line_rect.y());
832 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 851 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
833 EXPECT_TRUE(GetAndResetSelectionMoved()); 852 EXPECT_TRUE(GetAndResetSelectionMoved());
834 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd()); 853 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd());
835 } 854 }
836 855
837 TEST_F(TouchSelectionControllerTest, Animation) { 856 TEST_F(TouchSelectionControllerTest, Animation) {
838 controller().OnTapEvent(); 857 OnTapEvent();
839 controller().OnSelectionEditable(true); 858 controller().OnSelectionEditable(true);
840 859
841 gfx::RectF insertion_rect(5, 5, 0, 10); 860 gfx::RectF insertion_rect(5, 5, 0, 10);
842 861
843 bool visible = true; 862 bool visible = true;
844 ChangeInsertion(insertion_rect, visible); 863 ChangeInsertion(insertion_rect, visible);
845 EXPECT_FALSE(GetAndResetNeedsAnimate()); 864 EXPECT_FALSE(GetAndResetNeedsAnimate());
846 865
847 visible = false; 866 visible = false;
848 ChangeInsertion(insertion_rect, visible); 867 ChangeInsertion(insertion_rect, visible);
849 EXPECT_TRUE(GetAndResetNeedsAnimate()); 868 EXPECT_TRUE(GetAndResetNeedsAnimate());
850 869
851 visible = true; 870 visible = true;
852 ChangeInsertion(insertion_rect, visible); 871 ChangeInsertion(insertion_rect, visible);
853 EXPECT_TRUE(GetAndResetNeedsAnimate()); 872 EXPECT_TRUE(GetAndResetNeedsAnimate());
854 873
855 // If the handles are explicity hidden, no animation should be triggered. 874 // If the handles are explicity hidden, no animation should be triggered.
856 controller().HideAndDisallowShowingAutomatically(); 875 controller().HideAndDisallowShowingAutomatically();
857 EXPECT_FALSE(GetAndResetNeedsAnimate()); 876 EXPECT_FALSE(GetAndResetNeedsAnimate());
858 877
859 // If the client doesn't support animation, no animation should be triggered. 878 // If the client doesn't support animation, no animation should be triggered.
860 SetAnimationEnabled(false); 879 SetAnimationEnabled(false);
861 controller().OnTapEvent(); 880 OnTapEvent();
862 visible = true; 881 visible = true;
863 ChangeInsertion(insertion_rect, visible); 882 ChangeInsertion(insertion_rect, visible);
864 EXPECT_FALSE(GetAndResetNeedsAnimate()); 883 EXPECT_FALSE(GetAndResetNeedsAnimate());
865 } 884 }
866 885
867 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) { 886 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) {
868 controller().OnTapEvent(); 887 OnTapEvent();
869 controller().OnSelectionEditable(true); 888 controller().OnSelectionEditable(true);
870 889
871 gfx::RectF insertion_rect(5, 5, 0, 10); 890 gfx::RectF insertion_rect(5, 5, 0, 10);
872 891
873 bool visible = true; 892 bool visible = true;
874 ChangeInsertion(insertion_rect, visible); 893 ChangeInsertion(insertion_rect, visible);
875 EXPECT_FALSE(GetAndResetNeedsAnimate()); 894 EXPECT_FALSE(GetAndResetNeedsAnimate());
876 895
877 controller().SetTemporarilyHidden(true); 896 controller().SetTemporarilyHidden(true);
878 EXPECT_TRUE(GetAndResetNeedsAnimate()); 897 EXPECT_TRUE(GetAndResetNeedsAnimate());
879 898
880 visible = false; 899 visible = false;
881 ChangeInsertion(insertion_rect, visible); 900 ChangeInsertion(insertion_rect, visible);
882 EXPECT_FALSE(GetAndResetNeedsAnimate()); 901 EXPECT_FALSE(GetAndResetNeedsAnimate());
883 902
884 visible = true; 903 visible = true;
885 ChangeInsertion(insertion_rect, visible); 904 ChangeInsertion(insertion_rect, visible);
886 EXPECT_FALSE(GetAndResetNeedsAnimate()); 905 EXPECT_FALSE(GetAndResetNeedsAnimate());
887 906
888 controller().SetTemporarilyHidden(false); 907 controller().SetTemporarilyHidden(false);
889 EXPECT_TRUE(GetAndResetNeedsAnimate()); 908 EXPECT_TRUE(GetAndResetNeedsAnimate());
890 } 909 }
891 910
892 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) { 911 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) {
893 gfx::RectF start_rect(5, 5, 0, 10); 912 gfx::RectF start_rect(5, 5, 0, 10);
894 gfx::RectF end_rect(50, 5, 0, 10); 913 gfx::RectF end_rect(50, 5, 0, 10);
895 bool visible = true; 914 bool visible = true;
896 915
897 controller().OnLongPressEvent(); 916 OnLongPressEvent();
898 ChangeSelection(start_rect, visible, end_rect, visible); 917 ChangeSelection(start_rect, visible, end_rect, visible);
899 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 918 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
900 919
901 // Selection should not be cleared if the selection bounds have not changed. 920 // Selection should not be cleared if the selection bounds have not changed.
902 controller().OnTapEvent(); 921 OnTapEvent();
903 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 922 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
904 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart()); 923 EXPECT_EQ(start_rect.bottom_left(), GetLastEventStart());
905 924
906 controller().OnTapEvent(); 925 OnTapEvent();
907 ClearSelection(); 926 ClearSelection();
908 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 927 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
909 EXPECT_EQ(gfx::PointF(), GetLastEventStart()); 928 EXPECT_EQ(gfx::PointF(), GetLastEventStart());
910 } 929 }
911 930
912 TEST_F(TouchSelectionControllerTest, NoSelectionAfterLongpressThenTap) { 931 TEST_F(TouchSelectionControllerTest, NoSelectionAfterLongpressThenTap) {
913 gfx::RectF start_rect(5, 5, 0, 10); 932 gfx::RectF start_rect(5, 5, 0, 10);
914 gfx::RectF end_rect(50, 5, 0, 10); 933 gfx::RectF end_rect(50, 5, 0, 10);
915 bool visible = true; 934 bool visible = true;
916 935
917 // Tap-triggered selections should not be allowed. 936 // Tap-triggered selections should not be allowed.
918 controller().OnLongPressEvent(); 937 OnLongPressEvent();
919 controller().OnTapEvent(); 938 OnTapEvent();
920 ChangeSelection(start_rect, visible, end_rect, visible); 939 ChangeSelection(start_rect, visible, end_rect, visible);
921 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 940 EXPECT_THAT(GetAndResetEvents(), IsEmpty());
922 941
923 // Subsequent longpress selections will be allowed. 942 // Subsequent longpress selections will be allowed.
924 controller().OnLongPressEvent(); 943 OnLongPressEvent();
925 ChangeSelection(start_rect, visible, end_rect, visible); 944 ChangeSelection(start_rect, visible, end_rect, visible);
926 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 945 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
927 } 946 }
928 947
929 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) { 948 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) {
930 gfx::RectF start_rect(5, 5, 0, 10); 949 gfx::RectF start_rect(5, 5, 0, 10);
931 gfx::RectF end_rect(50, 5, 0, 10); 950 gfx::RectF end_rect(50, 5, 0, 10);
932 bool visible = true; 951 bool visible = true;
933 952
934 // The selection should not be activated, as it wasn't yet allowed. 953 // The selection should not be activated, as it wasn't yet allowed.
(...skipping 20 matching lines...) Expand all
955 controller().OnSelectionEditable(true); 974 controller().OnSelectionEditable(true);
956 controller().OnSelectionEmpty(false); 975 controller().OnSelectionEmpty(false);
957 controller().HideAndDisallowShowingAutomatically(); 976 controller().HideAndDisallowShowingAutomatically();
958 gfx::RectF insertion_rect(5, 5, 0, 10); 977 gfx::RectF insertion_rect(5, 5, 0, 10);
959 ChangeInsertion(insertion_rect, visible); 978 ChangeInsertion(insertion_rect, visible);
960 controller().AllowShowingFromCurrentSelection(); 979 controller().AllowShowingFromCurrentSelection();
961 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 980 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
962 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart()); 981 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventStart());
963 } 982 }
964 983
984 TEST_F(TouchSelectionControllerTest, HandlesDontShowOnTapOutsideRect) {
985 gfx::PointF outer_point(100, 100);
986
987 // Establish a selection without handles from 5 to 50 with height 10.
988 ChangeSelectionToFiveFiftyTen();
989
990 // A point outside the rect should not be handled.
991 EXPECT_FALSE(controller().WillHandleTapEvent(outer_point));
992 }
jdduke (slow) 2015/05/08 22:05:52 I would go ahead and merge the 2 tap tests into on
jdduke (slow) 2015/05/08 22:07:04 Oh, and just call the tests HandlesShowOnTapInsid
Donn Denman 2015/05/11 21:23:39 Done.
Donn Denman 2015/05/11 21:23:39 Done.
993
994 TEST_F(TouchSelectionControllerTest, HandlesShowOnTapInsideRect) {
995 gfx::PointF inner_point(25, 10);
996
997 // Establish a selection without handles from 5 to 50 with height 10.
998 ChangeSelectionToFiveFiftyTen();
999
1000 // A point inside the rect should be handled.
1001 EXPECT_TRUE(controller().WillHandleTapEvent(inner_point));
1002 }
1003
1004 TEST_F(TouchSelectionControllerTest, HandlesDontShowOnLongPressOutsideRect) {
1005 gfx::PointF outer_point(100, 100);
1006
1007 // Establish a selection without handles from 5 to 50 with height 10.
1008 ChangeSelectionToFiveFiftyTen();
1009
1010 // A point outside the rect should not be handled.
1011 EXPECT_FALSE(controller().WillHandleLongPressEvent(outer_point));
1012 }
1013
1014 TEST_F(TouchSelectionControllerTest, HandlesShowOnLongPressInsideRect) {
1015 gfx::PointF inner_point(25, 10);
1016
1017 // Establish a selection without handles from 5 to 50 with height 10.
1018 ChangeSelectionToFiveFiftyTen();
1019
1020 // A point inside the rect should be handled.
1021 EXPECT_TRUE(controller().WillHandleLongPressEvent(inner_point));
1022 }
1023
965 } // namespace ui 1024 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698