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

Side by Side Diff: ui/aura/gestures/gesture_recognizer_unittest.cc

Issue 9452024: Gestures are now possible using touch events with any ids (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/timer.h" 5 #include "base/timer.h"
6 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
7 #include "ui/aura/event.h" 7 #include "ui/aura/event.h"
8 #include "ui/aura/gestures/gesture_recognizer_aura.h" 8 #include "ui/aura/gestures/gesture_recognizer_aura.h"
9 #include "ui/aura/gestures/gesture_sequence.h" 9 #include "ui/aura/gestures/gesture_sequence.h"
10 #include "ui/aura/root_window.h" 10 #include "ui/aura/root_window.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 bool scroll_begin() const { return scroll_begin_; } 62 bool scroll_begin() const { return scroll_begin_; }
63 bool scroll_update() const { return scroll_update_; } 63 bool scroll_update() const { return scroll_update_; }
64 bool scroll_end() const { return scroll_end_; } 64 bool scroll_end() const { return scroll_end_; }
65 bool pinch_begin() const { return pinch_begin_; } 65 bool pinch_begin() const { return pinch_begin_; }
66 bool pinch_update() const { return pinch_update_; } 66 bool pinch_update() const { return pinch_update_; }
67 bool pinch_end() const { return pinch_end_; } 67 bool pinch_end() const { return pinch_end_; }
68 bool long_press() const { return long_press_; } 68 bool long_press() const { return long_press_; }
69 69
70 float scroll_x() const { return scroll_x_; } 70 float scroll_x() const { return scroll_x_; }
71 float scroll_y() const { return scroll_y_; } 71 float scroll_y() const { return scroll_y_; }
72 unsigned int touch_id() const { return touch_id_; } 72 int touch_id() const { return touch_id_; }
73 73
74 virtual ui::GestureStatus OnGestureEvent(GestureEvent* gesture) OVERRIDE { 74 virtual ui::GestureStatus OnGestureEvent(GestureEvent* gesture) OVERRIDE {
75 switch (gesture->type()) { 75 switch (gesture->type()) {
76 case ui::ET_GESTURE_TAP: 76 case ui::ET_GESTURE_TAP:
77 tap_ = true; 77 tap_ = true;
78 break; 78 break;
79 case ui::ET_GESTURE_TAP_DOWN: 79 case ui::ET_GESTURE_TAP_DOWN:
80 tap_down_ = true; 80 tap_down_ = true;
81 break; 81 break;
82 case ui::ET_GESTURE_DOUBLE_TAP: 82 case ui::ET_GESTURE_DOUBLE_TAP:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 bool scroll_begin_; 119 bool scroll_begin_;
120 bool scroll_update_; 120 bool scroll_update_;
121 bool scroll_end_; 121 bool scroll_end_;
122 bool pinch_begin_; 122 bool pinch_begin_;
123 bool pinch_update_; 123 bool pinch_update_;
124 bool pinch_end_; 124 bool pinch_end_;
125 bool long_press_; 125 bool long_press_;
126 126
127 float scroll_x_; 127 float scroll_x_;
128 float scroll_y_; 128 float scroll_y_;
129 unsigned int touch_id_; 129 int touch_id_;
130 130
131 DISALLOW_COPY_AND_ASSIGN(GestureEventConsumeDelegate); 131 DISALLOW_COPY_AND_ASSIGN(GestureEventConsumeDelegate);
132 }; 132 };
133 133
134 class QueueTouchEventDelegate : public GestureEventConsumeDelegate { 134 class QueueTouchEventDelegate : public GestureEventConsumeDelegate {
135 public: 135 public:
136 explicit QueueTouchEventDelegate(RootWindow* root_window) 136 explicit QueueTouchEventDelegate(RootWindow* root_window)
137 : window_(NULL), 137 : window_(NULL),
138 root_window_(root_window) { 138 root_window_(root_window) {
139 } 139 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 return new TimerTestGestureSequence(); 255 return new TimerTestGestureSequence();
256 } 256 }
257 }; 257 };
258 258
259 void SendScrollEvents(RootWindow* root_window, 259 void SendScrollEvents(RootWindow* root_window,
260 int x_start, 260 int x_start,
261 int y_start, 261 int y_start,
262 base::TimeDelta time_start, 262 base::TimeDelta time_start,
263 int dx, 263 int dx,
264 int dy, 264 int dy,
265 int touch_id,
265 int time_step, 266 int time_step,
266 int num_steps, 267 int num_steps,
267 GestureEventConsumeDelegate* delegate) { 268 GestureEventConsumeDelegate* delegate) {
268 int x = x_start; 269 int x = x_start;
269 int y = y_start; 270 int y = y_start;
270 base::TimeDelta time = time_start; 271 base::TimeDelta time = time_start;
271 272
272 for (int i = 0; i < num_steps; i++) { 273 for (int i = 0; i < num_steps; i++) {
273 delegate->Reset(); 274 delegate->Reset();
274 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), 0); 275 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), touch_id);
275 Event::TestApi test_move(&move); 276 Event::TestApi test_move(&move);
276 test_move.set_time_stamp(time); 277 test_move.set_time_stamp(time);
277 root_window->DispatchTouchEvent(&move); 278 root_window->DispatchTouchEvent(&move);
278 x += dx; 279 x += dx;
279 y += dy; 280 y += dy;
280 time = time + base::TimeDelta::FromMilliseconds(time_step); 281 time = time + base::TimeDelta::FromMilliseconds(time_step);
281 } 282 }
282 } 283 }
283 284
284 void SendScrollEvent(RootWindow* root_window, 285 void SendScrollEvent(RootWindow* root_window,
285 int x, 286 int x,
286 int y, 287 int y,
288 int touch_id,
287 GestureEventConsumeDelegate* delegate) { 289 GestureEventConsumeDelegate* delegate) {
288 delegate->Reset(); 290 delegate->Reset();
289 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), 0); 291 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), touch_id);
290 root_window->DispatchTouchEvent(&move); 292 root_window->DispatchTouchEvent(&move);
291 } 293 }
292 294
293 const int kBufferedPoints = 10; 295 const int kBufferedPoints = 10;
294 296
295 } // namespace 297 } // namespace
296 298
297 typedef AuraTestBase GestureRecognizerTest; 299 typedef AuraTestBase GestureRecognizerTest;
298 300
299 // Check that appropriate touch events generate tap gesture events. 301 // Check that appropriate touch events generate tap gesture events.
300 TEST_F(GestureRecognizerTest, GestureEventTap) { 302 TEST_F(GestureRecognizerTest, GestureEventTap) {
301 scoped_ptr<GestureEventConsumeDelegate> delegate( 303 scoped_ptr<GestureEventConsumeDelegate> delegate(
302 new GestureEventConsumeDelegate()); 304 new GestureEventConsumeDelegate());
303 const int kWindowWidth = 123; 305 const int kWindowWidth = 123;
304 const int kWindowHeight = 45; 306 const int kWindowHeight = 45;
307 const int kTouchId = 2;
305 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 308 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
306 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 309 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
307 delegate.get(), -1234, bounds, NULL)); 310 delegate.get(), -1234, bounds, NULL));
308 311
309 delegate->Reset(); 312 delegate->Reset();
310 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 313 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
311 root_window()->DispatchTouchEvent(&press); 314 root_window()->DispatchTouchEvent(&press);
312 EXPECT_FALSE(delegate->tap()); 315 EXPECT_FALSE(delegate->tap());
313 EXPECT_TRUE(delegate->tap_down()); 316 EXPECT_TRUE(delegate->tap_down());
314 EXPECT_FALSE(delegate->double_tap()); 317 EXPECT_FALSE(delegate->double_tap());
315 EXPECT_FALSE(delegate->scroll_begin()); 318 EXPECT_FALSE(delegate->scroll_begin());
316 EXPECT_FALSE(delegate->scroll_update()); 319 EXPECT_FALSE(delegate->scroll_update());
317 EXPECT_FALSE(delegate->scroll_end()); 320 EXPECT_FALSE(delegate->scroll_end());
318 EXPECT_FALSE(delegate->long_press()); 321 EXPECT_FALSE(delegate->long_press());
319 322
320 // Make sure there is enough delay before the touch is released so that it is 323 // Make sure there is enough delay before the touch is released so that it is
321 // recognized as a tap. 324 // recognized as a tap.
322 delegate->Reset(); 325 delegate->Reset();
323 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 326 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
324 Event::TestApi test_release(&release); 327 Event::TestApi test_release(&release);
325 test_release.set_time_stamp(press.time_stamp() + 328 test_release.set_time_stamp(press.time_stamp() +
326 base::TimeDelta::FromMilliseconds(50)); 329 base::TimeDelta::FromMilliseconds(50));
327 root_window()->DispatchTouchEvent(&release); 330 root_window()->DispatchTouchEvent(&release);
328 EXPECT_TRUE(delegate->tap()); 331 EXPECT_TRUE(delegate->tap());
329 EXPECT_FALSE(delegate->tap_down()); 332 EXPECT_FALSE(delegate->tap_down());
330 EXPECT_FALSE(delegate->double_tap()); 333 EXPECT_FALSE(delegate->double_tap());
331 EXPECT_FALSE(delegate->scroll_begin()); 334 EXPECT_FALSE(delegate->scroll_begin());
332 EXPECT_FALSE(delegate->scroll_update()); 335 EXPECT_FALSE(delegate->scroll_update());
333 EXPECT_FALSE(delegate->scroll_end()); 336 EXPECT_FALSE(delegate->scroll_end());
334 } 337 }
335 338
336 // Check that appropriate touch events generate scroll gesture events. 339 // Check that appropriate touch events generate scroll gesture events.
337 TEST_F(GestureRecognizerTest, GestureEventScroll) { 340 TEST_F(GestureRecognizerTest, GestureEventScroll) {
338 scoped_ptr<GestureEventConsumeDelegate> delegate( 341 scoped_ptr<GestureEventConsumeDelegate> delegate(
339 new GestureEventConsumeDelegate()); 342 new GestureEventConsumeDelegate());
340 const int kWindowWidth = 123; 343 const int kWindowWidth = 123;
341 const int kWindowHeight = 45; 344 const int kWindowHeight = 45;
345 const int kTouchId = 5;
342 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 346 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
343 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 347 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
344 delegate.get(), -1234, bounds, NULL)); 348 delegate.get(), -1234, bounds, NULL));
345 349
346 delegate->Reset(); 350 delegate->Reset();
347 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 351 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
348 root_window()->DispatchTouchEvent(&press); 352 root_window()->DispatchTouchEvent(&press);
349 EXPECT_FALSE(delegate->tap()); 353 EXPECT_FALSE(delegate->tap());
350 EXPECT_TRUE(delegate->tap_down()); 354 EXPECT_TRUE(delegate->tap_down());
351 EXPECT_FALSE(delegate->double_tap()); 355 EXPECT_FALSE(delegate->double_tap());
352 EXPECT_FALSE(delegate->scroll_begin()); 356 EXPECT_FALSE(delegate->scroll_begin());
353 EXPECT_FALSE(delegate->scroll_update()); 357 EXPECT_FALSE(delegate->scroll_update());
354 EXPECT_FALSE(delegate->scroll_end()); 358 EXPECT_FALSE(delegate->scroll_end());
355 359
356 // Move the touch-point enough so that it is considered as a scroll. This 360 // Move the touch-point enough so that it is considered as a scroll. This
357 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures. 361 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures.
358 // The first movement is diagonal, to ensure that we have a free scroll, 362 // The first movement is diagonal, to ensure that we have a free scroll,
359 // and not a rail scroll. 363 // and not a rail scroll.
360 SendScrollEvent(root_window(), 130, 230, delegate.get()); 364 SendScrollEvent(root_window(), 130, 230, kTouchId, delegate.get());
361 EXPECT_FALSE(delegate->tap()); 365 EXPECT_FALSE(delegate->tap());
362 EXPECT_FALSE(delegate->tap_down()); 366 EXPECT_FALSE(delegate->tap_down());
363 EXPECT_FALSE(delegate->double_tap()); 367 EXPECT_FALSE(delegate->double_tap());
364 EXPECT_TRUE(delegate->scroll_begin()); 368 EXPECT_TRUE(delegate->scroll_begin());
365 EXPECT_TRUE(delegate->scroll_update()); 369 EXPECT_TRUE(delegate->scroll_update());
366 EXPECT_FALSE(delegate->scroll_end()); 370 EXPECT_FALSE(delegate->scroll_end());
367 EXPECT_EQ(29, delegate->scroll_x()); 371 EXPECT_EQ(29, delegate->scroll_x());
368 EXPECT_EQ(29, delegate->scroll_y()); 372 EXPECT_EQ(29, delegate->scroll_y());
369 373
370 // Move some more to generate a few more scroll updates. 374 // Move some more to generate a few more scroll updates.
371 SendScrollEvent(root_window(), 110, 211, delegate.get()); 375 SendScrollEvent(root_window(), 110, 211, kTouchId, delegate.get());
372 EXPECT_FALSE(delegate->tap()); 376 EXPECT_FALSE(delegate->tap());
373 EXPECT_FALSE(delegate->tap_down()); 377 EXPECT_FALSE(delegate->tap_down());
374 EXPECT_FALSE(delegate->double_tap()); 378 EXPECT_FALSE(delegate->double_tap());
375 EXPECT_FALSE(delegate->scroll_begin()); 379 EXPECT_FALSE(delegate->scroll_begin());
376 EXPECT_TRUE(delegate->scroll_update()); 380 EXPECT_TRUE(delegate->scroll_update());
377 EXPECT_FALSE(delegate->scroll_end()); 381 EXPECT_FALSE(delegate->scroll_end());
378 EXPECT_EQ(-20, delegate->scroll_x()); 382 EXPECT_EQ(-20, delegate->scroll_x());
379 EXPECT_EQ(-19, delegate->scroll_y()); 383 EXPECT_EQ(-19, delegate->scroll_y());
380 384
381 SendScrollEvent(root_window(), 140, 215, delegate.get()); 385 SendScrollEvent(root_window(), 140, 215, kTouchId, delegate.get());
382 EXPECT_FALSE(delegate->tap()); 386 EXPECT_FALSE(delegate->tap());
383 EXPECT_FALSE(delegate->tap_down()); 387 EXPECT_FALSE(delegate->tap_down());
384 EXPECT_FALSE(delegate->double_tap()); 388 EXPECT_FALSE(delegate->double_tap());
385 EXPECT_FALSE(delegate->scroll_begin()); 389 EXPECT_FALSE(delegate->scroll_begin());
386 EXPECT_TRUE(delegate->scroll_update()); 390 EXPECT_TRUE(delegate->scroll_update());
387 EXPECT_FALSE(delegate->scroll_end()); 391 EXPECT_FALSE(delegate->scroll_end());
388 EXPECT_EQ(30, delegate->scroll_x()); 392 EXPECT_EQ(30, delegate->scroll_x());
389 EXPECT_EQ(4, delegate->scroll_y()); 393 EXPECT_EQ(4, delegate->scroll_y());
390 394
391 // Release the touch. This should end the scroll. 395 // Release the touch. This should end the scroll.
392 delegate->Reset(); 396 delegate->Reset();
393 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 397 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
394 Event::TestApi test_release(&release); 398 Event::TestApi test_release(&release);
395 test_release.set_time_stamp(press.time_stamp() + 399 test_release.set_time_stamp(press.time_stamp() +
396 base::TimeDelta::FromMilliseconds(50)); 400 base::TimeDelta::FromMilliseconds(50));
397 root_window()->DispatchTouchEvent(&release); 401 root_window()->DispatchTouchEvent(&release);
398 EXPECT_FALSE(delegate->tap()); 402 EXPECT_FALSE(delegate->tap());
399 EXPECT_FALSE(delegate->tap_down()); 403 EXPECT_FALSE(delegate->tap_down());
400 EXPECT_FALSE(delegate->double_tap()); 404 EXPECT_FALSE(delegate->double_tap());
401 EXPECT_FALSE(delegate->scroll_begin()); 405 EXPECT_FALSE(delegate->scroll_begin());
402 EXPECT_FALSE(delegate->scroll_update()); 406 EXPECT_FALSE(delegate->scroll_update());
403 EXPECT_TRUE(delegate->scroll_end()); 407 EXPECT_TRUE(delegate->scroll_end());
404 } 408 }
405 409
406 // Check that appropriate touch events generate long press events 410 // Check that appropriate touch events generate long press events
407 TEST_F(GestureRecognizerTest, GestureEventLongPress) { 411 TEST_F(GestureRecognizerTest, GestureEventLongPress) {
408 scoped_ptr<GestureEventConsumeDelegate> delegate( 412 scoped_ptr<GestureEventConsumeDelegate> delegate(
409 new GestureEventConsumeDelegate()); 413 new GestureEventConsumeDelegate());
410 const int kWindowWidth = 123; 414 const int kWindowWidth = 123;
411 const int kWindowHeight = 45; 415 const int kWindowHeight = 45;
416 const int kTouchId = 2;
412 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 417 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
413 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 418 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
414 delegate.get(), -1234, bounds, NULL)); 419 delegate.get(), -1234, bounds, NULL));
415 420
416 delegate->Reset(); 421 delegate->Reset();
417 422
418 TestGestureRecognizer* gesture_recognizer = 423 TestGestureRecognizer* gesture_recognizer =
419 new TestGestureRecognizer(); 424 new TestGestureRecognizer();
420 TimerTestGestureSequence* gesture_sequence = 425 TimerTestGestureSequence* gesture_sequence =
421 static_cast<TimerTestGestureSequence*>( 426 static_cast<TimerTestGestureSequence*>(
422 gesture_recognizer->GetGestureSequenceForTesting()); 427 gesture_recognizer->GetGestureSequenceForTesting());
423 428
424 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer); 429 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer);
425 430
426 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 431 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
427 RootWindow::GetInstance()->DispatchTouchEvent(&press1); 432 RootWindow::GetInstance()->DispatchTouchEvent(&press1);
428 EXPECT_TRUE(delegate->tap_down()); 433 EXPECT_TRUE(delegate->tap_down());
429 434
430 // We haven't pressed long enough for a long press to occur 435 // We haven't pressed long enough for a long press to occur
431 EXPECT_FALSE(delegate->long_press()); 436 EXPECT_FALSE(delegate->long_press());
432 437
433 // Wait until the timer runs out 438 // Wait until the timer runs out
434 gesture_sequence->ForceTimeout(); 439 gesture_sequence->ForceTimeout();
435 EXPECT_TRUE(delegate->long_press()); 440 EXPECT_TRUE(delegate->long_press());
436 EXPECT_EQ(0u, delegate->touch_id()); 441 EXPECT_EQ(0, delegate->touch_id());
437 442
438 delegate->Reset(); 443 delegate->Reset();
439 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 444 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
440 RootWindow::GetInstance()->DispatchTouchEvent(&release1); 445 RootWindow::GetInstance()->DispatchTouchEvent(&release1);
441 EXPECT_FALSE(delegate->long_press()); 446 EXPECT_FALSE(delegate->long_press());
442 } 447 }
443 448
444 // Check that scrolling cancels a long press 449 // Check that scrolling cancels a long press
445 TEST_F(GestureRecognizerTest, GestureEventLongPressCancelledByScroll) { 450 TEST_F(GestureRecognizerTest, GestureEventLongPressCancelledByScroll) {
446 scoped_ptr<GestureEventConsumeDelegate> delegate( 451 scoped_ptr<GestureEventConsumeDelegate> delegate(
447 new GestureEventConsumeDelegate()); 452 new GestureEventConsumeDelegate());
448 const int kWindowWidth = 123; 453 const int kWindowWidth = 123;
449 const int kWindowHeight = 45; 454 const int kWindowHeight = 45;
455 const int kTouchId = 6;
450 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 456 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
451 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 457 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
452 delegate.get(), -1234, bounds, NULL)); 458 delegate.get(), -1234, bounds, NULL));
453 459
454 delegate->Reset(); 460 delegate->Reset();
455 461
456 TestGestureRecognizer* gesture_recognizer = 462 TestGestureRecognizer* gesture_recognizer =
457 new TestGestureRecognizer(); 463 new TestGestureRecognizer();
458 TimerTestGestureSequence* gesture_sequence = 464 TimerTestGestureSequence* gesture_sequence =
459 static_cast<TimerTestGestureSequence*>( 465 static_cast<TimerTestGestureSequence*>(
460 gesture_recognizer->GetGestureSequenceForTesting()); 466 gesture_recognizer->GetGestureSequenceForTesting());
461 467
462 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer); 468 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer);
463 469
464 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 470 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
465 RootWindow::GetInstance()->DispatchTouchEvent(&press1); 471 RootWindow::GetInstance()->DispatchTouchEvent(&press1);
466 EXPECT_TRUE(delegate->tap_down()); 472 EXPECT_TRUE(delegate->tap_down());
467 473
468 // We haven't pressed long enough for a long press to occur 474 // We haven't pressed long enough for a long press to occur
469 EXPECT_FALSE(delegate->long_press()); 475 EXPECT_FALSE(delegate->long_press());
470 476
471 // Scroll around, to cancel the long press 477 // Scroll around, to cancel the long press
472 SendScrollEvent(root_window(), 130, 230, delegate.get()); 478 SendScrollEvent(root_window(), 130, 230, kTouchId, delegate.get());
473 // Wait until the timer runs out 479 // Wait until the timer runs out
474 gesture_sequence->ForceTimeout(); 480 gesture_sequence->ForceTimeout();
475 EXPECT_FALSE(delegate->long_press()); 481 EXPECT_FALSE(delegate->long_press());
476 482
477 delegate->Reset(); 483 delegate->Reset();
478 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 484 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
479 RootWindow::GetInstance()->DispatchTouchEvent(&release1); 485 RootWindow::GetInstance()->DispatchTouchEvent(&release1);
480 EXPECT_FALSE(delegate->long_press()); 486 EXPECT_FALSE(delegate->long_press());
481 } 487 }
482 488
483 // Check that pinching cancels a long press 489 // Check that pinching cancels a long press
484 TEST_F(GestureRecognizerTest, GestureEventLongPressCancelledByPinch) { 490 TEST_F(GestureRecognizerTest, GestureEventLongPressCancelledByPinch) {
485 scoped_ptr<GestureEventConsumeDelegate> delegate( 491 scoped_ptr<GestureEventConsumeDelegate> delegate(
486 new GestureEventConsumeDelegate()); 492 new GestureEventConsumeDelegate());
487 const int kWindowWidth = 300; 493 const int kWindowWidth = 300;
488 const int kWindowHeight = 400; 494 const int kWindowHeight = 400;
495 const int kTouchId1 = 8;
496 const int kTouchId2 = 2;
489 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight); 497 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight);
490 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 498 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
491 delegate.get(), -1234, bounds, NULL)); 499 delegate.get(), -1234, bounds, NULL));
492 500
493 TestGestureRecognizer* gesture_recognizer = 501 TestGestureRecognizer* gesture_recognizer =
494 new TestGestureRecognizer(); 502 new TestGestureRecognizer();
495 TimerTestGestureSequence* gesture_sequence = 503 TimerTestGestureSequence* gesture_sequence =
496 static_cast<TimerTestGestureSequence*>( 504 static_cast<TimerTestGestureSequence*>(
497 gesture_recognizer->GetGestureSequenceForTesting()); 505 gesture_recognizer->GetGestureSequenceForTesting());
498 506
499 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer); 507 RootWindow::GetInstance()->SetGestureRecognizerForTesting(gesture_recognizer);
500 508
501 delegate->Reset(); 509 delegate->Reset();
502 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 510 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
503 RootWindow::GetInstance()->DispatchTouchEvent(&press); 511 RootWindow::GetInstance()->DispatchTouchEvent(&press);
504 EXPECT_TRUE(delegate->tap_down()); 512 EXPECT_TRUE(delegate->tap_down());
505 513
506 // We haven't pressed long enough for a long press to occur 514 // We haven't pressed long enough for a long press to occur
507 EXPECT_FALSE(delegate->long_press()); 515 EXPECT_FALSE(delegate->long_press());
508 516
509 // Pinch, to cancel the long press 517 // Pinch, to cancel the long press
510 delegate->Reset(); 518 delegate->Reset();
511 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 519 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), kTouchId2);
512 RootWindow::GetInstance()->DispatchTouchEvent(&press2); 520 RootWindow::GetInstance()->DispatchTouchEvent(&press2);
513 EXPECT_TRUE(delegate->tap_down()); 521 EXPECT_TRUE(delegate->tap_down());
514 EXPECT_TRUE(delegate->pinch_begin()); 522 EXPECT_TRUE(delegate->pinch_begin());
515 523
516 // Wait until the timer runs out 524 // Wait until the timer runs out
517 gesture_sequence->ForceTimeout(); 525 gesture_sequence->ForceTimeout();
518 526
519 // No long press occurred 527 // No long press occurred
520 EXPECT_FALSE(delegate->long_press()); 528 EXPECT_FALSE(delegate->long_press());
521 529
522 delegate->Reset(); 530 delegate->Reset();
523 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 531 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId1);
524 RootWindow::GetInstance()->DispatchTouchEvent(&release1); 532 RootWindow::GetInstance()->DispatchTouchEvent(&release1);
525 EXPECT_FALSE(delegate->long_press()); 533 EXPECT_FALSE(delegate->long_press());
526 } 534 }
527 535
528 // Check that horizontal scroll gestures cause scrolls on horizontal rails. 536 // Check that horizontal scroll gestures cause scrolls on horizontal rails.
529 // Also tests that horizontal rails can be broken. 537 // Also tests that horizontal rails can be broken.
530 TEST_F(GestureRecognizerTest, GestureEventHorizontalRailScroll) { 538 TEST_F(GestureRecognizerTest, GestureEventHorizontalRailScroll) {
531 scoped_ptr<GestureEventConsumeDelegate> delegate( 539 scoped_ptr<GestureEventConsumeDelegate> delegate(
532 new GestureEventConsumeDelegate()); 540 new GestureEventConsumeDelegate());
541 const int kTouchId = 7;
533 gfx::Rect bounds(0, 0, 1000, 1000); 542 gfx::Rect bounds(0, 0, 1000, 1000);
534 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 543 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
535 delegate.get(), -1234, bounds, NULL)); 544 delegate.get(), -1234, bounds, NULL));
536 545
537 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0); 546 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), kTouchId);
538 root_window()->DispatchTouchEvent(&press); 547 root_window()->DispatchTouchEvent(&press);
539 548
540 // Move the touch-point horizontally enough that it is considered a 549 // Move the touch-point horizontally enough that it is considered a
541 // horizontal scroll. 550 // horizontal scroll.
542 SendScrollEvent(root_window(), 20, 1, delegate.get()); 551 SendScrollEvent(root_window(), 20, 1, kTouchId, delegate.get());
543 EXPECT_EQ(0, delegate->scroll_y()); 552 EXPECT_EQ(0, delegate->scroll_y());
544 EXPECT_EQ(20, delegate->scroll_x()); 553 EXPECT_EQ(20, delegate->scroll_x());
545 554
546 SendScrollEvent(root_window(), 25, 6, delegate.get()); 555 SendScrollEvent(root_window(), 25, 6, kTouchId, delegate.get());
547 EXPECT_TRUE(delegate->scroll_update()); 556 EXPECT_TRUE(delegate->scroll_update());
548 EXPECT_EQ(5, delegate->scroll_x()); 557 EXPECT_EQ(5, delegate->scroll_x());
549 // y shouldn't change, as we're on a horizontal rail. 558 // y shouldn't change, as we're on a horizontal rail.
550 EXPECT_EQ(0, delegate->scroll_y()); 559 EXPECT_EQ(0, delegate->scroll_y());
551 560
552 // Send enough information that a velocity can be calculated for the gesture, 561 // Send enough information that a velocity can be calculated for the gesture,
553 // and we can break the rail 562 // and we can break the rail
554 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), 563 SendScrollEvents(root_window(), 1, 1, press.time_stamp(),
555 1, 100, 1, kBufferedPoints, delegate.get()); 564 1, 100, kTouchId, 1, kBufferedPoints, delegate.get());
556 565
557 SendScrollEvent(root_window(), 0, 0, delegate.get()); 566 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get());
558 SendScrollEvent(root_window(), 5, 5, delegate.get()); 567 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get());
559 568
560 // The rail should be broken 569 // The rail should be broken
561 EXPECT_TRUE(delegate->scroll_update()); 570 EXPECT_TRUE(delegate->scroll_update());
562 EXPECT_EQ(5, delegate->scroll_x()); 571 EXPECT_EQ(5, delegate->scroll_x());
563 EXPECT_EQ(5, delegate->scroll_y()); 572 EXPECT_EQ(5, delegate->scroll_y());
564 } 573 }
565 574
566 // Check that vertical scroll gestures cause scrolls on vertical rails. 575 // Check that vertical scroll gestures cause scrolls on vertical rails.
567 // Also tests that vertical rails can be broken. 576 // Also tests that vertical rails can be broken.
568 TEST_F(GestureRecognizerTest, GestureEventVerticalRailScroll) { 577 TEST_F(GestureRecognizerTest, GestureEventVerticalRailScroll) {
569 scoped_ptr<GestureEventConsumeDelegate> delegate( 578 scoped_ptr<GestureEventConsumeDelegate> delegate(
570 new GestureEventConsumeDelegate()); 579 new GestureEventConsumeDelegate());
580 const int kTouchId = 7;
571 gfx::Rect bounds(0, 0, 1000, 1000); 581 gfx::Rect bounds(0, 0, 1000, 1000);
572 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 582 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
573 delegate.get(), -1234, bounds, NULL)); 583 delegate.get(), -1234, bounds, NULL));
574 584
575 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0); 585 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), kTouchId);
576 root_window()->DispatchTouchEvent(&press); 586 root_window()->DispatchTouchEvent(&press);
577 587
578 // Move the touch-point vertically enough that it is considered a 588 // Move the touch-point vertically enough that it is considered a
579 // vertical scroll. 589 // vertical scroll.
580 SendScrollEvent(root_window(), 1, 20, delegate.get()); 590 SendScrollEvent(root_window(), 1, 20, kTouchId, delegate.get());
581 EXPECT_EQ(0, delegate->scroll_x()); 591 EXPECT_EQ(0, delegate->scroll_x());
582 EXPECT_EQ(20, delegate->scroll_y()); 592 EXPECT_EQ(20, delegate->scroll_y());
583 593
584 SendScrollEvent(root_window(), 6, 25, delegate.get()); 594 SendScrollEvent(root_window(), 6, 25, kTouchId, delegate.get());
585 EXPECT_TRUE(delegate->scroll_update()); 595 EXPECT_TRUE(delegate->scroll_update());
586 EXPECT_EQ(5, delegate->scroll_y()); 596 EXPECT_EQ(5, delegate->scroll_y());
587 // x shouldn't change, as we're on a vertical rail. 597 // x shouldn't change, as we're on a vertical rail.
588 EXPECT_EQ(0, delegate->scroll_x()); 598 EXPECT_EQ(0, delegate->scroll_x());
589 599
590 // Send enough information that a velocity can be calculated for the gesture, 600 // Send enough information that a velocity can be calculated for the gesture,
591 // and we can break the rail 601 // and we can break the rail
592 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), 602 SendScrollEvents(root_window(), 1, 1, press.time_stamp(),
593 100, 1, 1, kBufferedPoints, delegate.get()); 603 100, 1, kTouchId, 1, kBufferedPoints, delegate.get());
594 604
595 SendScrollEvent(root_window(), 0, 0, delegate.get()); 605 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get());
596 SendScrollEvent(root_window(), 5, 5, delegate.get()); 606 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get());
597 607
598 // The rail should be broken 608 // The rail should be broken
599 EXPECT_TRUE(delegate->scroll_update()); 609 EXPECT_TRUE(delegate->scroll_update());
600 EXPECT_EQ(5, delegate->scroll_x()); 610 EXPECT_EQ(5, delegate->scroll_x());
601 EXPECT_EQ(5, delegate->scroll_y()); 611 EXPECT_EQ(5, delegate->scroll_y());
602 } 612 }
603 613
604 TEST_F(GestureRecognizerTest, GestureTapFollowedByScroll) { 614 TEST_F(GestureRecognizerTest, GestureTapFollowedByScroll) {
605 // First, tap. Then, do a scroll using the same touch-id. 615 // First, tap. Then, do a scroll using the same touch-id.
606 scoped_ptr<GestureEventConsumeDelegate> delegate( 616 scoped_ptr<GestureEventConsumeDelegate> delegate(
607 new GestureEventConsumeDelegate()); 617 new GestureEventConsumeDelegate());
608 const int kWindowWidth = 123; 618 const int kWindowWidth = 123;
609 const int kWindowHeight = 45; 619 const int kWindowHeight = 45;
620 const int kTouchId = 3;
610 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 621 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
611 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 622 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
612 delegate.get(), -1234, bounds, NULL)); 623 delegate.get(), -1234, bounds, NULL));
613 624
614 delegate->Reset(); 625 delegate->Reset();
615 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 626 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
616 root_window()->DispatchTouchEvent(&press); 627 root_window()->DispatchTouchEvent(&press);
617 EXPECT_FALSE(delegate->tap()); 628 EXPECT_FALSE(delegate->tap());
618 EXPECT_TRUE(delegate->tap_down()); 629 EXPECT_TRUE(delegate->tap_down());
619 EXPECT_FALSE(delegate->double_tap()); 630 EXPECT_FALSE(delegate->double_tap());
620 EXPECT_FALSE(delegate->scroll_begin()); 631 EXPECT_FALSE(delegate->scroll_begin());
621 EXPECT_FALSE(delegate->scroll_update()); 632 EXPECT_FALSE(delegate->scroll_update());
622 EXPECT_FALSE(delegate->scroll_end()); 633 EXPECT_FALSE(delegate->scroll_end());
623 634
624 // Make sure there is enough delay before the touch is released so that it is 635 // Make sure there is enough delay before the touch is released so that it is
625 // recognized as a tap. 636 // recognized as a tap.
626 delegate->Reset(); 637 delegate->Reset();
627 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 638 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
628 Event::TestApi test_release(&release); 639 Event::TestApi test_release(&release);
629 test_release.set_time_stamp(press.time_stamp() + 640 test_release.set_time_stamp(press.time_stamp() +
630 base::TimeDelta::FromMilliseconds(50)); 641 base::TimeDelta::FromMilliseconds(50));
631 root_window()->DispatchTouchEvent(&release); 642 root_window()->DispatchTouchEvent(&release);
632 EXPECT_TRUE(delegate->tap()); 643 EXPECT_TRUE(delegate->tap());
633 EXPECT_FALSE(delegate->tap_down()); 644 EXPECT_FALSE(delegate->tap_down());
634 EXPECT_FALSE(delegate->double_tap()); 645 EXPECT_FALSE(delegate->double_tap());
635 EXPECT_FALSE(delegate->scroll_begin()); 646 EXPECT_FALSE(delegate->scroll_begin());
636 EXPECT_FALSE(delegate->scroll_update()); 647 EXPECT_FALSE(delegate->scroll_update());
637 EXPECT_FALSE(delegate->scroll_end()); 648 EXPECT_FALSE(delegate->scroll_end());
638 649
639 // Now, do a scroll gesture. Delay it sufficiently so that it doesn't trigger 650 // Now, do a scroll gesture. Delay it sufficiently so that it doesn't trigger
640 // a double-tap. 651 // a double-tap.
641 delegate->Reset(); 652 delegate->Reset();
642 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 653 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId);
643 Event::TestApi test_release1(&press1); 654 Event::TestApi test_release1(&press1);
644 test_release1.set_time_stamp(release.time_stamp() + 655 test_release1.set_time_stamp(release.time_stamp() +
645 base::TimeDelta::FromMilliseconds(1000)); 656 base::TimeDelta::FromMilliseconds(1000));
646 root_window()->DispatchTouchEvent(&press1); 657 root_window()->DispatchTouchEvent(&press1);
647 EXPECT_FALSE(delegate->tap()); 658 EXPECT_FALSE(delegate->tap());
648 EXPECT_TRUE(delegate->tap_down()); 659 EXPECT_TRUE(delegate->tap_down());
649 EXPECT_FALSE(delegate->double_tap()); 660 EXPECT_FALSE(delegate->double_tap());
650 EXPECT_FALSE(delegate->scroll_begin()); 661 EXPECT_FALSE(delegate->scroll_begin());
651 EXPECT_FALSE(delegate->scroll_update()); 662 EXPECT_FALSE(delegate->scroll_update());
652 EXPECT_FALSE(delegate->scroll_end()); 663 EXPECT_FALSE(delegate->scroll_end());
653 664
654 // Move the touch-point enough so that it is considered as a scroll. This 665 // Move the touch-point enough so that it is considered as a scroll. This
655 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures. 666 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures.
656 // The first movement is diagonal, to ensure that we have a free scroll, 667 // The first movement is diagonal, to ensure that we have a free scroll,
657 // and not a rail scroll. 668 // and not a rail scroll.
658 delegate->Reset(); 669 delegate->Reset();
659 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(130, 230), 0); 670 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(130, 230), kTouchId);
660 root_window()->DispatchTouchEvent(&move); 671 root_window()->DispatchTouchEvent(&move);
661 EXPECT_FALSE(delegate->tap()); 672 EXPECT_FALSE(delegate->tap());
662 EXPECT_FALSE(delegate->tap_down()); 673 EXPECT_FALSE(delegate->tap_down());
663 EXPECT_FALSE(delegate->double_tap()); 674 EXPECT_FALSE(delegate->double_tap());
664 EXPECT_TRUE(delegate->scroll_begin()); 675 EXPECT_TRUE(delegate->scroll_begin());
665 EXPECT_TRUE(delegate->scroll_update()); 676 EXPECT_TRUE(delegate->scroll_update());
666 EXPECT_FALSE(delegate->scroll_end()); 677 EXPECT_FALSE(delegate->scroll_end());
667 EXPECT_EQ(29, delegate->scroll_x()); 678 EXPECT_EQ(29, delegate->scroll_x());
668 EXPECT_EQ(29, delegate->scroll_y()); 679 EXPECT_EQ(29, delegate->scroll_y());
669 680
670 // Move some more to generate a few more scroll updates. 681 // Move some more to generate a few more scroll updates.
671 delegate->Reset(); 682 delegate->Reset();
672 TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(110, 211), 0); 683 TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(110, 211), kTouchId);
673 root_window()->DispatchTouchEvent(&move1); 684 root_window()->DispatchTouchEvent(&move1);
674 EXPECT_FALSE(delegate->tap()); 685 EXPECT_FALSE(delegate->tap());
675 EXPECT_FALSE(delegate->tap_down()); 686 EXPECT_FALSE(delegate->tap_down());
676 EXPECT_FALSE(delegate->double_tap()); 687 EXPECT_FALSE(delegate->double_tap());
677 EXPECT_FALSE(delegate->scroll_begin()); 688 EXPECT_FALSE(delegate->scroll_begin());
678 EXPECT_TRUE(delegate->scroll_update()); 689 EXPECT_TRUE(delegate->scroll_update());
679 EXPECT_FALSE(delegate->scroll_end()); 690 EXPECT_FALSE(delegate->scroll_end());
680 EXPECT_EQ(-20, delegate->scroll_x()); 691 EXPECT_EQ(-20, delegate->scroll_x());
681 EXPECT_EQ(-19, delegate->scroll_y()); 692 EXPECT_EQ(-19, delegate->scroll_y());
682 693
683 delegate->Reset(); 694 delegate->Reset();
684 TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(140, 215), 0); 695 TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(140, 215), kTouchId);
685 root_window()->DispatchTouchEvent(&move2); 696 root_window()->DispatchTouchEvent(&move2);
686 EXPECT_FALSE(delegate->tap()); 697 EXPECT_FALSE(delegate->tap());
687 EXPECT_FALSE(delegate->tap_down()); 698 EXPECT_FALSE(delegate->tap_down());
688 EXPECT_FALSE(delegate->double_tap()); 699 EXPECT_FALSE(delegate->double_tap());
689 EXPECT_FALSE(delegate->scroll_begin()); 700 EXPECT_FALSE(delegate->scroll_begin());
690 EXPECT_TRUE(delegate->scroll_update()); 701 EXPECT_TRUE(delegate->scroll_update());
691 EXPECT_FALSE(delegate->scroll_end()); 702 EXPECT_FALSE(delegate->scroll_end());
692 EXPECT_EQ(30, delegate->scroll_x()); 703 EXPECT_EQ(30, delegate->scroll_x());
693 EXPECT_EQ(4, delegate->scroll_y()); 704 EXPECT_EQ(4, delegate->scroll_y());
694 705
695 // Release the touch. This should end the scroll. 706 // Release the touch. This should end the scroll.
696 delegate->Reset(); 707 delegate->Reset();
697 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 708 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId);
698 root_window()->DispatchTouchEvent(&release1); 709 root_window()->DispatchTouchEvent(&release1);
699 EXPECT_FALSE(delegate->tap()); 710 EXPECT_FALSE(delegate->tap());
700 EXPECT_FALSE(delegate->tap_down()); 711 EXPECT_FALSE(delegate->tap_down());
701 EXPECT_FALSE(delegate->double_tap()); 712 EXPECT_FALSE(delegate->double_tap());
702 EXPECT_FALSE(delegate->scroll_begin()); 713 EXPECT_FALSE(delegate->scroll_begin());
703 EXPECT_FALSE(delegate->scroll_update()); 714 EXPECT_FALSE(delegate->scroll_update());
704 EXPECT_TRUE(delegate->scroll_end()); 715 EXPECT_TRUE(delegate->scroll_end());
705 } 716 }
706 717
707 // Check that unprocessed gesture events generate appropriate synthetic mouse 718 // Check that unprocessed gesture events generate appropriate synthetic mouse
708 // events. 719 // events.
709 TEST_F(GestureRecognizerTest, GestureTapSyntheticMouse) { 720 TEST_F(GestureRecognizerTest, GestureTapSyntheticMouse) {
710 scoped_ptr<GestureEventSynthDelegate> delegate( 721 scoped_ptr<GestureEventSynthDelegate> delegate(
711 new GestureEventSynthDelegate()); 722 new GestureEventSynthDelegate());
712 scoped_ptr<Window> window(CreateTestWindowWithDelegate(delegate.get(), -1234, 723 scoped_ptr<Window> window(CreateTestWindowWithDelegate(delegate.get(), -1234,
713 gfx::Rect(0, 0, 123, 45), NULL)); 724 gfx::Rect(0, 0, 123, 45), NULL));
714 725
715 delegate->Reset(); 726 delegate->Reset();
716 GestureEvent tap(ui::ET_GESTURE_TAP, 20, 20, 0, base::Time::Now(), 0, 0); 727 GestureEvent tap(ui::ET_GESTURE_TAP, 20, 20, 0, base::Time::Now(), 0, 6);
717 root_window()->DispatchGestureEvent(&tap); 728 root_window()->DispatchGestureEvent(&tap);
718 EXPECT_TRUE(delegate->mouse_enter()); 729 EXPECT_TRUE(delegate->mouse_enter());
719 EXPECT_TRUE(delegate->mouse_press()); 730 EXPECT_TRUE(delegate->mouse_press());
720 EXPECT_TRUE(delegate->mouse_release()); 731 EXPECT_TRUE(delegate->mouse_release());
721 EXPECT_TRUE(delegate->mouse_exit()); 732 EXPECT_TRUE(delegate->mouse_exit());
722 } 733 }
723 734
724 TEST_F(GestureRecognizerTest, AsynchronousGestureRecognition) { 735 TEST_F(GestureRecognizerTest, AsynchronousGestureRecognition) {
725 scoped_ptr<QueueTouchEventDelegate> queued_delegate( 736 scoped_ptr<QueueTouchEventDelegate> queued_delegate(
726 new QueueTouchEventDelegate(root_window())); 737 new QueueTouchEventDelegate(root_window()));
727 const int kWindowWidth = 123; 738 const int kWindowWidth = 123;
728 const int kWindowHeight = 45; 739 const int kWindowHeight = 45;
740 const int kTouchId1 = 6;
741 const int kTouchId2 = 4;
729 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); 742 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight);
730 scoped_ptr<aura::Window> queue(CreateTestWindowWithDelegate( 743 scoped_ptr<aura::Window> queue(CreateTestWindowWithDelegate(
731 queued_delegate.get(), -1234, bounds, NULL)); 744 queued_delegate.get(), -1234, bounds, NULL));
732 745
733 queued_delegate->set_window(queue.get()); 746 queued_delegate->set_window(queue.get());
734 747
735 // Touch down on the window. This should not generate any gesture event. 748 // Touch down on the window. This should not generate any gesture event.
736 queued_delegate->Reset(); 749 queued_delegate->Reset();
737 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 750 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
738 root_window()->DispatchTouchEvent(&press); 751 root_window()->DispatchTouchEvent(&press);
739 EXPECT_FALSE(queued_delegate->tap()); 752 EXPECT_FALSE(queued_delegate->tap());
740 EXPECT_FALSE(queued_delegate->tap_down()); 753 EXPECT_FALSE(queued_delegate->tap_down());
741 EXPECT_FALSE(queued_delegate->double_tap()); 754 EXPECT_FALSE(queued_delegate->double_tap());
742 EXPECT_FALSE(queued_delegate->scroll_begin()); 755 EXPECT_FALSE(queued_delegate->scroll_begin());
743 EXPECT_FALSE(queued_delegate->scroll_update()); 756 EXPECT_FALSE(queued_delegate->scroll_update());
744 EXPECT_FALSE(queued_delegate->scroll_end()); 757 EXPECT_FALSE(queued_delegate->scroll_end());
745 758
746 // Introduce some delay before the touch is released so that it is recognized 759 // Introduce some delay before the touch is released so that it is recognized
747 // as a tap. However, this still should not create any gesture events. 760 // as a tap. However, this still should not create any gesture events.
748 queued_delegate->Reset(); 761 queued_delegate->Reset();
749 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 762 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId1);
750 Event::TestApi test_release(&release); 763 Event::TestApi test_release(&release);
751 test_release.set_time_stamp(press.time_stamp() + 764 test_release.set_time_stamp(press.time_stamp() +
752 base::TimeDelta::FromMilliseconds(50)); 765 base::TimeDelta::FromMilliseconds(50));
753 root_window()->DispatchTouchEvent(&release); 766 root_window()->DispatchTouchEvent(&release);
754 EXPECT_FALSE(queued_delegate->tap()); 767 EXPECT_FALSE(queued_delegate->tap());
755 EXPECT_FALSE(queued_delegate->tap_down()); 768 EXPECT_FALSE(queued_delegate->tap_down());
756 EXPECT_FALSE(queued_delegate->double_tap()); 769 EXPECT_FALSE(queued_delegate->double_tap());
757 EXPECT_FALSE(queued_delegate->scroll_begin()); 770 EXPECT_FALSE(queued_delegate->scroll_begin());
758 EXPECT_FALSE(queued_delegate->scroll_update()); 771 EXPECT_FALSE(queued_delegate->scroll_update());
759 EXPECT_FALSE(queued_delegate->scroll_end()); 772 EXPECT_FALSE(queued_delegate->scroll_end());
760 773
761 // Create another window, and place a touch-down on it. This should create a 774 // Create another window, and place a touch-down on it. This should create a
762 // tap-down gesture. 775 // tap-down gesture.
763 scoped_ptr<GestureEventConsumeDelegate> delegate( 776 scoped_ptr<GestureEventConsumeDelegate> delegate(
764 new GestureEventConsumeDelegate()); 777 new GestureEventConsumeDelegate());
765 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 778 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
766 delegate.get(), -2345, gfx::Rect(0, 0, 50, 50), NULL)); 779 delegate.get(), -2345, gfx::Rect(0, 0, 50, 50), NULL));
767 delegate->Reset(); 780 delegate->Reset();
768 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), 0); 781 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), kTouchId2);
769 root_window()->DispatchTouchEvent(&press2); 782 root_window()->DispatchTouchEvent(&press2);
770 EXPECT_FALSE(delegate->tap()); 783 EXPECT_FALSE(delegate->tap());
771 EXPECT_TRUE(delegate->tap_down()); 784 EXPECT_TRUE(delegate->tap_down());
772 EXPECT_FALSE(delegate->double_tap()); 785 EXPECT_FALSE(delegate->double_tap());
773 EXPECT_FALSE(delegate->scroll_begin()); 786 EXPECT_FALSE(delegate->scroll_begin());
774 EXPECT_FALSE(delegate->scroll_update()); 787 EXPECT_FALSE(delegate->scroll_update());
775 EXPECT_FALSE(delegate->scroll_end()); 788 EXPECT_FALSE(delegate->scroll_end());
776 789
777 TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), 0); 790 TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), kTouchId2);
778 root_window()->DispatchTouchEvent(&release2); 791 root_window()->DispatchTouchEvent(&release2);
779 792
780 // Process the first queued event. 793 // Process the first queued event.
781 queued_delegate->Reset(); 794 queued_delegate->Reset();
782 queued_delegate->ReceivedAck(); 795 queued_delegate->ReceivedAck();
783 EXPECT_FALSE(queued_delegate->tap()); 796 EXPECT_FALSE(queued_delegate->tap());
784 EXPECT_TRUE(queued_delegate->tap_down()); 797 EXPECT_TRUE(queued_delegate->tap_down());
785 EXPECT_FALSE(queued_delegate->double_tap()); 798 EXPECT_FALSE(queued_delegate->double_tap());
786 EXPECT_FALSE(queued_delegate->scroll_begin()); 799 EXPECT_FALSE(queued_delegate->scroll_begin());
787 EXPECT_FALSE(queued_delegate->scroll_update()); 800 EXPECT_FALSE(queued_delegate->scroll_update());
788 EXPECT_FALSE(queued_delegate->scroll_end()); 801 EXPECT_FALSE(queued_delegate->scroll_end());
789 802
790 // Now, process the second queued event. 803 // Now, process the second queued event.
791 queued_delegate->Reset(); 804 queued_delegate->Reset();
792 queued_delegate->ReceivedAck(); 805 queued_delegate->ReceivedAck();
793 EXPECT_TRUE(queued_delegate->tap()); 806 EXPECT_TRUE(queued_delegate->tap());
794 EXPECT_FALSE(queued_delegate->tap_down()); 807 EXPECT_FALSE(queued_delegate->tap_down());
795 EXPECT_FALSE(queued_delegate->double_tap()); 808 EXPECT_FALSE(queued_delegate->double_tap());
796 EXPECT_FALSE(queued_delegate->scroll_begin()); 809 EXPECT_FALSE(queued_delegate->scroll_begin());
797 EXPECT_FALSE(queued_delegate->scroll_update()); 810 EXPECT_FALSE(queued_delegate->scroll_update());
798 EXPECT_FALSE(queued_delegate->scroll_end()); 811 EXPECT_FALSE(queued_delegate->scroll_end());
799 812
800 // Start all over. Press on the first window, then press again on the second 813 // Start all over. Press on the first window, then press again on the second
801 // window. The second press should still go to the first window. 814 // window. The second press should still go to the first window.
802 queued_delegate->Reset(); 815 queued_delegate->Reset();
803 TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 816 TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
804 root_window()->DispatchTouchEvent(&press3); 817 root_window()->DispatchTouchEvent(&press3);
805 EXPECT_FALSE(queued_delegate->tap()); 818 EXPECT_FALSE(queued_delegate->tap());
806 EXPECT_FALSE(queued_delegate->tap_down()); 819 EXPECT_FALSE(queued_delegate->tap_down());
807 EXPECT_FALSE(queued_delegate->double_tap()); 820 EXPECT_FALSE(queued_delegate->double_tap());
808 EXPECT_FALSE(queued_delegate->scroll_begin()); 821 EXPECT_FALSE(queued_delegate->scroll_begin());
809 EXPECT_FALSE(queued_delegate->scroll_update()); 822 EXPECT_FALSE(queued_delegate->scroll_update());
810 EXPECT_FALSE(queued_delegate->scroll_end()); 823 EXPECT_FALSE(queued_delegate->scroll_end());
811 824
812 queued_delegate->Reset(); 825 queued_delegate->Reset();
813 delegate->Reset(); 826 delegate->Reset();
814 TouchEvent press4(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), 1); 827 TouchEvent press4(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), kTouchId2);
815 root_window()->DispatchTouchEvent(&press4); 828 root_window()->DispatchTouchEvent(&press4);
816 EXPECT_FALSE(delegate->tap()); 829 EXPECT_FALSE(delegate->tap());
817 EXPECT_FALSE(delegate->tap_down()); 830 EXPECT_FALSE(delegate->tap_down());
818 EXPECT_FALSE(delegate->double_tap()); 831 EXPECT_FALSE(delegate->double_tap());
819 EXPECT_FALSE(delegate->scroll_begin()); 832 EXPECT_FALSE(delegate->scroll_begin());
820 EXPECT_FALSE(delegate->scroll_update()); 833 EXPECT_FALSE(delegate->scroll_update());
821 EXPECT_FALSE(delegate->scroll_end()); 834 EXPECT_FALSE(delegate->scroll_end());
822 EXPECT_FALSE(queued_delegate->tap()); 835 EXPECT_FALSE(queued_delegate->tap());
823 EXPECT_FALSE(queued_delegate->tap_down()); 836 EXPECT_FALSE(queued_delegate->tap_down());
824 EXPECT_FALSE(queued_delegate->double_tap()); 837 EXPECT_FALSE(queued_delegate->double_tap());
(...skipping 22 matching lines...) Expand all
847 EXPECT_FALSE(queued_delegate->pinch_update()); 860 EXPECT_FALSE(queued_delegate->pinch_update());
848 EXPECT_FALSE(queued_delegate->pinch_end()); 861 EXPECT_FALSE(queued_delegate->pinch_end());
849 } 862 }
850 863
851 // Check that appropriate touch events generate pinch gesture events. 864 // Check that appropriate touch events generate pinch gesture events.
852 TEST_F(GestureRecognizerTest, GestureEventPinchFromScroll) { 865 TEST_F(GestureRecognizerTest, GestureEventPinchFromScroll) {
853 scoped_ptr<GestureEventConsumeDelegate> delegate( 866 scoped_ptr<GestureEventConsumeDelegate> delegate(
854 new GestureEventConsumeDelegate()); 867 new GestureEventConsumeDelegate());
855 const int kWindowWidth = 300; 868 const int kWindowWidth = 300;
856 const int kWindowHeight = 400; 869 const int kWindowHeight = 400;
870 const int kTouchId1 = 5;
871 const int kTouchId2 = 3;
857 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight); 872 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight);
858 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 873 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
859 delegate.get(), -1234, bounds, NULL)); 874 delegate.get(), -1234, bounds, NULL));
860 875
861 aura::RootWindow* root = root_window(); 876 aura::RootWindow* root = root_window();
862 877
863 delegate->Reset(); 878 delegate->Reset();
864 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 879 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
865 root->DispatchTouchEvent(&press); 880 root->DispatchTouchEvent(&press);
866 EXPECT_FALSE(delegate->tap()); 881 EXPECT_FALSE(delegate->tap());
867 EXPECT_TRUE(delegate->tap_down()); 882 EXPECT_TRUE(delegate->tap_down());
868 EXPECT_FALSE(delegate->double_tap()); 883 EXPECT_FALSE(delegate->double_tap());
869 EXPECT_FALSE(delegate->scroll_begin()); 884 EXPECT_FALSE(delegate->scroll_begin());
870 EXPECT_FALSE(delegate->scroll_update()); 885 EXPECT_FALSE(delegate->scroll_update());
871 EXPECT_FALSE(delegate->scroll_end()); 886 EXPECT_FALSE(delegate->scroll_end());
872 887
873 // Move the touch-point enough so that it is considered as a scroll. This 888 // Move the touch-point enough so that it is considered as a scroll. This
874 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures. 889 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures.
875 delegate->Reset(); 890 delegate->Reset();
876 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(130, 201), 0); 891 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(130, 201), kTouchId1);
877 root->DispatchTouchEvent(&move); 892 root->DispatchTouchEvent(&move);
878 EXPECT_FALSE(delegate->tap()); 893 EXPECT_FALSE(delegate->tap());
879 EXPECT_FALSE(delegate->tap_down()); 894 EXPECT_FALSE(delegate->tap_down());
880 EXPECT_FALSE(delegate->double_tap()); 895 EXPECT_FALSE(delegate->double_tap());
881 EXPECT_TRUE(delegate->scroll_begin()); 896 EXPECT_TRUE(delegate->scroll_begin());
882 EXPECT_TRUE(delegate->scroll_update()); 897 EXPECT_TRUE(delegate->scroll_update());
883 EXPECT_FALSE(delegate->scroll_end()); 898 EXPECT_FALSE(delegate->scroll_end());
884 899
885 // Press the second finger. It should cause both a tap-down and pinch-begin. 900 // Press the second finger. It should cause both a tap-down and pinch-begin.
886 delegate->Reset(); 901 delegate->Reset();
887 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 902 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), kTouchId2);
888 root->DispatchTouchEvent(&press2); 903 root->DispatchTouchEvent(&press2);
889 EXPECT_FALSE(delegate->tap()); 904 EXPECT_FALSE(delegate->tap());
890 EXPECT_TRUE(delegate->tap_down()); 905 EXPECT_TRUE(delegate->tap_down());
891 EXPECT_FALSE(delegate->double_tap()); 906 EXPECT_FALSE(delegate->double_tap());
892 EXPECT_FALSE(delegate->scroll_begin()); 907 EXPECT_FALSE(delegate->scroll_begin());
893 EXPECT_FALSE(delegate->scroll_update()); 908 EXPECT_FALSE(delegate->scroll_update());
894 EXPECT_FALSE(delegate->scroll_end()); 909 EXPECT_FALSE(delegate->scroll_end());
895 EXPECT_TRUE(delegate->pinch_begin()); 910 EXPECT_TRUE(delegate->pinch_begin());
896 911
897 // Move the first finger. 912 // Move the first finger.
898 delegate->Reset(); 913 delegate->Reset();
899 TouchEvent move3(ui::ET_TOUCH_MOVED, gfx::Point(95, 201), 0); 914 TouchEvent move3(ui::ET_TOUCH_MOVED, gfx::Point(95, 201), kTouchId1);
900 root->DispatchTouchEvent(&move3); 915 root->DispatchTouchEvent(&move3);
901 EXPECT_FALSE(delegate->tap()); 916 EXPECT_FALSE(delegate->tap());
902 EXPECT_FALSE(delegate->tap_down()); 917 EXPECT_FALSE(delegate->tap_down());
903 EXPECT_FALSE(delegate->double_tap()); 918 EXPECT_FALSE(delegate->double_tap());
904 EXPECT_FALSE(delegate->scroll_begin()); 919 EXPECT_FALSE(delegate->scroll_begin());
905 EXPECT_FALSE(delegate->scroll_update()); 920 EXPECT_FALSE(delegate->scroll_update());
906 EXPECT_FALSE(delegate->scroll_end()); 921 EXPECT_FALSE(delegate->scroll_end());
907 EXPECT_FALSE(delegate->pinch_begin()); 922 EXPECT_FALSE(delegate->pinch_begin());
908 EXPECT_TRUE(delegate->pinch_update()); 923 EXPECT_TRUE(delegate->pinch_update());
909 924
910 // Now move the second finger. 925 // Now move the second finger.
911 delegate->Reset(); 926 delegate->Reset();
912 TouchEvent move4(ui::ET_TOUCH_MOVED, gfx::Point(55, 15), 1); 927 TouchEvent move4(ui::ET_TOUCH_MOVED, gfx::Point(55, 15), kTouchId2);
913 root->DispatchTouchEvent(&move4); 928 root->DispatchTouchEvent(&move4);
914 EXPECT_FALSE(delegate->tap()); 929 EXPECT_FALSE(delegate->tap());
915 EXPECT_FALSE(delegate->tap_down()); 930 EXPECT_FALSE(delegate->tap_down());
916 EXPECT_FALSE(delegate->double_tap()); 931 EXPECT_FALSE(delegate->double_tap());
917 EXPECT_FALSE(delegate->scroll_begin()); 932 EXPECT_FALSE(delegate->scroll_begin());
918 EXPECT_FALSE(delegate->scroll_update()); 933 EXPECT_FALSE(delegate->scroll_update());
919 EXPECT_FALSE(delegate->scroll_end()); 934 EXPECT_FALSE(delegate->scroll_end());
920 EXPECT_FALSE(delegate->pinch_begin()); 935 EXPECT_FALSE(delegate->pinch_begin());
921 EXPECT_TRUE(delegate->pinch_update()); 936 EXPECT_TRUE(delegate->pinch_update());
922 937
923 // Release the first finger. This should end pinch. 938 // Release the first finger. This should end pinch.
924 delegate->Reset(); 939 delegate->Reset();
925 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 940 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId1);
926 Event::TestApi test_release(&release); 941 Event::TestApi test_release(&release);
927 test_release.set_time_stamp(press.time_stamp() + 942 test_release.set_time_stamp(press.time_stamp() +
928 base::TimeDelta::FromMilliseconds(50)); 943 base::TimeDelta::FromMilliseconds(50));
929 root->DispatchTouchEvent(&release); 944 root->DispatchTouchEvent(&release);
930 EXPECT_FALSE(delegate->tap()); 945 EXPECT_FALSE(delegate->tap());
931 EXPECT_FALSE(delegate->tap_down()); 946 EXPECT_FALSE(delegate->tap_down());
932 EXPECT_FALSE(delegate->double_tap()); 947 EXPECT_FALSE(delegate->double_tap());
933 EXPECT_FALSE(delegate->scroll_begin()); 948 EXPECT_FALSE(delegate->scroll_begin());
934 EXPECT_FALSE(delegate->scroll_update()); 949 EXPECT_FALSE(delegate->scroll_update());
935 EXPECT_FALSE(delegate->scroll_end()); 950 EXPECT_FALSE(delegate->scroll_end());
936 EXPECT_TRUE(delegate->pinch_end()); 951 EXPECT_TRUE(delegate->pinch_end());
937 952
938 // Move the second finger. This should still generate a scroll. 953 // Move the second finger. This should still generate a scroll.
939 delegate->Reset(); 954 delegate->Reset();
940 TouchEvent move5(ui::ET_TOUCH_MOVED, gfx::Point(25, 10), 1); 955 TouchEvent move5(ui::ET_TOUCH_MOVED, gfx::Point(25, 10), kTouchId2);
941 root->DispatchTouchEvent(&move5); 956 root->DispatchTouchEvent(&move5);
942 EXPECT_FALSE(delegate->tap()); 957 EXPECT_FALSE(delegate->tap());
943 EXPECT_FALSE(delegate->tap_down()); 958 EXPECT_FALSE(delegate->tap_down());
944 EXPECT_FALSE(delegate->double_tap()); 959 EXPECT_FALSE(delegate->double_tap());
945 EXPECT_FALSE(delegate->scroll_begin()); 960 EXPECT_FALSE(delegate->scroll_begin());
946 EXPECT_TRUE(delegate->scroll_update()); 961 EXPECT_TRUE(delegate->scroll_update());
947 EXPECT_FALSE(delegate->scroll_end()); 962 EXPECT_FALSE(delegate->scroll_end());
948 EXPECT_FALSE(delegate->pinch_begin()); 963 EXPECT_FALSE(delegate->pinch_begin());
949 EXPECT_FALSE(delegate->pinch_update()); 964 EXPECT_FALSE(delegate->pinch_update());
950 } 965 }
951 966
967 TEST_F(GestureRecognizerTest, GestureEventPinchFromScrollFromPinch) {
968 scoped_ptr<GestureEventConsumeDelegate> delegate(
969 new GestureEventConsumeDelegate());
970 const int kWindowWidth = 300;
971 const int kWindowHeight = 400;
972 const int kTouchId1 = 5;
973 const int kTouchId2 = 3;
974 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight);
975 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
976 delegate.get(), -1234, bounds, NULL));
977
978 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
979 root_window()->DispatchTouchEvent(&press);
980 delegate->Reset();
981 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), kTouchId2);
982 root_window()->DispatchTouchEvent(&press2);
983 EXPECT_TRUE(delegate->pinch_begin());
984
985 SendScrollEvent(root_window(), 130, 230, kTouchId1, delegate.get());
986 EXPECT_TRUE(delegate->pinch_update());
987
988 // Pinch has started, now release the second finger
989 delegate->Reset();
990 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId1);
991 root_window()->DispatchTouchEvent(&release);
992 EXPECT_TRUE(delegate->pinch_end());
993
994 SendScrollEvent(root_window(), 130, 230, kTouchId2, delegate.get());
995 EXPECT_TRUE(delegate->scroll_update());
996
997 // Pinch again
998 delegate->Reset();
999 TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), kTouchId1);
1000 root_window()->DispatchTouchEvent(&press3);
1001 EXPECT_TRUE(delegate->pinch_begin());
1002
1003 SendScrollEvent(root_window(), 130, 230, kTouchId1, delegate.get());
1004 EXPECT_TRUE(delegate->pinch_update());
1005 }
1006
952 TEST_F(GestureRecognizerTest, GestureEventPinchFromTap) { 1007 TEST_F(GestureRecognizerTest, GestureEventPinchFromTap) {
953 scoped_ptr<GestureEventConsumeDelegate> delegate( 1008 scoped_ptr<GestureEventConsumeDelegate> delegate(
954 new GestureEventConsumeDelegate()); 1009 new GestureEventConsumeDelegate());
955 const int kWindowWidth = 300; 1010 const int kWindowWidth = 300;
956 const int kWindowHeight = 400; 1011 const int kWindowHeight = 400;
1012 const int kTouchId1 = 3;
1013 const int kTouchId2 = 5;
957 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight); 1014 gfx::Rect bounds(5, 5, kWindowWidth, kWindowHeight);
958 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( 1015 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate(
959 delegate.get(), -1234, bounds, NULL)); 1016 delegate.get(), -1234, bounds, NULL));
960 1017
961 aura::RootWindow* root = root_window(); 1018 aura::RootWindow* root = root_window();
962 1019
963 delegate->Reset(); 1020 delegate->Reset();
964 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), 0); 1021 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), kTouchId1);
965 root->DispatchTouchEvent(&press); 1022 root->DispatchTouchEvent(&press);
966 EXPECT_FALSE(delegate->tap()); 1023 EXPECT_FALSE(delegate->tap());
967 EXPECT_TRUE(delegate->tap_down()); 1024 EXPECT_TRUE(delegate->tap_down());
968 EXPECT_FALSE(delegate->double_tap()); 1025 EXPECT_FALSE(delegate->double_tap());
969 EXPECT_FALSE(delegate->scroll_begin()); 1026 EXPECT_FALSE(delegate->scroll_begin());
970 EXPECT_FALSE(delegate->scroll_update()); 1027 EXPECT_FALSE(delegate->scroll_update());
971 EXPECT_FALSE(delegate->scroll_end()); 1028 EXPECT_FALSE(delegate->scroll_end());
972 1029
973 // Press the second finger. It should cause a tap-down, scroll-begin and 1030 // Press the second finger. It should cause a tap-down, scroll-begin and
974 // pinch-begin. 1031 // pinch-begin.
975 delegate->Reset(); 1032 delegate->Reset();
976 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 1033 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), kTouchId2);
977 root->DispatchTouchEvent(&press2); 1034 root->DispatchTouchEvent(&press2);
978 EXPECT_FALSE(delegate->tap()); 1035 EXPECT_FALSE(delegate->tap());
979 EXPECT_TRUE(delegate->tap_down()); 1036 EXPECT_TRUE(delegate->tap_down());
980 EXPECT_FALSE(delegate->double_tap()); 1037 EXPECT_FALSE(delegate->double_tap());
981 EXPECT_TRUE(delegate->scroll_begin()); 1038 EXPECT_TRUE(delegate->scroll_begin());
982 EXPECT_FALSE(delegate->scroll_update()); 1039 EXPECT_FALSE(delegate->scroll_update());
983 EXPECT_FALSE(delegate->scroll_end()); 1040 EXPECT_FALSE(delegate->scroll_end());
984 EXPECT_TRUE(delegate->pinch_begin()); 1041 EXPECT_TRUE(delegate->pinch_begin());
985 1042
986 // Move the first finger. 1043 // Move the first finger.
987 delegate->Reset(); 1044 delegate->Reset();
988 TouchEvent move3(ui::ET_TOUCH_MOVED, gfx::Point(65, 201), 0); 1045 TouchEvent move3(ui::ET_TOUCH_MOVED, gfx::Point(65, 201), kTouchId1);
989 root->DispatchTouchEvent(&move3); 1046 root->DispatchTouchEvent(&move3);
990 EXPECT_FALSE(delegate->tap()); 1047 EXPECT_FALSE(delegate->tap());
991 EXPECT_FALSE(delegate->tap_down()); 1048 EXPECT_FALSE(delegate->tap_down());
992 EXPECT_FALSE(delegate->double_tap()); 1049 EXPECT_FALSE(delegate->double_tap());
993 EXPECT_FALSE(delegate->scroll_begin()); 1050 EXPECT_FALSE(delegate->scroll_begin());
994 EXPECT_FALSE(delegate->scroll_update()); 1051 EXPECT_FALSE(delegate->scroll_update());
995 EXPECT_FALSE(delegate->scroll_end()); 1052 EXPECT_FALSE(delegate->scroll_end());
996 EXPECT_FALSE(delegate->pinch_begin()); 1053 EXPECT_FALSE(delegate->pinch_begin());
997 EXPECT_TRUE(delegate->pinch_update()); 1054 EXPECT_TRUE(delegate->pinch_update());
998 1055
999 // Now move the second finger. 1056 // Now move the second finger.
1000 delegate->Reset(); 1057 delegate->Reset();
1001 TouchEvent move4(ui::ET_TOUCH_MOVED, gfx::Point(55, 15), 1); 1058 TouchEvent move4(ui::ET_TOUCH_MOVED, gfx::Point(55, 15), kTouchId2);
1002 root->DispatchTouchEvent(&move4); 1059 root->DispatchTouchEvent(&move4);
1003 EXPECT_FALSE(delegate->tap()); 1060 EXPECT_FALSE(delegate->tap());
1004 EXPECT_FALSE(delegate->tap_down()); 1061 EXPECT_FALSE(delegate->tap_down());
1005 EXPECT_FALSE(delegate->double_tap()); 1062 EXPECT_FALSE(delegate->double_tap());
1006 EXPECT_FALSE(delegate->scroll_begin()); 1063 EXPECT_FALSE(delegate->scroll_begin());
1007 EXPECT_FALSE(delegate->scroll_update()); 1064 EXPECT_FALSE(delegate->scroll_update());
1008 EXPECT_FALSE(delegate->scroll_end()); 1065 EXPECT_FALSE(delegate->scroll_end());
1009 EXPECT_FALSE(delegate->pinch_begin()); 1066 EXPECT_FALSE(delegate->pinch_begin());
1010 EXPECT_TRUE(delegate->pinch_update()); 1067 EXPECT_TRUE(delegate->pinch_update());
1011 1068
1012 // Release the first finger. This should end pinch. 1069 // Release the first finger. This should end pinch.
1013 delegate->Reset(); 1070 delegate->Reset();
1014 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 0); 1071 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId1);
1015 Event::TestApi test_release(&release); 1072 Event::TestApi test_release(&release);
1016 test_release.set_time_stamp(press.time_stamp() + 1073 test_release.set_time_stamp(press.time_stamp() +
1017 base::TimeDelta::FromMilliseconds(50)); 1074 base::TimeDelta::FromMilliseconds(50));
1018 root->DispatchTouchEvent(&release); 1075 root->DispatchTouchEvent(&release);
1019 EXPECT_FALSE(delegate->tap()); 1076 EXPECT_FALSE(delegate->tap());
1020 EXPECT_FALSE(delegate->tap_down()); 1077 EXPECT_FALSE(delegate->tap_down());
1021 EXPECT_FALSE(delegate->double_tap()); 1078 EXPECT_FALSE(delegate->double_tap());
1022 EXPECT_FALSE(delegate->scroll_begin()); 1079 EXPECT_FALSE(delegate->scroll_begin());
1023 EXPECT_FALSE(delegate->scroll_update()); 1080 EXPECT_FALSE(delegate->scroll_update());
1024 EXPECT_FALSE(delegate->scroll_end()); 1081 EXPECT_FALSE(delegate->scroll_end());
1025 EXPECT_TRUE(delegate->pinch_end()); 1082 EXPECT_TRUE(delegate->pinch_end());
1026 1083
1027 // Move the second finger. This should still generate a scroll. 1084 // Move the second finger. This should still generate a scroll.
1028 delegate->Reset(); 1085 delegate->Reset();
1029 TouchEvent move5(ui::ET_TOUCH_MOVED, gfx::Point(25, 10), 1); 1086 TouchEvent move5(ui::ET_TOUCH_MOVED, gfx::Point(25, 10), kTouchId2);
1030 root->DispatchTouchEvent(&move5); 1087 root->DispatchTouchEvent(&move5);
1031 EXPECT_FALSE(delegate->tap()); 1088 EXPECT_FALSE(delegate->tap());
1032 EXPECT_FALSE(delegate->tap_down()); 1089 EXPECT_FALSE(delegate->tap_down());
1033 EXPECT_FALSE(delegate->double_tap()); 1090 EXPECT_FALSE(delegate->double_tap());
1034 EXPECT_FALSE(delegate->scroll_begin()); 1091 EXPECT_FALSE(delegate->scroll_begin());
1035 EXPECT_TRUE(delegate->scroll_update()); 1092 EXPECT_TRUE(delegate->scroll_update());
1036 EXPECT_FALSE(delegate->scroll_end()); 1093 EXPECT_FALSE(delegate->scroll_end());
1037 EXPECT_FALSE(delegate->pinch_begin()); 1094 EXPECT_FALSE(delegate->pinch_begin());
1038 EXPECT_FALSE(delegate->pinch_update()); 1095 EXPECT_FALSE(delegate->pinch_update());
1039 } 1096 }
1040 1097
1041 } // namespace test 1098 } // namespace test
1042 } // namespace aura 1099 } // namespace aura
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698