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

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

Powered by Google App Engine
This is Rietveld 408576698