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

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

Powered by Google App Engine
This is Rietveld 408576698