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/memory/scoped_vector.h" | 5 #include "base/memory/scoped_vector.h" |
6 #include "base/string_number_conversions.h" | 6 #include "base/string_number_conversions.h" |
7 #include "base/timer.h" | 7 #include "base/timer.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/aura/event.h" | 9 #include "ui/aura/event.h" |
10 #include "ui/aura/root_window.h" | 10 #include "ui/aura/root_window.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 return consumer && !consumer->ignores_events() ? | 29 return consumer && !consumer->ignores_events() ? |
30 base::IntToString(static_cast<Window*>(consumer)->id()) : "?"; | 30 base::IntToString(static_cast<Window*>(consumer)->id()) : "?"; |
31 } | 31 } |
32 | 32 |
33 // A delegate that keeps track of gesture events. | 33 // A delegate that keeps track of gesture events. |
34 class GestureEventConsumeDelegate : public TestWindowDelegate { | 34 class GestureEventConsumeDelegate : public TestWindowDelegate { |
35 public: | 35 public: |
36 GestureEventConsumeDelegate() | 36 GestureEventConsumeDelegate() |
37 : tap_(false), | 37 : tap_(false), |
38 tap_down_(false), | 38 tap_down_(false), |
39 tap_up_(false), | 39 begin_(false), |
| 40 end_(false), |
40 double_tap_(false), | 41 double_tap_(false), |
41 scroll_begin_(false), | 42 scroll_begin_(false), |
42 scroll_update_(false), | 43 scroll_update_(false), |
43 scroll_end_(false), | 44 scroll_end_(false), |
44 pinch_begin_(false), | 45 pinch_begin_(false), |
45 pinch_update_(false), | 46 pinch_update_(false), |
46 pinch_end_(false), | 47 pinch_end_(false), |
47 long_press_(false), | 48 long_press_(false), |
48 fling_(false), | 49 fling_(false), |
49 two_finger_tap_(false), | 50 two_finger_tap_(false), |
50 scroll_x_(0), | 51 scroll_x_(0), |
51 scroll_y_(0), | 52 scroll_y_(0), |
52 velocity_x_(0), | 53 velocity_x_(0), |
53 velocity_y_(0), | 54 velocity_y_(0), |
54 radius_x_(0), | 55 radius_x_(0), |
55 radius_y_(0) { | 56 radius_y_(0) { |
56 } | 57 } |
57 | 58 |
58 virtual ~GestureEventConsumeDelegate() {} | 59 virtual ~GestureEventConsumeDelegate() {} |
59 | 60 |
60 void Reset() { | 61 void Reset() { |
61 tap_ = false; | 62 tap_ = false; |
62 tap_down_ = false; | 63 tap_down_ = false; |
63 tap_up_ = false; | 64 begin_ = false; |
| 65 end_ = false; |
64 double_tap_ = false; | 66 double_tap_ = false; |
65 scroll_begin_ = false; | 67 scroll_begin_ = false; |
66 scroll_update_ = false; | 68 scroll_update_ = false; |
67 scroll_end_ = false; | 69 scroll_end_ = false; |
68 pinch_begin_ = false; | 70 pinch_begin_ = false; |
69 pinch_update_ = false; | 71 pinch_update_ = false; |
70 pinch_end_ = false; | 72 pinch_end_ = false; |
71 long_press_ = false; | 73 long_press_ = false; |
72 fling_ = false; | 74 fling_ = false; |
73 two_finger_tap_ = false; | 75 two_finger_tap_ = false; |
74 | 76 |
75 scroll_begin_position_.SetPoint(0, 0); | 77 scroll_begin_position_.SetPoint(0, 0); |
76 tap_location_.SetPoint(0, 0); | 78 tap_location_.SetPoint(0, 0); |
77 | 79 |
78 scroll_x_ = 0; | 80 scroll_x_ = 0; |
79 scroll_y_ = 0; | 81 scroll_y_ = 0; |
80 velocity_x_ = 0; | 82 velocity_x_ = 0; |
81 velocity_y_ = 0; | 83 velocity_y_ = 0; |
82 radius_x_ = 0; | 84 radius_x_ = 0; |
83 radius_y_ = 0; | 85 radius_y_ = 0; |
84 } | 86 } |
85 | 87 |
86 bool tap() const { return tap_; } | 88 bool tap() const { return tap_; } |
87 bool tap_down() const { return tap_down_; } | 89 bool tap_down() const { return tap_down_; } |
88 bool tap_up() const { return tap_up_; } | 90 bool begin() const { return begin_; } |
| 91 bool end() const { return end_; } |
89 bool double_tap() const { return double_tap_; } | 92 bool double_tap() const { return double_tap_; } |
90 bool scroll_begin() const { return scroll_begin_; } | 93 bool scroll_begin() const { return scroll_begin_; } |
91 bool scroll_update() const { return scroll_update_; } | 94 bool scroll_update() const { return scroll_update_; } |
92 bool scroll_end() const { return scroll_end_; } | 95 bool scroll_end() const { return scroll_end_; } |
93 bool pinch_begin() const { return pinch_begin_; } | 96 bool pinch_begin() const { return pinch_begin_; } |
94 bool pinch_update() const { return pinch_update_; } | 97 bool pinch_update() const { return pinch_update_; } |
95 bool pinch_end() const { return pinch_end_; } | 98 bool pinch_end() const { return pinch_end_; } |
96 bool long_press() const { return long_press_; } | 99 bool long_press() const { return long_press_; } |
97 bool fling() const { return fling_; } | 100 bool fling() const { return fling_; } |
98 bool two_finger_tap() const { return two_finger_tap_; } | 101 bool two_finger_tap() const { return two_finger_tap_; } |
(...skipping 18 matching lines...) Expand all Loading... |
117 switch (gesture->type()) { | 120 switch (gesture->type()) { |
118 case ui::ET_GESTURE_TAP: | 121 case ui::ET_GESTURE_TAP: |
119 radius_x_ = gesture->delta_x(); | 122 radius_x_ = gesture->delta_x(); |
120 radius_y_ = gesture->delta_y(); | 123 radius_y_ = gesture->delta_y(); |
121 tap_location_ = gesture->location(); | 124 tap_location_ = gesture->location(); |
122 tap_ = true; | 125 tap_ = true; |
123 break; | 126 break; |
124 case ui::ET_GESTURE_TAP_DOWN: | 127 case ui::ET_GESTURE_TAP_DOWN: |
125 tap_down_ = true; | 128 tap_down_ = true; |
126 break; | 129 break; |
127 case ui::ET_GESTURE_TAP_UP: | 130 case ui::ET_GESTURE_BEGIN: |
128 tap_up_ = true; | 131 begin_ = true; |
| 132 break; |
| 133 case ui::ET_GESTURE_END: |
| 134 end_ = true; |
129 break; | 135 break; |
130 case ui::ET_GESTURE_DOUBLE_TAP: | 136 case ui::ET_GESTURE_DOUBLE_TAP: |
131 double_tap_ = true; | 137 double_tap_ = true; |
132 break; | 138 break; |
133 case ui::ET_GESTURE_SCROLL_BEGIN: | 139 case ui::ET_GESTURE_SCROLL_BEGIN: |
134 scroll_begin_ = true; | 140 scroll_begin_ = true; |
135 scroll_begin_position_ = gesture->location(); | 141 scroll_begin_position_ = gesture->location(); |
136 break; | 142 break; |
137 case ui::ET_GESTURE_SCROLL_UPDATE: | 143 case ui::ET_GESTURE_SCROLL_UPDATE: |
138 scroll_update_ = true; | 144 scroll_update_ = true; |
(...skipping 27 matching lines...) Expand all Loading... |
166 break; | 172 break; |
167 default: | 173 default: |
168 NOTREACHED(); | 174 NOTREACHED(); |
169 } | 175 } |
170 return ui::GESTURE_STATUS_CONSUMED; | 176 return ui::GESTURE_STATUS_CONSUMED; |
171 } | 177 } |
172 | 178 |
173 private: | 179 private: |
174 bool tap_; | 180 bool tap_; |
175 bool tap_down_; | 181 bool tap_down_; |
176 bool tap_up_; | 182 bool begin_; |
| 183 bool end_; |
177 bool double_tap_; | 184 bool double_tap_; |
178 bool scroll_begin_; | 185 bool scroll_begin_; |
179 bool scroll_update_; | 186 bool scroll_update_; |
180 bool scroll_end_; | 187 bool scroll_end_; |
181 bool pinch_begin_; | 188 bool pinch_begin_; |
182 bool pinch_update_; | 189 bool pinch_update_; |
183 bool pinch_end_; | 190 bool pinch_end_; |
184 bool long_press_; | 191 bool long_press_; |
185 bool fling_; | 192 bool fling_; |
186 bool two_finger_tap_; | 193 bool two_finger_tap_; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); | 403 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); |
397 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 404 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
398 delegate.get(), -1234, bounds, NULL)); | 405 delegate.get(), -1234, bounds, NULL)); |
399 | 406 |
400 delegate->Reset(); | 407 delegate->Reset(); |
401 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 408 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
402 kTouchId, GetTime()); | 409 kTouchId, GetTime()); |
403 root_window()->DispatchTouchEvent(&press); | 410 root_window()->DispatchTouchEvent(&press); |
404 EXPECT_FALSE(delegate->tap()); | 411 EXPECT_FALSE(delegate->tap()); |
405 EXPECT_TRUE(delegate->tap_down()); | 412 EXPECT_TRUE(delegate->tap_down()); |
| 413 EXPECT_TRUE(delegate->begin()); |
406 EXPECT_FALSE(delegate->double_tap()); | 414 EXPECT_FALSE(delegate->double_tap()); |
407 EXPECT_FALSE(delegate->scroll_begin()); | 415 EXPECT_FALSE(delegate->scroll_begin()); |
408 EXPECT_FALSE(delegate->scroll_update()); | 416 EXPECT_FALSE(delegate->scroll_update()); |
409 EXPECT_FALSE(delegate->scroll_end()); | 417 EXPECT_FALSE(delegate->scroll_end()); |
410 EXPECT_FALSE(delegate->long_press()); | 418 EXPECT_FALSE(delegate->long_press()); |
411 | 419 |
412 // Make sure there is enough delay before the touch is released so that it is | 420 // Make sure there is enough delay before the touch is released so that it is |
413 // recognized as a tap. | 421 // recognized as a tap. |
414 delegate->Reset(); | 422 delegate->Reset(); |
415 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 423 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
416 kTouchId, press.time_stamp() + | 424 kTouchId, press.time_stamp() + |
417 base::TimeDelta::FromMilliseconds(50)); | 425 base::TimeDelta::FromMilliseconds(50)); |
418 | 426 |
419 root_window()->DispatchTouchEvent(&release); | 427 root_window()->DispatchTouchEvent(&release); |
420 EXPECT_TRUE(delegate->tap()); | 428 EXPECT_TRUE(delegate->tap()); |
421 EXPECT_FALSE(delegate->tap_down()); | 429 EXPECT_FALSE(delegate->tap_down()); |
| 430 EXPECT_FALSE(delegate->begin()); |
| 431 EXPECT_TRUE(delegate->end()); |
422 EXPECT_FALSE(delegate->double_tap()); | 432 EXPECT_FALSE(delegate->double_tap()); |
423 EXPECT_FALSE(delegate->scroll_begin()); | 433 EXPECT_FALSE(delegate->scroll_begin()); |
424 EXPECT_FALSE(delegate->scroll_update()); | 434 EXPECT_FALSE(delegate->scroll_update()); |
425 EXPECT_FALSE(delegate->scroll_end()); | 435 EXPECT_FALSE(delegate->scroll_end()); |
426 } | 436 } |
427 | 437 |
428 // Check that appropriate touch events generate tap gesture events | 438 // Check that appropriate touch events generate tap gesture events |
429 // when information about the touch radii are provided. | 439 // when information about the touch radii are provided. |
430 TEST_F(GestureRecognizerTest, GestureEventTapRegion) { | 440 TEST_F(GestureRecognizerTest, GestureEventTapRegion) { |
431 scoped_ptr<GestureEventConsumeDelegate> delegate( | 441 scoped_ptr<GestureEventConsumeDelegate> delegate( |
432 new GestureEventConsumeDelegate()); | 442 new GestureEventConsumeDelegate()); |
433 const int kWindowWidth = 800; | 443 const int kWindowWidth = 800; |
434 const int kWindowHeight = 600; | 444 const int kWindowHeight = 600; |
435 const int kTouchId = 2; | 445 const int kTouchId = 2; |
436 gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight); | 446 gfx::Rect bounds(0, 0, kWindowWidth, kWindowHeight); |
437 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 447 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
438 delegate.get(), -1234, bounds, NULL)); | 448 delegate.get(), -1234, bounds, NULL)); |
439 | 449 |
440 // Test with no ET_TOUCH_MOVED events. | 450 // Test with no ET_TOUCH_MOVED events. |
441 { | 451 { |
442 delegate->Reset(); | 452 delegate->Reset(); |
443 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 453 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
444 kTouchId, GetTime()); | 454 kTouchId, GetTime()); |
445 press.set_radius_x(5); | 455 press.set_radius_x(5); |
446 press.set_radius_y(12); | 456 press.set_radius_y(12); |
447 root_window()->DispatchTouchEvent(&press); | 457 root_window()->DispatchTouchEvent(&press); |
448 EXPECT_FALSE(delegate->tap()); | 458 EXPECT_FALSE(delegate->tap()); |
449 EXPECT_TRUE(delegate->tap_down()); | 459 EXPECT_TRUE(delegate->tap_down()); |
| 460 EXPECT_TRUE(delegate->begin()); |
450 EXPECT_FALSE(delegate->double_tap()); | 461 EXPECT_FALSE(delegate->double_tap()); |
451 EXPECT_FALSE(delegate->scroll_begin()); | 462 EXPECT_FALSE(delegate->scroll_begin()); |
452 EXPECT_FALSE(delegate->scroll_update()); | 463 EXPECT_FALSE(delegate->scroll_update()); |
453 EXPECT_FALSE(delegate->scroll_end()); | 464 EXPECT_FALSE(delegate->scroll_end()); |
454 EXPECT_FALSE(delegate->long_press()); | 465 EXPECT_FALSE(delegate->long_press()); |
455 | 466 |
456 // Make sure there is enough delay before the touch is released so that it | 467 // Make sure there is enough delay before the touch is released so that it |
457 // is recognized as a tap. | 468 // is recognized as a tap. |
458 delegate->Reset(); | 469 delegate->Reset(); |
459 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 470 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
460 kTouchId, press.time_stamp() + | 471 kTouchId, press.time_stamp() + |
461 base::TimeDelta::FromMilliseconds(50)); | 472 base::TimeDelta::FromMilliseconds(50)); |
462 release.set_radius_x(5); | 473 release.set_radius_x(5); |
463 release.set_radius_y(12); | 474 release.set_radius_y(12); |
464 | 475 |
465 root_window()->DispatchTouchEvent(&release); | 476 root_window()->DispatchTouchEvent(&release); |
466 EXPECT_TRUE(delegate->tap()); | 477 EXPECT_TRUE(delegate->tap()); |
467 EXPECT_FALSE(delegate->tap_down()); | 478 EXPECT_FALSE(delegate->tap_down()); |
| 479 EXPECT_FALSE(delegate->begin()); |
| 480 EXPECT_TRUE(delegate->end()); |
468 EXPECT_FALSE(delegate->double_tap()); | 481 EXPECT_FALSE(delegate->double_tap()); |
469 EXPECT_FALSE(delegate->scroll_begin()); | 482 EXPECT_FALSE(delegate->scroll_begin()); |
470 EXPECT_FALSE(delegate->scroll_update()); | 483 EXPECT_FALSE(delegate->scroll_update()); |
471 EXPECT_FALSE(delegate->scroll_end()); | 484 EXPECT_FALSE(delegate->scroll_end()); |
472 | 485 |
473 gfx::Point actual_point(delegate->tap_location()); | 486 gfx::Point actual_point(delegate->tap_location()); |
474 EXPECT_EQ(12, delegate->radius_x()); | 487 EXPECT_EQ(12, delegate->radius_x()); |
475 EXPECT_EQ(12, delegate->radius_y()); | 488 EXPECT_EQ(12, delegate->radius_y()); |
476 EXPECT_EQ(100, actual_point.x()); | 489 EXPECT_EQ(100, actual_point.x()); |
477 EXPECT_EQ(200, actual_point.y()); | 490 EXPECT_EQ(200, actual_point.y()); |
478 } | 491 } |
479 | 492 |
480 // Test with no ET_TOUCH_MOVED events but different touch points and radii. | 493 // Test with no ET_TOUCH_MOVED events but different touch points and radii. |
481 { | 494 { |
482 delegate->Reset(); | 495 delegate->Reset(); |
483 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(365, 290), | 496 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(365, 290), |
484 kTouchId, GetTime()); | 497 kTouchId, GetTime()); |
485 press.set_radius_x(8); | 498 press.set_radius_x(8); |
486 press.set_radius_y(14); | 499 press.set_radius_y(14); |
487 root_window()->DispatchTouchEvent(&press); | 500 root_window()->DispatchTouchEvent(&press); |
488 EXPECT_FALSE(delegate->tap()); | 501 EXPECT_FALSE(delegate->tap()); |
489 EXPECT_TRUE(delegate->tap_down()); | 502 EXPECT_TRUE(delegate->tap_down()); |
| 503 EXPECT_TRUE(delegate->begin()); |
490 EXPECT_FALSE(delegate->double_tap()); | 504 EXPECT_FALSE(delegate->double_tap()); |
491 EXPECT_FALSE(delegate->scroll_begin()); | 505 EXPECT_FALSE(delegate->scroll_begin()); |
492 EXPECT_FALSE(delegate->scroll_update()); | 506 EXPECT_FALSE(delegate->scroll_update()); |
493 EXPECT_FALSE(delegate->scroll_end()); | 507 EXPECT_FALSE(delegate->scroll_end()); |
494 EXPECT_FALSE(delegate->long_press()); | 508 EXPECT_FALSE(delegate->long_press()); |
495 | 509 |
496 delegate->Reset(); | 510 delegate->Reset(); |
497 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(377, 291), | 511 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(377, 291), |
498 kTouchId, press.time_stamp() + | 512 kTouchId, press.time_stamp() + |
499 base::TimeDelta::FromMilliseconds(50)); | 513 base::TimeDelta::FromMilliseconds(50)); |
500 release.set_radius_x(20); | 514 release.set_radius_x(20); |
501 release.set_radius_y(13); | 515 release.set_radius_y(13); |
502 | 516 |
503 root_window()->DispatchTouchEvent(&release); | 517 root_window()->DispatchTouchEvent(&release); |
504 EXPECT_TRUE(delegate->tap()); | 518 EXPECT_TRUE(delegate->tap()); |
505 EXPECT_FALSE(delegate->tap_down()); | 519 EXPECT_FALSE(delegate->tap_down()); |
| 520 EXPECT_FALSE(delegate->begin()); |
| 521 EXPECT_TRUE(delegate->end()); |
506 EXPECT_FALSE(delegate->double_tap()); | 522 EXPECT_FALSE(delegate->double_tap()); |
507 EXPECT_FALSE(delegate->scroll_begin()); | 523 EXPECT_FALSE(delegate->scroll_begin()); |
508 EXPECT_FALSE(delegate->scroll_update()); | 524 EXPECT_FALSE(delegate->scroll_update()); |
509 EXPECT_FALSE(delegate->scroll_end()); | 525 EXPECT_FALSE(delegate->scroll_end()); |
510 | 526 |
511 gfx::Point actual_point(delegate->tap_location()); | 527 gfx::Point actual_point(delegate->tap_location()); |
512 EXPECT_EQ(23, delegate->radius_x()); | 528 EXPECT_EQ(23, delegate->radius_x()); |
513 EXPECT_EQ(20, delegate->radius_y()); | 529 EXPECT_EQ(20, delegate->radius_y()); |
514 EXPECT_EQ(373, actual_point.x()); | 530 EXPECT_EQ(373, actual_point.x()); |
515 EXPECT_EQ(290, actual_point.y()); | 531 EXPECT_EQ(290, actual_point.y()); |
516 } | 532 } |
517 | 533 |
518 // Test with a single ET_TOUCH_MOVED event. | 534 // Test with a single ET_TOUCH_MOVED event. |
519 { | 535 { |
520 delegate->Reset(); | 536 delegate->Reset(); |
521 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(46, 205), | 537 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(46, 205), |
522 kTouchId, GetTime()); | 538 kTouchId, GetTime()); |
523 press.set_radius_x(6); | 539 press.set_radius_x(6); |
524 press.set_radius_y(10); | 540 press.set_radius_y(10); |
525 root_window()->DispatchTouchEvent(&press); | 541 root_window()->DispatchTouchEvent(&press); |
526 EXPECT_FALSE(delegate->tap()); | 542 EXPECT_FALSE(delegate->tap()); |
527 EXPECT_TRUE(delegate->tap_down()); | 543 EXPECT_TRUE(delegate->tap_down()); |
| 544 EXPECT_TRUE(delegate->begin()); |
528 EXPECT_FALSE(delegate->double_tap()); | 545 EXPECT_FALSE(delegate->double_tap()); |
529 EXPECT_FALSE(delegate->scroll_begin()); | 546 EXPECT_FALSE(delegate->scroll_begin()); |
530 EXPECT_FALSE(delegate->scroll_update()); | 547 EXPECT_FALSE(delegate->scroll_update()); |
531 EXPECT_FALSE(delegate->scroll_end()); | 548 EXPECT_FALSE(delegate->scroll_end()); |
532 EXPECT_FALSE(delegate->long_press()); | 549 EXPECT_FALSE(delegate->long_press()); |
533 | 550 |
534 delegate->Reset(); | 551 delegate->Reset(); |
535 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(52, 200), | 552 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(52, 200), |
536 kTouchId, press.time_stamp() + | 553 kTouchId, press.time_stamp() + |
537 base::TimeDelta::FromMilliseconds(50)); | 554 base::TimeDelta::FromMilliseconds(50)); |
538 move.set_radius_x(8); | 555 move.set_radius_x(8); |
539 move.set_radius_y(12); | 556 move.set_radius_y(12); |
540 root_window()->DispatchTouchEvent(&move); | 557 root_window()->DispatchTouchEvent(&move); |
541 EXPECT_FALSE(delegate->tap()); | 558 EXPECT_FALSE(delegate->tap()); |
542 EXPECT_FALSE(delegate->tap_down()); | 559 EXPECT_FALSE(delegate->tap_down()); |
| 560 EXPECT_FALSE(delegate->begin()); |
543 EXPECT_FALSE(delegate->double_tap()); | 561 EXPECT_FALSE(delegate->double_tap()); |
544 EXPECT_FALSE(delegate->scroll_begin()); | 562 EXPECT_FALSE(delegate->scroll_begin()); |
545 EXPECT_FALSE(delegate->scroll_update()); | 563 EXPECT_FALSE(delegate->scroll_update()); |
546 EXPECT_FALSE(delegate->scroll_end()); | 564 EXPECT_FALSE(delegate->scroll_end()); |
547 EXPECT_FALSE(delegate->long_press()); | 565 EXPECT_FALSE(delegate->long_press()); |
548 | 566 |
549 delegate->Reset(); | 567 delegate->Reset(); |
550 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(50, 195), | 568 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(50, 195), |
551 kTouchId, press.time_stamp() + | 569 kTouchId, press.time_stamp() + |
552 base::TimeDelta::FromMilliseconds(50)); | 570 base::TimeDelta::FromMilliseconds(50)); |
553 release.set_radius_x(4); | 571 release.set_radius_x(4); |
554 release.set_radius_y(8); | 572 release.set_radius_y(8); |
555 | 573 |
556 root_window()->DispatchTouchEvent(&release); | 574 root_window()->DispatchTouchEvent(&release); |
557 EXPECT_TRUE(delegate->tap()); | 575 EXPECT_TRUE(delegate->tap()); |
558 EXPECT_FALSE(delegate->tap_down()); | 576 EXPECT_FALSE(delegate->tap_down()); |
| 577 EXPECT_FALSE(delegate->begin()); |
| 578 EXPECT_TRUE(delegate->end()); |
559 EXPECT_FALSE(delegate->double_tap()); | 579 EXPECT_FALSE(delegate->double_tap()); |
560 EXPECT_FALSE(delegate->scroll_begin()); | 580 EXPECT_FALSE(delegate->scroll_begin()); |
561 EXPECT_FALSE(delegate->scroll_update()); | 581 EXPECT_FALSE(delegate->scroll_update()); |
562 EXPECT_FALSE(delegate->scroll_end()); | 582 EXPECT_FALSE(delegate->scroll_end()); |
563 | 583 |
564 gfx::Point actual_point(delegate->tap_location()); | 584 gfx::Point actual_point(delegate->tap_location()); |
565 EXPECT_EQ(14, delegate->radius_x()); | 585 EXPECT_EQ(14, delegate->radius_x()); |
566 EXPECT_EQ(14, delegate->radius_y()); | 586 EXPECT_EQ(14, delegate->radius_y()); |
567 EXPECT_EQ(49, actual_point.x()); | 587 EXPECT_EQ(49, actual_point.x()); |
568 EXPECT_EQ(200, actual_point.y()); | 588 EXPECT_EQ(200, actual_point.y()); |
569 } | 589 } |
570 | 590 |
571 // Test with a few ET_TOUCH_MOVED events. | 591 // Test with a few ET_TOUCH_MOVED events. |
572 { | 592 { |
573 delegate->Reset(); | 593 delegate->Reset(); |
574 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(400, 150), | 594 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(400, 150), |
575 kTouchId, GetTime()); | 595 kTouchId, GetTime()); |
576 press.set_radius_x(7); | 596 press.set_radius_x(7); |
577 press.set_radius_y(10); | 597 press.set_radius_y(10); |
578 root_window()->DispatchTouchEvent(&press); | 598 root_window()->DispatchTouchEvent(&press); |
579 EXPECT_FALSE(delegate->tap()); | 599 EXPECT_FALSE(delegate->tap()); |
580 EXPECT_TRUE(delegate->tap_down()); | 600 EXPECT_TRUE(delegate->tap_down()); |
| 601 EXPECT_TRUE(delegate->begin()); |
581 EXPECT_FALSE(delegate->double_tap()); | 602 EXPECT_FALSE(delegate->double_tap()); |
582 EXPECT_FALSE(delegate->scroll_begin()); | 603 EXPECT_FALSE(delegate->scroll_begin()); |
583 EXPECT_FALSE(delegate->scroll_update()); | 604 EXPECT_FALSE(delegate->scroll_update()); |
584 EXPECT_FALSE(delegate->scroll_end()); | 605 EXPECT_FALSE(delegate->scroll_end()); |
585 EXPECT_FALSE(delegate->long_press()); | 606 EXPECT_FALSE(delegate->long_press()); |
586 | 607 |
587 delegate->Reset(); | 608 delegate->Reset(); |
588 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(397, 155), | 609 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(397, 155), |
589 kTouchId, press.time_stamp() + | 610 kTouchId, press.time_stamp() + |
590 base::TimeDelta::FromMilliseconds(50)); | 611 base::TimeDelta::FromMilliseconds(50)); |
591 move.set_radius_x(13); | 612 move.set_radius_x(13); |
592 move.set_radius_y(12); | 613 move.set_radius_y(12); |
593 root_window()->DispatchTouchEvent(&move); | 614 root_window()->DispatchTouchEvent(&move); |
594 EXPECT_FALSE(delegate->tap()); | 615 EXPECT_FALSE(delegate->tap()); |
595 EXPECT_FALSE(delegate->tap_down()); | 616 EXPECT_FALSE(delegate->tap_down()); |
| 617 EXPECT_FALSE(delegate->begin()); |
596 EXPECT_FALSE(delegate->double_tap()); | 618 EXPECT_FALSE(delegate->double_tap()); |
597 EXPECT_FALSE(delegate->scroll_begin()); | 619 EXPECT_FALSE(delegate->scroll_begin()); |
598 EXPECT_FALSE(delegate->scroll_update()); | 620 EXPECT_FALSE(delegate->scroll_update()); |
599 EXPECT_FALSE(delegate->scroll_end()); | 621 EXPECT_FALSE(delegate->scroll_end()); |
600 EXPECT_FALSE(delegate->long_press()); | 622 EXPECT_FALSE(delegate->long_press()); |
601 | 623 |
602 delegate->Reset(); | 624 delegate->Reset(); |
603 TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(395, 148), | 625 TouchEvent move1(ui::ET_TOUCH_MOVED, gfx::Point(395, 148), |
604 kTouchId, move.time_stamp() + | 626 kTouchId, move.time_stamp() + |
605 base::TimeDelta::FromMilliseconds(50)); | 627 base::TimeDelta::FromMilliseconds(50)); |
606 move1.set_radius_x(16); | 628 move1.set_radius_x(16); |
607 move1.set_radius_y(16); | 629 move1.set_radius_y(16); |
608 root_window()->DispatchTouchEvent(&move1); | 630 root_window()->DispatchTouchEvent(&move1); |
609 EXPECT_FALSE(delegate->tap()); | 631 EXPECT_FALSE(delegate->tap()); |
610 EXPECT_FALSE(delegate->tap_down()); | 632 EXPECT_FALSE(delegate->tap_down()); |
| 633 EXPECT_FALSE(delegate->begin()); |
611 EXPECT_FALSE(delegate->double_tap()); | 634 EXPECT_FALSE(delegate->double_tap()); |
612 EXPECT_FALSE(delegate->scroll_begin()); | 635 EXPECT_FALSE(delegate->scroll_begin()); |
613 EXPECT_FALSE(delegate->scroll_update()); | 636 EXPECT_FALSE(delegate->scroll_update()); |
614 EXPECT_FALSE(delegate->scroll_end()); | 637 EXPECT_FALSE(delegate->scroll_end()); |
615 EXPECT_FALSE(delegate->long_press()); | 638 EXPECT_FALSE(delegate->long_press()); |
616 | 639 |
617 delegate->Reset(); | 640 delegate->Reset(); |
618 TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(400, 150), | 641 TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(400, 150), |
619 kTouchId, move1.time_stamp() + | 642 kTouchId, move1.time_stamp() + |
620 base::TimeDelta::FromMilliseconds(50)); | 643 base::TimeDelta::FromMilliseconds(50)); |
621 move2.set_radius_x(14); | 644 move2.set_radius_x(14); |
622 move2.set_radius_y(10); | 645 move2.set_radius_y(10); |
623 root_window()->DispatchTouchEvent(&move2); | 646 root_window()->DispatchTouchEvent(&move2); |
624 EXPECT_FALSE(delegate->tap()); | 647 EXPECT_FALSE(delegate->tap()); |
625 EXPECT_FALSE(delegate->tap_down()); | 648 EXPECT_FALSE(delegate->tap_down()); |
| 649 EXPECT_FALSE(delegate->begin()); |
626 EXPECT_FALSE(delegate->double_tap()); | 650 EXPECT_FALSE(delegate->double_tap()); |
627 EXPECT_FALSE(delegate->scroll_begin()); | 651 EXPECT_FALSE(delegate->scroll_begin()); |
628 EXPECT_FALSE(delegate->scroll_update()); | 652 EXPECT_FALSE(delegate->scroll_update()); |
629 EXPECT_FALSE(delegate->scroll_end()); | 653 EXPECT_FALSE(delegate->scroll_end()); |
630 EXPECT_FALSE(delegate->long_press()); | 654 EXPECT_FALSE(delegate->long_press()); |
631 | 655 |
632 delegate->Reset(); | 656 delegate->Reset(); |
633 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(401, 149), | 657 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(401, 149), |
634 kTouchId, press.time_stamp() + | 658 kTouchId, press.time_stamp() + |
635 base::TimeDelta::FromMilliseconds(50)); | 659 base::TimeDelta::FromMilliseconds(50)); |
636 release.set_radius_x(8); | 660 release.set_radius_x(8); |
637 release.set_radius_y(9); | 661 release.set_radius_y(9); |
638 | 662 |
639 root_window()->DispatchTouchEvent(&release); | 663 root_window()->DispatchTouchEvent(&release); |
640 EXPECT_TRUE(delegate->tap()); | 664 EXPECT_TRUE(delegate->tap()); |
641 EXPECT_FALSE(delegate->tap_down()); | 665 EXPECT_FALSE(delegate->tap_down()); |
| 666 EXPECT_FALSE(delegate->begin()); |
| 667 EXPECT_TRUE(delegate->end()); |
642 EXPECT_FALSE(delegate->double_tap()); | 668 EXPECT_FALSE(delegate->double_tap()); |
643 EXPECT_FALSE(delegate->scroll_begin()); | 669 EXPECT_FALSE(delegate->scroll_begin()); |
644 EXPECT_FALSE(delegate->scroll_update()); | 670 EXPECT_FALSE(delegate->scroll_update()); |
645 EXPECT_FALSE(delegate->scroll_end()); | 671 EXPECT_FALSE(delegate->scroll_end()); |
646 | 672 |
647 gfx::Point actual_point(delegate->tap_location()); | 673 gfx::Point actual_point(delegate->tap_location()); |
648 EXPECT_EQ(17, delegate->radius_x()); | 674 EXPECT_EQ(17, delegate->radius_x()); |
649 EXPECT_EQ(18, delegate->radius_y()); | 675 EXPECT_EQ(18, delegate->radius_y()); |
650 EXPECT_EQ(396, actual_point.x()); | 676 EXPECT_EQ(396, actual_point.x()); |
651 EXPECT_EQ(149, actual_point.y()); | 677 EXPECT_EQ(149, actual_point.y()); |
(...skipping 10 matching lines...) Expand all Loading... |
662 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); | 688 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); |
663 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 689 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
664 delegate.get(), -1234, bounds, NULL)); | 690 delegate.get(), -1234, bounds, NULL)); |
665 | 691 |
666 delegate->Reset(); | 692 delegate->Reset(); |
667 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 693 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
668 kTouchId, GetTime()); | 694 kTouchId, GetTime()); |
669 root_window()->DispatchTouchEvent(&press); | 695 root_window()->DispatchTouchEvent(&press); |
670 EXPECT_FALSE(delegate->tap()); | 696 EXPECT_FALSE(delegate->tap()); |
671 EXPECT_TRUE(delegate->tap_down()); | 697 EXPECT_TRUE(delegate->tap_down()); |
| 698 EXPECT_TRUE(delegate->begin()); |
672 EXPECT_FALSE(delegate->double_tap()); | 699 EXPECT_FALSE(delegate->double_tap()); |
673 EXPECT_FALSE(delegate->scroll_begin()); | 700 EXPECT_FALSE(delegate->scroll_begin()); |
674 EXPECT_FALSE(delegate->scroll_update()); | 701 EXPECT_FALSE(delegate->scroll_update()); |
675 EXPECT_FALSE(delegate->scroll_end()); | 702 EXPECT_FALSE(delegate->scroll_end()); |
676 | 703 |
677 // Move the touch-point enough so that it is considered as a scroll. This | 704 // Move the touch-point enough so that it is considered as a scroll. This |
678 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures. | 705 // should generate both SCROLL_BEGIN and SCROLL_UPDATE gestures. |
679 // The first movement is diagonal, to ensure that we have a free scroll, | 706 // The first movement is diagonal, to ensure that we have a free scroll, |
680 // and not a rail scroll. | 707 // and not a rail scroll. |
681 SendScrollEvent(root_window(), 130, 230, kTouchId, delegate.get()); | 708 SendScrollEvent(root_window(), 130, 230, kTouchId, delegate.get()); |
682 EXPECT_FALSE(delegate->tap()); | 709 EXPECT_FALSE(delegate->tap()); |
683 EXPECT_FALSE(delegate->tap_down()); | 710 EXPECT_FALSE(delegate->tap_down()); |
| 711 EXPECT_FALSE(delegate->begin()); |
684 EXPECT_FALSE(delegate->double_tap()); | 712 EXPECT_FALSE(delegate->double_tap()); |
685 EXPECT_TRUE(delegate->scroll_begin()); | 713 EXPECT_TRUE(delegate->scroll_begin()); |
686 EXPECT_TRUE(delegate->scroll_update()); | 714 EXPECT_TRUE(delegate->scroll_update()); |
687 EXPECT_FALSE(delegate->scroll_end()); | 715 EXPECT_FALSE(delegate->scroll_end()); |
688 EXPECT_EQ(29, delegate->scroll_x()); | 716 EXPECT_EQ(29, delegate->scroll_x()); |
689 EXPECT_EQ(29, delegate->scroll_y()); | 717 EXPECT_EQ(29, delegate->scroll_y()); |
690 EXPECT_EQ(gfx::Point(1, 1).ToString(), | 718 EXPECT_EQ(gfx::Point(1, 1).ToString(), |
691 delegate->scroll_begin_position().ToString()); | 719 delegate->scroll_begin_position().ToString()); |
692 | 720 |
693 // Move some more to generate a few more scroll updates. | 721 // Move some more to generate a few more scroll updates. |
694 SendScrollEvent(root_window(), 110, 211, kTouchId, delegate.get()); | 722 SendScrollEvent(root_window(), 110, 211, kTouchId, delegate.get()); |
695 EXPECT_FALSE(delegate->tap()); | 723 EXPECT_FALSE(delegate->tap()); |
696 EXPECT_FALSE(delegate->tap_down()); | 724 EXPECT_FALSE(delegate->tap_down()); |
| 725 EXPECT_FALSE(delegate->begin()); |
697 EXPECT_FALSE(delegate->double_tap()); | 726 EXPECT_FALSE(delegate->double_tap()); |
698 EXPECT_FALSE(delegate->scroll_begin()); | 727 EXPECT_FALSE(delegate->scroll_begin()); |
699 EXPECT_TRUE(delegate->scroll_update()); | 728 EXPECT_TRUE(delegate->scroll_update()); |
700 EXPECT_FALSE(delegate->scroll_end()); | 729 EXPECT_FALSE(delegate->scroll_end()); |
701 EXPECT_EQ(-20, delegate->scroll_x()); | 730 EXPECT_EQ(-20, delegate->scroll_x()); |
702 EXPECT_EQ(-19, delegate->scroll_y()); | 731 EXPECT_EQ(-19, delegate->scroll_y()); |
703 | 732 |
704 SendScrollEvent(root_window(), 140, 215, kTouchId, delegate.get()); | 733 SendScrollEvent(root_window(), 140, 215, kTouchId, delegate.get()); |
705 EXPECT_FALSE(delegate->tap()); | 734 EXPECT_FALSE(delegate->tap()); |
706 EXPECT_FALSE(delegate->tap_down()); | 735 EXPECT_FALSE(delegate->tap_down()); |
| 736 EXPECT_FALSE(delegate->begin()); |
707 EXPECT_FALSE(delegate->double_tap()); | 737 EXPECT_FALSE(delegate->double_tap()); |
708 EXPECT_FALSE(delegate->scroll_begin()); | 738 EXPECT_FALSE(delegate->scroll_begin()); |
709 EXPECT_TRUE(delegate->scroll_update()); | 739 EXPECT_TRUE(delegate->scroll_update()); |
710 EXPECT_FALSE(delegate->scroll_end()); | 740 EXPECT_FALSE(delegate->scroll_end()); |
711 EXPECT_EQ(30, delegate->scroll_x()); | 741 EXPECT_EQ(30, delegate->scroll_x()); |
712 EXPECT_EQ(4, delegate->scroll_y()); | 742 EXPECT_EQ(4, delegate->scroll_y()); |
713 | 743 |
714 // Release the touch. This should end the scroll. | 744 // Release the touch. This should end the scroll. |
715 delegate->Reset(); | 745 delegate->Reset(); |
716 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 746 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
717 kTouchId, press.time_stamp() + | 747 kTouchId, press.time_stamp() + |
718 base::TimeDelta::FromMilliseconds(50)); | 748 base::TimeDelta::FromMilliseconds(50)); |
719 root_window()->DispatchTouchEvent(&release); | 749 root_window()->DispatchTouchEvent(&release); |
720 EXPECT_FALSE(delegate->tap()); | 750 EXPECT_FALSE(delegate->tap()); |
721 EXPECT_FALSE(delegate->tap_down()); | 751 EXPECT_FALSE(delegate->tap_down()); |
| 752 EXPECT_FALSE(delegate->begin()); |
| 753 EXPECT_TRUE(delegate->end()); |
722 EXPECT_FALSE(delegate->double_tap()); | 754 EXPECT_FALSE(delegate->double_tap()); |
723 EXPECT_FALSE(delegate->scroll_begin()); | 755 EXPECT_FALSE(delegate->scroll_begin()); |
724 EXPECT_FALSE(delegate->scroll_update()); | 756 EXPECT_FALSE(delegate->scroll_update()); |
725 EXPECT_TRUE(delegate->scroll_end()); | 757 EXPECT_TRUE(delegate->scroll_end()); |
726 } | 758 } |
727 | 759 |
728 // Check Scroll End Events report correct velocities | 760 // Check Scroll End Events report correct velocities |
729 // if the user was on a horizontal rail | 761 // if the user was on a horizontal rail |
730 TEST_F(GestureRecognizerTest, GestureEventHorizontalRailFling) { | 762 TEST_F(GestureRecognizerTest, GestureEventHorizontalRailFling) { |
731 scoped_ptr<GestureEventConsumeDelegate> delegate( | 763 scoped_ptr<GestureEventConsumeDelegate> delegate( |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 TimerTestGestureSequence* gesture_sequence = | 881 TimerTestGestureSequence* gesture_sequence = |
850 static_cast<TimerTestGestureSequence*>( | 882 static_cast<TimerTestGestureSequence*>( |
851 gesture_recognizer->GetGestureSequenceForTesting(window.get())); | 883 gesture_recognizer->GetGestureSequenceForTesting(window.get())); |
852 | 884 |
853 root_window()->SetGestureRecognizerForTesting(gesture_recognizer); | 885 root_window()->SetGestureRecognizerForTesting(gesture_recognizer); |
854 | 886 |
855 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 887 TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
856 kTouchId, GetTime()); | 888 kTouchId, GetTime()); |
857 root_window()->DispatchTouchEvent(&press1); | 889 root_window()->DispatchTouchEvent(&press1); |
858 EXPECT_TRUE(delegate->tap_down()); | 890 EXPECT_TRUE(delegate->tap_down()); |
| 891 EXPECT_TRUE(delegate->begin()); |
859 | 892 |
860 // We haven't pressed long enough for a long press to occur | 893 // We haven't pressed long enough for a long press to occur |
861 EXPECT_FALSE(delegate->long_press()); | 894 EXPECT_FALSE(delegate->long_press()); |
862 | 895 |
863 // Wait until the timer runs out | 896 // Wait until the timer runs out |
864 gesture_sequence->ForceTimeout(); | 897 gesture_sequence->ForceTimeout(); |
865 EXPECT_TRUE(delegate->long_press()); | 898 EXPECT_TRUE(delegate->long_press()); |
866 EXPECT_EQ(0, delegate->touch_id()); | 899 EXPECT_EQ(0, delegate->touch_id()); |
867 | 900 |
868 delegate->Reset(); | 901 delegate->Reset(); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
932 static_cast<TimerTestGestureSequence*>( | 965 static_cast<TimerTestGestureSequence*>( |
933 gesture_recognizer->GetGestureSequenceForTesting(window.get())); | 966 gesture_recognizer->GetGestureSequenceForTesting(window.get())); |
934 | 967 |
935 root_window()->SetGestureRecognizerForTesting(gesture_recognizer); | 968 root_window()->SetGestureRecognizerForTesting(gesture_recognizer); |
936 | 969 |
937 delegate->Reset(); | 970 delegate->Reset(); |
938 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 971 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
939 kTouchId1, GetTime()); | 972 kTouchId1, GetTime()); |
940 root_window()->DispatchTouchEvent(&press); | 973 root_window()->DispatchTouchEvent(&press); |
941 EXPECT_TRUE(delegate->tap_down()); | 974 EXPECT_TRUE(delegate->tap_down()); |
| 975 EXPECT_TRUE(delegate->begin()); |
942 | 976 |
943 // We haven't pressed long enough for a long press to occur | 977 // We haven't pressed long enough for a long press to occur |
944 EXPECT_FALSE(delegate->long_press()); | 978 EXPECT_FALSE(delegate->long_press()); |
945 | 979 |
946 // Second tap, to cancel the long press | 980 // Second tap, to cancel the long press |
947 delegate->Reset(); | 981 delegate->Reset(); |
948 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), | 982 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), |
949 kTouchId2, GetTime()); | 983 kTouchId2, GetTime()); |
950 root_window()->DispatchTouchEvent(&press2); | 984 root_window()->DispatchTouchEvent(&press2); |
951 EXPECT_FALSE(delegate->tap_down()); // no touch down for second tap. | 985 EXPECT_FALSE(delegate->tap_down()); // no touch down for second tap. |
| 986 EXPECT_TRUE(delegate->begin()); |
952 | 987 |
953 // Wait until the timer runs out | 988 // Wait until the timer runs out |
954 gesture_sequence->ForceTimeout(); | 989 gesture_sequence->ForceTimeout(); |
955 | 990 |
956 // No long press occurred | 991 // No long press occurred |
957 EXPECT_FALSE(delegate->long_press()); | 992 EXPECT_FALSE(delegate->long_press()); |
958 | 993 |
959 delegate->Reset(); | 994 delegate->Reset(); |
960 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 995 TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
961 kTouchId1, GetTime()); | 996 kTouchId1, GetTime()); |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1205 | 1240 |
1206 queued_delegate->set_window(queue.get()); | 1241 queued_delegate->set_window(queue.get()); |
1207 | 1242 |
1208 // Touch down on the window. This should not generate any gesture event. | 1243 // Touch down on the window. This should not generate any gesture event. |
1209 queued_delegate->Reset(); | 1244 queued_delegate->Reset(); |
1210 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 1245 TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
1211 kTouchId1, GetTime()); | 1246 kTouchId1, GetTime()); |
1212 root_window()->DispatchTouchEvent(&press); | 1247 root_window()->DispatchTouchEvent(&press); |
1213 EXPECT_FALSE(queued_delegate->tap()); | 1248 EXPECT_FALSE(queued_delegate->tap()); |
1214 EXPECT_FALSE(queued_delegate->tap_down()); | 1249 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1250 EXPECT_FALSE(queued_delegate->begin()); |
1215 EXPECT_FALSE(queued_delegate->double_tap()); | 1251 EXPECT_FALSE(queued_delegate->double_tap()); |
1216 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1252 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1217 EXPECT_FALSE(queued_delegate->scroll_update()); | 1253 EXPECT_FALSE(queued_delegate->scroll_update()); |
1218 EXPECT_FALSE(queued_delegate->scroll_end()); | 1254 EXPECT_FALSE(queued_delegate->scroll_end()); |
1219 | 1255 |
1220 // Introduce some delay before the touch is released so that it is recognized | 1256 // Introduce some delay before the touch is released so that it is recognized |
1221 // as a tap. However, this still should not create any gesture events. | 1257 // as a tap. However, this still should not create any gesture events. |
1222 queued_delegate->Reset(); | 1258 queued_delegate->Reset(); |
1223 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 1259 TouchEvent release(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
1224 kTouchId1, press.time_stamp() + | 1260 kTouchId1, press.time_stamp() + |
1225 base::TimeDelta::FromMilliseconds(50)); | 1261 base::TimeDelta::FromMilliseconds(50)); |
1226 root_window()->DispatchTouchEvent(&release); | 1262 root_window()->DispatchTouchEvent(&release); |
1227 EXPECT_FALSE(queued_delegate->tap()); | 1263 EXPECT_FALSE(queued_delegate->tap()); |
1228 EXPECT_FALSE(queued_delegate->tap_down()); | 1264 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1265 EXPECT_FALSE(queued_delegate->begin()); |
| 1266 EXPECT_FALSE(queued_delegate->end()); |
1229 EXPECT_FALSE(queued_delegate->double_tap()); | 1267 EXPECT_FALSE(queued_delegate->double_tap()); |
1230 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1268 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1231 EXPECT_FALSE(queued_delegate->scroll_update()); | 1269 EXPECT_FALSE(queued_delegate->scroll_update()); |
1232 EXPECT_FALSE(queued_delegate->scroll_end()); | 1270 EXPECT_FALSE(queued_delegate->scroll_end()); |
1233 | 1271 |
1234 // Create another window, and place a touch-down on it. This should create a | 1272 // Create another window, and place a touch-down on it. This should create a |
1235 // tap-down gesture. | 1273 // tap-down gesture. |
1236 scoped_ptr<GestureEventConsumeDelegate> delegate( | 1274 scoped_ptr<GestureEventConsumeDelegate> delegate( |
1237 new GestureEventConsumeDelegate()); | 1275 new GestureEventConsumeDelegate()); |
1238 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( | 1276 scoped_ptr<aura::Window> window(CreateTestWindowWithDelegate( |
1239 delegate.get(), -2345, gfx::Rect(0, 0, 50, 50), NULL)); | 1277 delegate.get(), -2345, gfx::Rect(0, 0, 50, 50), NULL)); |
1240 delegate->Reset(); | 1278 delegate->Reset(); |
1241 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), | 1279 TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(10, 20), |
1242 kTouchId2, GetTime()); | 1280 kTouchId2, GetTime()); |
1243 root_window()->DispatchTouchEvent(&press2); | 1281 root_window()->DispatchTouchEvent(&press2); |
1244 EXPECT_FALSE(delegate->tap()); | 1282 EXPECT_FALSE(delegate->tap()); |
1245 EXPECT_TRUE(delegate->tap_down()); | 1283 EXPECT_TRUE(delegate->tap_down()); |
| 1284 EXPECT_FALSE(queued_delegate->begin()); |
| 1285 EXPECT_FALSE(queued_delegate->end()); |
1246 EXPECT_FALSE(delegate->double_tap()); | 1286 EXPECT_FALSE(delegate->double_tap()); |
1247 EXPECT_FALSE(delegate->scroll_begin()); | 1287 EXPECT_FALSE(delegate->scroll_begin()); |
1248 EXPECT_FALSE(delegate->scroll_update()); | 1288 EXPECT_FALSE(delegate->scroll_update()); |
1249 EXPECT_FALSE(delegate->scroll_end()); | 1289 EXPECT_FALSE(delegate->scroll_end()); |
1250 | 1290 |
1251 TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), | 1291 TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), |
1252 kTouchId2, GetTime()); | 1292 kTouchId2, GetTime()); |
1253 root_window()->DispatchTouchEvent(&release2); | 1293 root_window()->DispatchTouchEvent(&release2); |
1254 | 1294 |
1255 // Process the first queued event. | 1295 // Process the first queued event. |
1256 queued_delegate->Reset(); | 1296 queued_delegate->Reset(); |
1257 queued_delegate->ReceivedAck(); | 1297 queued_delegate->ReceivedAck(); |
1258 EXPECT_FALSE(queued_delegate->tap()); | 1298 EXPECT_FALSE(queued_delegate->tap()); |
1259 EXPECT_TRUE(queued_delegate->tap_down()); | 1299 EXPECT_TRUE(queued_delegate->tap_down()); |
| 1300 EXPECT_TRUE(queued_delegate->begin()); |
| 1301 EXPECT_FALSE(queued_delegate->end()); |
1260 EXPECT_FALSE(queued_delegate->double_tap()); | 1302 EXPECT_FALSE(queued_delegate->double_tap()); |
1261 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1303 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1262 EXPECT_FALSE(queued_delegate->scroll_update()); | 1304 EXPECT_FALSE(queued_delegate->scroll_update()); |
1263 EXPECT_FALSE(queued_delegate->scroll_end()); | 1305 EXPECT_FALSE(queued_delegate->scroll_end()); |
1264 | 1306 |
1265 // Now, process the second queued event. | 1307 // Now, process the second queued event. |
1266 queued_delegate->Reset(); | 1308 queued_delegate->Reset(); |
1267 queued_delegate->ReceivedAck(); | 1309 queued_delegate->ReceivedAck(); |
1268 EXPECT_TRUE(queued_delegate->tap()); | 1310 EXPECT_TRUE(queued_delegate->tap()); |
1269 EXPECT_FALSE(queued_delegate->tap_down()); | 1311 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1312 EXPECT_FALSE(queued_delegate->begin()); |
| 1313 EXPECT_TRUE(queued_delegate->end()); |
1270 EXPECT_FALSE(queued_delegate->double_tap()); | 1314 EXPECT_FALSE(queued_delegate->double_tap()); |
1271 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1315 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1272 EXPECT_FALSE(queued_delegate->scroll_update()); | 1316 EXPECT_FALSE(queued_delegate->scroll_update()); |
1273 EXPECT_FALSE(queued_delegate->scroll_end()); | 1317 EXPECT_FALSE(queued_delegate->scroll_end()); |
1274 | 1318 |
1275 // Start all over. Press on the first window, then press again on the second | 1319 // Start all over. Press on the first window, then press again on the second |
1276 // window. The second press should still go to the first window. | 1320 // window. The second press should still go to the first window. |
1277 queued_delegate->Reset(); | 1321 queued_delegate->Reset(); |
1278 TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), | 1322 TouchEvent press3(ui::ET_TOUCH_PRESSED, gfx::Point(101, 201), |
1279 kTouchId1, GetTime()); | 1323 kTouchId1, GetTime()); |
1280 root_window()->DispatchTouchEvent(&press3); | 1324 root_window()->DispatchTouchEvent(&press3); |
1281 EXPECT_FALSE(queued_delegate->tap()); | 1325 EXPECT_FALSE(queued_delegate->tap()); |
1282 EXPECT_FALSE(queued_delegate->tap_down()); | 1326 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1327 EXPECT_FALSE(queued_delegate->begin()); |
| 1328 EXPECT_FALSE(queued_delegate->end()); |
| 1329 EXPECT_FALSE(queued_delegate->begin()); |
| 1330 EXPECT_FALSE(queued_delegate->end()); |
1283 EXPECT_FALSE(queued_delegate->double_tap()); | 1331 EXPECT_FALSE(queued_delegate->double_tap()); |
1284 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1332 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1285 EXPECT_FALSE(queued_delegate->scroll_update()); | 1333 EXPECT_FALSE(queued_delegate->scroll_update()); |
1286 EXPECT_FALSE(queued_delegate->scroll_end()); | 1334 EXPECT_FALSE(queued_delegate->scroll_end()); |
1287 | 1335 |
1288 queued_delegate->Reset(); | 1336 queued_delegate->Reset(); |
1289 delegate->Reset(); | 1337 delegate->Reset(); |
1290 TouchEvent press4(ui::ET_TOUCH_PRESSED, gfx::Point(103, 203), | 1338 TouchEvent press4(ui::ET_TOUCH_PRESSED, gfx::Point(103, 203), |
1291 kTouchId2, GetTime()); | 1339 kTouchId2, GetTime()); |
1292 root_window()->DispatchTouchEvent(&press4); | 1340 root_window()->DispatchTouchEvent(&press4); |
1293 EXPECT_FALSE(delegate->tap()); | 1341 EXPECT_FALSE(delegate->tap()); |
1294 EXPECT_FALSE(delegate->tap_down()); | 1342 EXPECT_FALSE(delegate->tap_down()); |
| 1343 EXPECT_FALSE(delegate->begin()); |
| 1344 EXPECT_FALSE(delegate->end()); |
1295 EXPECT_FALSE(delegate->double_tap()); | 1345 EXPECT_FALSE(delegate->double_tap()); |
1296 EXPECT_FALSE(delegate->scroll_begin()); | 1346 EXPECT_FALSE(delegate->scroll_begin()); |
1297 EXPECT_FALSE(delegate->scroll_update()); | 1347 EXPECT_FALSE(delegate->scroll_update()); |
1298 EXPECT_FALSE(delegate->scroll_end()); | 1348 EXPECT_FALSE(delegate->scroll_end()); |
1299 EXPECT_FALSE(queued_delegate->tap()); | 1349 EXPECT_FALSE(queued_delegate->tap()); |
1300 EXPECT_FALSE(queued_delegate->tap_down()); | 1350 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1351 EXPECT_FALSE(queued_delegate->begin()); |
| 1352 EXPECT_FALSE(queued_delegate->end()); |
1301 EXPECT_FALSE(queued_delegate->double_tap()); | 1353 EXPECT_FALSE(queued_delegate->double_tap()); |
1302 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1354 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1303 EXPECT_FALSE(queued_delegate->scroll_update()); | 1355 EXPECT_FALSE(queued_delegate->scroll_update()); |
1304 EXPECT_FALSE(queued_delegate->scroll_end()); | 1356 EXPECT_FALSE(queued_delegate->scroll_end()); |
1305 | 1357 |
1306 // Move the second touch-point enough so that it is considered a pinch. This | 1358 // Move the second touch-point enough so that it is considered a pinch. This |
1307 // should generate both SCROLL_BEGIN and PINCH_BEGIN gestures. | 1359 // should generate both SCROLL_BEGIN and PINCH_BEGIN gestures. |
1308 queued_delegate->Reset(); | 1360 queued_delegate->Reset(); |
1309 delegate->Reset(); | 1361 delegate->Reset(); |
1310 int x_move = ui::GestureConfiguration::max_touch_move_in_pixels_for_click(); | 1362 int x_move = ui::GestureConfiguration::max_touch_move_in_pixels_for_click(); |
1311 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(103 + x_move, 203), | 1363 TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(103 + x_move, 203), |
1312 kTouchId2, GetTime()); | 1364 kTouchId2, GetTime()); |
1313 root_window()->DispatchTouchEvent(&move); | 1365 root_window()->DispatchTouchEvent(&move); |
1314 EXPECT_FALSE(delegate->tap()); | 1366 EXPECT_FALSE(delegate->tap()); |
1315 EXPECT_FALSE(delegate->tap_down()); | 1367 EXPECT_FALSE(delegate->tap_down()); |
| 1368 EXPECT_FALSE(delegate->begin()); |
1316 EXPECT_FALSE(delegate->double_tap()); | 1369 EXPECT_FALSE(delegate->double_tap()); |
1317 EXPECT_FALSE(delegate->scroll_begin()); | 1370 EXPECT_FALSE(delegate->scroll_begin()); |
1318 EXPECT_FALSE(delegate->scroll_update()); | 1371 EXPECT_FALSE(delegate->scroll_update()); |
1319 EXPECT_FALSE(delegate->scroll_end()); | 1372 EXPECT_FALSE(delegate->scroll_end()); |
1320 EXPECT_FALSE(queued_delegate->tap()); | 1373 EXPECT_FALSE(queued_delegate->tap()); |
1321 EXPECT_FALSE(queued_delegate->tap_down()); | 1374 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1375 EXPECT_FALSE(queued_delegate->begin()); |
1322 EXPECT_FALSE(queued_delegate->double_tap()); | 1376 EXPECT_FALSE(queued_delegate->double_tap()); |
1323 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1377 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1324 EXPECT_FALSE(queued_delegate->scroll_update()); | 1378 EXPECT_FALSE(queued_delegate->scroll_update()); |
1325 EXPECT_FALSE(queued_delegate->scroll_end()); | 1379 EXPECT_FALSE(queued_delegate->scroll_end()); |
1326 | 1380 |
1327 queued_delegate->Reset(); | 1381 queued_delegate->Reset(); |
1328 queued_delegate->ReceivedAck(); | 1382 queued_delegate->ReceivedAck(); |
1329 EXPECT_FALSE(queued_delegate->tap()); | 1383 EXPECT_FALSE(queued_delegate->tap()); |
1330 EXPECT_TRUE(queued_delegate->tap_down()); | 1384 EXPECT_TRUE(queued_delegate->tap_down()); |
| 1385 EXPECT_TRUE(queued_delegate->begin()); |
| 1386 EXPECT_FALSE(queued_delegate->end()); |
1331 EXPECT_FALSE(queued_delegate->double_tap()); | 1387 EXPECT_FALSE(queued_delegate->double_tap()); |
1332 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1388 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1333 EXPECT_FALSE(queued_delegate->scroll_update()); | 1389 EXPECT_FALSE(queued_delegate->scroll_update()); |
1334 EXPECT_FALSE(queued_delegate->scroll_end()); | 1390 EXPECT_FALSE(queued_delegate->scroll_end()); |
1335 | 1391 |
1336 queued_delegate->Reset(); | 1392 queued_delegate->Reset(); |
1337 queued_delegate->ReceivedAck(); | 1393 queued_delegate->ReceivedAck(); |
1338 EXPECT_FALSE(queued_delegate->tap()); | 1394 EXPECT_FALSE(queued_delegate->tap()); |
1339 EXPECT_FALSE(queued_delegate->tap_down()); // no touch down for second tap. | 1395 EXPECT_FALSE(queued_delegate->tap_down()); // no touch down for second tap. |
| 1396 EXPECT_TRUE(queued_delegate->begin()); |
| 1397 EXPECT_FALSE(queued_delegate->end()); |
1340 EXPECT_FALSE(queued_delegate->double_tap()); | 1398 EXPECT_FALSE(queued_delegate->double_tap()); |
1341 EXPECT_FALSE(queued_delegate->scroll_begin()); | 1399 EXPECT_FALSE(queued_delegate->scroll_begin()); |
1342 EXPECT_FALSE(queued_delegate->scroll_update()); | 1400 EXPECT_FALSE(queued_delegate->scroll_update()); |
1343 EXPECT_FALSE(queued_delegate->scroll_end()); | 1401 EXPECT_FALSE(queued_delegate->scroll_end()); |
1344 EXPECT_FALSE(queued_delegate->pinch_begin()); | 1402 EXPECT_FALSE(queued_delegate->pinch_begin()); |
1345 EXPECT_FALSE(queued_delegate->pinch_update()); | 1403 EXPECT_FALSE(queued_delegate->pinch_update()); |
1346 EXPECT_FALSE(queued_delegate->pinch_end()); | 1404 EXPECT_FALSE(queued_delegate->pinch_end()); |
1347 | 1405 |
1348 queued_delegate->Reset(); | 1406 queued_delegate->Reset(); |
1349 queued_delegate->ReceivedAck(); | 1407 queued_delegate->ReceivedAck(); |
1350 EXPECT_FALSE(queued_delegate->tap()); | 1408 EXPECT_FALSE(queued_delegate->tap()); |
1351 EXPECT_FALSE(queued_delegate->tap_down()); | 1409 EXPECT_FALSE(queued_delegate->tap_down()); |
| 1410 EXPECT_FALSE(queued_delegate->begin()); |
| 1411 EXPECT_FALSE(queued_delegate->end()); |
1352 EXPECT_FALSE(queued_delegate->double_tap()); | 1412 EXPECT_FALSE(queued_delegate->double_tap()); |
1353 EXPECT_TRUE(queued_delegate->scroll_begin()); | 1413 EXPECT_TRUE(queued_delegate->scroll_begin()); |
1354 EXPECT_FALSE(queued_delegate->scroll_update()); | 1414 EXPECT_FALSE(queued_delegate->scroll_update()); |
1355 EXPECT_FALSE(queued_delegate->scroll_end()); | 1415 EXPECT_FALSE(queued_delegate->scroll_end()); |
1356 EXPECT_TRUE(queued_delegate->pinch_begin()); | 1416 EXPECT_TRUE(queued_delegate->pinch_begin()); |
1357 EXPECT_FALSE(queued_delegate->pinch_update()); | 1417 EXPECT_FALSE(queued_delegate->pinch_update()); |
1358 EXPECT_FALSE(queued_delegate->pinch_end()); | 1418 EXPECT_FALSE(queued_delegate->pinch_end()); |
1359 } | 1419 } |
1360 | 1420 |
1361 // Check that appropriate touch events generate pinch gesture events. | 1421 // Check that appropriate touch events generate pinch gesture events. |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1775 generator.PressTouch(); | 1835 generator.PressTouch(); |
1776 RunAllPendingInMessageLoop(); | 1836 RunAllPendingInMessageLoop(); |
1777 | 1837 |
1778 EXPECT_TRUE(delegate->tap_down()); | 1838 EXPECT_TRUE(delegate->tap_down()); |
1779 | 1839 |
1780 scoped_ptr<aura::Window> capture(CreateTestWindowWithBounds( | 1840 scoped_ptr<aura::Window> capture(CreateTestWindowWithBounds( |
1781 gfx::Rect(10, 10, 200, 200), NULL)); | 1841 gfx::Rect(10, 10, 200, 200), NULL)); |
1782 capture->SetCapture(); | 1842 capture->SetCapture(); |
1783 RunAllPendingInMessageLoop(); | 1843 RunAllPendingInMessageLoop(); |
1784 | 1844 |
1785 EXPECT_TRUE(delegate->tap_up()); | 1845 EXPECT_TRUE(delegate->end()); |
1786 } | 1846 } |
1787 | 1847 |
1788 TEST_F(GestureRecognizerTest, TwoFingerTap) { | 1848 TEST_F(GestureRecognizerTest, TwoFingerTap) { |
1789 scoped_ptr<GestureEventConsumeDelegate> delegate( | 1849 scoped_ptr<GestureEventConsumeDelegate> delegate( |
1790 new GestureEventConsumeDelegate()); | 1850 new GestureEventConsumeDelegate()); |
1791 const int kWindowWidth = 123; | 1851 const int kWindowWidth = 123; |
1792 const int kWindowHeight = 45; | 1852 const int kWindowHeight = 45; |
1793 const int kTouchId1 = 2; | 1853 const int kTouchId1 = 2; |
1794 const int kTouchId2 = 3; | 1854 const int kTouchId2 = 3; |
1795 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); | 1855 gfx::Rect bounds(100, 200, kWindowWidth, kWindowHeight); |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2097 EXPECT_TRUE(delegate->scroll_begin()); | 2157 EXPECT_TRUE(delegate->scroll_begin()); |
2098 EXPECT_FALSE(delegate->scroll_update()); | 2158 EXPECT_FALSE(delegate->scroll_update()); |
2099 EXPECT_FALSE(delegate->scroll_end()); | 2159 EXPECT_FALSE(delegate->scroll_end()); |
2100 EXPECT_FALSE(delegate->long_press()); | 2160 EXPECT_FALSE(delegate->long_press()); |
2101 EXPECT_FALSE(delegate->two_finger_tap()); | 2161 EXPECT_FALSE(delegate->two_finger_tap()); |
2102 EXPECT_TRUE(delegate->pinch_begin()); | 2162 EXPECT_TRUE(delegate->pinch_begin()); |
2103 } | 2163 } |
2104 | 2164 |
2105 } // namespace test | 2165 } // namespace test |
2106 } // namespace aura | 2166 } // namespace aura |
OLD | NEW |