OLD | NEW |
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_configuration.h" |
8 #include "ui/aura/gestures/gesture_recognizer_aura.h" | 9 #include "ui/aura/gestures/gesture_recognizer_aura.h" |
9 #include "ui/aura/gestures/gesture_sequence.h" | 10 #include "ui/aura/gestures/gesture_sequence.h" |
10 #include "ui/aura/root_window.h" | 11 #include "ui/aura/root_window.h" |
11 #include "ui/aura/test/aura_test_base.h" | 12 #include "ui/aura/test/aura_test_base.h" |
12 #include "ui/aura/test/test_window_delegate.h" | 13 #include "ui/aura/test/test_window_delegate.h" |
13 #include "ui/aura/test/test_windows.h" | 14 #include "ui/aura/test/test_windows.h" |
14 #include "ui/base/hit_test.h" | 15 #include "ui/base/hit_test.h" |
15 #include "ui/gfx/point.h" | 16 #include "ui/gfx/point.h" |
16 #include "ui/gfx/rect.h" | 17 #include "ui/gfx/rect.h" |
17 | 18 |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 void SendScrollEvent(RootWindow* root_window, | 310 void SendScrollEvent(RootWindow* root_window, |
310 int x, | 311 int x, |
311 int y, | 312 int y, |
312 int touch_id, | 313 int touch_id, |
313 GestureEventConsumeDelegate* delegate) { | 314 GestureEventConsumeDelegate* delegate) { |
314 delegate->Reset(); | 315 delegate->Reset(); |
315 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), touch_id); | 316 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(x, y), touch_id); |
316 root_window->DispatchTouchEvent(&move); | 317 root_window->DispatchTouchEvent(&move); |
317 } | 318 } |
318 | 319 |
319 const int kBufferedPoints = 10; | |
320 | |
321 } // namespace | 320 } // namespace |
322 | 321 |
323 typedef AuraTestBase GestureRecognizerTest; | 322 typedef AuraTestBase GestureRecognizerTest; |
324 | 323 |
325 // Check that appropriate touch events generate tap gesture events. | 324 // Check that appropriate touch events generate tap gesture events. |
326 TEST_F(GestureRecognizerTest, GestureEventTap) { | 325 TEST_F(GestureRecognizerTest, GestureEventTap) { |
327 scoped_ptr<GestureEventConsumeDelegate> delegate( | 326 scoped_ptr<GestureEventConsumeDelegate> delegate( |
328 new GestureEventConsumeDelegate()); | 327 new GestureEventConsumeDelegate()); |
329 const int kWindowWidth = 123; | 328 const int kWindowWidth = 123; |
330 const int kWindowHeight = 45; | 329 const int kWindowHeight = 45; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 root_window()->DispatchTouchEvent(&press); | 446 root_window()->DispatchTouchEvent(&press); |
448 | 447 |
449 // Move the touch-point horizontally enough that it is considered a | 448 // Move the touch-point horizontally enough that it is considered a |
450 // horizontal scroll. | 449 // horizontal scroll. |
451 SendScrollEvent(root_window(), 20, 1, kTouchId, delegate.get()); | 450 SendScrollEvent(root_window(), 20, 1, kTouchId, delegate.get()); |
452 EXPECT_EQ(0, delegate->scroll_y()); | 451 EXPECT_EQ(0, delegate->scroll_y()); |
453 EXPECT_EQ(20, delegate->scroll_x()); | 452 EXPECT_EQ(20, delegate->scroll_x()); |
454 | 453 |
455 // Get a high x velocity, while still staying on the rail | 454 // Get a high x velocity, while still staying on the rail |
456 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), | 455 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), |
457 100, 10, kTouchId, 1, kBufferedPoints, delegate.get()); | 456 100, 10, kTouchId, 1, |
| 457 GestureConfiguration::points_buffered_for_velocity(), |
| 458 delegate.get()); |
458 | 459 |
459 delegate->Reset(); | 460 delegate->Reset(); |
460 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); | 461 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); |
461 root_window()->DispatchTouchEvent(&release); | 462 root_window()->DispatchTouchEvent(&release); |
462 | 463 |
463 EXPECT_TRUE(delegate->scroll_end()); | 464 EXPECT_TRUE(delegate->scroll_end()); |
464 EXPECT_EQ(100000, delegate->velocity_x()); | 465 EXPECT_EQ(100000, delegate->velocity_x()); |
465 EXPECT_EQ(0, delegate->velocity_y()); | 466 EXPECT_EQ(0, delegate->velocity_y()); |
466 } | 467 } |
467 | 468 |
(...skipping 11 matching lines...) Expand all Loading... |
479 root_window()->DispatchTouchEvent(&press); | 480 root_window()->DispatchTouchEvent(&press); |
480 | 481 |
481 // Move the touch-point vertically enough that it is considered a | 482 // Move the touch-point vertically enough that it is considered a |
482 // vertical scroll. | 483 // vertical scroll. |
483 SendScrollEvent(root_window(), 1, 20, kTouchId, delegate.get()); | 484 SendScrollEvent(root_window(), 1, 20, kTouchId, delegate.get()); |
484 EXPECT_EQ(20, delegate->scroll_y()); | 485 EXPECT_EQ(20, delegate->scroll_y()); |
485 EXPECT_EQ(0, delegate->scroll_x()); | 486 EXPECT_EQ(0, delegate->scroll_x()); |
486 | 487 |
487 // Get a high y velocity, while still staying on the rail | 488 // Get a high y velocity, while still staying on the rail |
488 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), | 489 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), |
489 10, 100, kTouchId, 1, kBufferedPoints, delegate.get()); | 490 10, 100, kTouchId, 1, |
| 491 GestureConfiguration::points_buffered_for_velocity(), |
| 492 delegate.get()); |
490 | 493 |
491 delegate->Reset(); | 494 delegate->Reset(); |
492 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); | 495 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); |
493 root_window()->DispatchTouchEvent(&release); | 496 root_window()->DispatchTouchEvent(&release); |
494 | 497 |
495 EXPECT_TRUE(delegate->scroll_end()); | 498 EXPECT_TRUE(delegate->scroll_end()); |
496 EXPECT_EQ(0, delegate->velocity_x()); | 499 EXPECT_EQ(0, delegate->velocity_x()); |
497 EXPECT_EQ(100000, delegate->velocity_y()); | 500 EXPECT_EQ(100000, delegate->velocity_y()); |
498 } | 501 } |
499 | 502 |
500 // Check Scroll End Events report correct velocities | 503 // Check Scroll End Events report correct velocities |
501 // if the user is not on a rail | 504 // if the user is not on a rail |
502 TEST_F(GestureRecognizerTest, GestureEventNonRailFling) { | 505 TEST_F(GestureRecognizerTest, GestureEventNonRailFling) { |
503 scoped_ptr<GestureEventConsumeDelegate> delegate( | 506 scoped_ptr<GestureEventConsumeDelegate> delegate( |
504 new GestureEventConsumeDelegate()); | 507 new GestureEventConsumeDelegate()); |
505 const int kTouchId = 7; | 508 const int kTouchId = 7; |
506 gfx::Rect bounds(0, 0, 1000, 1000); | 509 gfx::Rect bounds(0, 0, 1000, 1000); |
507 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 510 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
508 delegate.get(), -1234, bounds, NULL)); | 511 delegate.get(), -1234, bounds, NULL)); |
509 | 512 |
510 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), kTouchId); | 513 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), kTouchId); |
511 root_window()->DispatchTouchEvent(&press); | 514 root_window()->DispatchTouchEvent(&press); |
512 | 515 |
513 // Move the touch-point such that a non-rail scroll begins | 516 // Move the touch-point such that a non-rail scroll begins |
514 SendScrollEvent(root_window(), 20, 20, kTouchId, delegate.get()); | 517 SendScrollEvent(root_window(), 20, 20, kTouchId, delegate.get()); |
515 EXPECT_EQ(20, delegate->scroll_y()); | 518 EXPECT_EQ(20, delegate->scroll_y()); |
516 EXPECT_EQ(20, delegate->scroll_x()); | 519 EXPECT_EQ(20, delegate->scroll_x()); |
517 | 520 |
518 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), | 521 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), |
519 10, 100, kTouchId, 1, kBufferedPoints, delegate.get()); | 522 10, 100, kTouchId, 1, |
| 523 GestureConfiguration::points_buffered_for_velocity(), |
| 524 delegate.get()); |
520 | 525 |
521 delegate->Reset(); | 526 delegate->Reset(); |
522 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); | 527 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), kTouchId); |
523 root_window()->DispatchTouchEvent(&release); | 528 root_window()->DispatchTouchEvent(&release); |
524 | 529 |
525 EXPECT_TRUE(delegate->scroll_end()); | 530 EXPECT_TRUE(delegate->scroll_end()); |
526 EXPECT_EQ(10000, delegate->velocity_x()); | 531 EXPECT_EQ(10000, delegate->velocity_x()); |
527 EXPECT_EQ(100000, delegate->velocity_y()); | 532 EXPECT_EQ(100000, delegate->velocity_y()); |
528 } | 533 } |
529 | 534 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 | 679 |
675 SendScrollEvent(root_window(), 25, 6, kTouchId, delegate.get()); | 680 SendScrollEvent(root_window(), 25, 6, kTouchId, delegate.get()); |
676 EXPECT_TRUE(delegate->scroll_update()); | 681 EXPECT_TRUE(delegate->scroll_update()); |
677 EXPECT_EQ(5, delegate->scroll_x()); | 682 EXPECT_EQ(5, delegate->scroll_x()); |
678 // y shouldn't change, as we're on a horizontal rail. | 683 // y shouldn't change, as we're on a horizontal rail. |
679 EXPECT_EQ(0, delegate->scroll_y()); | 684 EXPECT_EQ(0, delegate->scroll_y()); |
680 | 685 |
681 // Send enough information that a velocity can be calculated for the gesture, | 686 // Send enough information that a velocity can be calculated for the gesture, |
682 // and we can break the rail | 687 // and we can break the rail |
683 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), | 688 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), |
684 1, 100, kTouchId, 1, kBufferedPoints, delegate.get()); | 689 1, 100, kTouchId, 1, |
| 690 GestureConfiguration::points_buffered_for_velocity(), |
| 691 delegate.get()); |
685 | 692 |
686 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get()); | 693 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get()); |
687 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get()); | 694 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get()); |
688 | 695 |
689 // The rail should be broken | 696 // The rail should be broken |
690 EXPECT_TRUE(delegate->scroll_update()); | 697 EXPECT_TRUE(delegate->scroll_update()); |
691 EXPECT_EQ(5, delegate->scroll_x()); | 698 EXPECT_EQ(5, delegate->scroll_x()); |
692 EXPECT_EQ(5, delegate->scroll_y()); | 699 EXPECT_EQ(5, delegate->scroll_y()); |
693 } | 700 } |
694 | 701 |
(...skipping 18 matching lines...) Expand all Loading... |
713 | 720 |
714 SendScrollEvent(root_window(), 6, 25, kTouchId, delegate.get()); | 721 SendScrollEvent(root_window(), 6, 25, kTouchId, delegate.get()); |
715 EXPECT_TRUE(delegate->scroll_update()); | 722 EXPECT_TRUE(delegate->scroll_update()); |
716 EXPECT_EQ(5, delegate->scroll_y()); | 723 EXPECT_EQ(5, delegate->scroll_y()); |
717 // x shouldn't change, as we're on a vertical rail. | 724 // x shouldn't change, as we're on a vertical rail. |
718 EXPECT_EQ(0, delegate->scroll_x()); | 725 EXPECT_EQ(0, delegate->scroll_x()); |
719 | 726 |
720 // Send enough information that a velocity can be calculated for the gesture, | 727 // Send enough information that a velocity can be calculated for the gesture, |
721 // and we can break the rail | 728 // and we can break the rail |
722 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), | 729 SendScrollEvents(root_window(), 1, 1, press.time_stamp(), |
723 100, 1, kTouchId, 1, kBufferedPoints, delegate.get()); | 730 100, 1, kTouchId, 1, |
| 731 GestureConfiguration::points_buffered_for_velocity(), |
| 732 delegate.get()); |
724 | 733 |
725 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get()); | 734 SendScrollEvent(root_window(), 0, 0, kTouchId, delegate.get()); |
726 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get()); | 735 SendScrollEvent(root_window(), 5, 5, kTouchId, delegate.get()); |
727 | 736 |
728 // The rail should be broken | 737 // The rail should be broken |
729 EXPECT_TRUE(delegate->scroll_update()); | 738 EXPECT_TRUE(delegate->scroll_update()); |
730 EXPECT_EQ(5, delegate->scroll_x()); | 739 EXPECT_EQ(5, delegate->scroll_x()); |
731 EXPECT_EQ(5, delegate->scroll_y()); | 740 EXPECT_EQ(5, delegate->scroll_y()); |
732 } | 741 } |
733 | 742 |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1240 delegate->Reset(); | 1249 delegate->Reset(); |
1241 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(100, 100), kTouchId1); | 1250 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(100, 100), kTouchId1); |
1242 | 1251 |
1243 root_window()->DispatchTouchEvent(&press1); | 1252 root_window()->DispatchTouchEvent(&press1); |
1244 | 1253 |
1245 delegate->Reset(); | 1254 delegate->Reset(); |
1246 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(110, 110), kTouchId2); | 1255 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(110, 110), kTouchId2); |
1247 root_window()->DispatchTouchEvent(&press2); | 1256 root_window()->DispatchTouchEvent(&press2); |
1248 | 1257 |
1249 SendScrollEvents(root_window(), 100, 100, press1.time_stamp(), | 1258 SendScrollEvents(root_window(), 100, 100, press1.time_stamp(), |
1250 1, 10, kTouchId1, 1, kBufferedPoints, delegate.get()); | 1259 1, 10, kTouchId1, 1, |
| 1260 GestureConfiguration::points_buffered_for_velocity(), |
| 1261 delegate.get()); |
1251 | 1262 |
1252 SendScrollEvents(root_window(), 110, 110, press1.time_stamp() + | 1263 SendScrollEvents(root_window(), 110, 110, press1.time_stamp() + |
1253 base::TimeDelta::FromMilliseconds(1000), | 1264 base::TimeDelta::FromMilliseconds(1000), |
1254 1, 10, kTouchId2, 1, kBufferedPoints, delegate.get()); | 1265 1, 10, kTouchId2, 1, |
| 1266 GestureConfiguration::points_buffered_for_velocity(), |
| 1267 delegate.get()); |
1255 // At no point were both fingers moving at the same time, | 1268 // At no point were both fingers moving at the same time, |
1256 // so no scrolling should have occurred | 1269 // so no scrolling should have occurred |
1257 | 1270 |
1258 EXPECT_EQ(0, delegate->scroll_x()); | 1271 EXPECT_EQ(0, delegate->scroll_x()); |
1259 EXPECT_EQ(0, delegate->scroll_y()); | 1272 EXPECT_EQ(0, delegate->scroll_y()); |
1260 } | 1273 } |
1261 | 1274 |
1262 TEST_F(GestureRecognizerTest, GestureEventIgnoresDisconnectedEvents) { | 1275 TEST_F(GestureRecognizerTest, GestureEventIgnoresDisconnectedEvents) { |
1263 scoped_ptr<GestureEventConsumeDelegate> delegate( | 1276 scoped_ptr<GestureEventConsumeDelegate> delegate( |
1264 new GestureEventConsumeDelegate()); | 1277 new GestureEventConsumeDelegate()); |
1265 | 1278 |
1266 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 6); | 1279 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), 6); |
1267 root_window()->DispatchTouchEvent(&release1); | 1280 root_window()->DispatchTouchEvent(&release1); |
1268 EXPECT_FALSE(delegate->tap()); | 1281 EXPECT_FALSE(delegate->tap()); |
1269 EXPECT_FALSE(delegate->tap_down()); | 1282 EXPECT_FALSE(delegate->tap_down()); |
1270 } | 1283 } |
1271 | 1284 |
1272 } // namespace test | 1285 } // namespace test |
1273 } // namespace aura | 1286 } // namespace aura |
OLD | NEW |