OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 23 matching lines...) Expand all Loading... | |
34 sConfig.gesture_detector_config.showpress_timeout = base::TimeDelta(); | 34 sConfig.gesture_detector_config.showpress_timeout = base::TimeDelta(); |
35 sConfig.gesture_detector_config.longpress_timeout = kOneMicrosecond; | 35 sConfig.gesture_detector_config.longpress_timeout = kOneMicrosecond; |
36 | 36 |
37 // A valid doubletap timeout should always be non-zero. The value is used not | 37 // A valid doubletap timeout should always be non-zero. The value is used not |
38 // only to trigger the timeout that confirms the tap event, but also to gate | 38 // only to trigger the timeout that confirms the tap event, but also to gate |
39 // whether the second tap is in fact a double-tap (using a strict inequality | 39 // whether the second tap is in fact a double-tap (using a strict inequality |
40 // between times for the first up and the second down events). We use 4 | 40 // between times for the first up and the second down events). We use 4 |
41 // microseconds simply to allow several intermediate events to occur before | 41 // microseconds simply to allow several intermediate events to occur before |
42 // the second tap at microsecond intervals. | 42 // the second tap at microsecond intervals. |
43 sConfig.gesture_detector_config.double_tap_timeout = kOneMicrosecond * 4; | 43 sConfig.gesture_detector_config.double_tap_timeout = kOneMicrosecond * 4; |
44 sConfig.send_aura_specific_gestures = true; | |
jdduke (slow)
2014/04/03 20:17:16
I'd prefer if this default'ed to false, and we had
tdresser
2014/04/03 21:14:41
Done.
| |
44 return sConfig; | 45 return sConfig; |
45 } | 46 } |
46 | 47 |
47 } // namespace | 48 } // namespace |
48 | 49 |
49 class GestureProviderTest : public testing::Test, public GestureProviderClient { | 50 class GestureProviderTest : public testing::Test, public GestureProviderClient { |
50 public: | 51 public: |
51 GestureProviderTest() {} | 52 GestureProviderTest() {} |
52 virtual ~GestureProviderTest() {} | 53 virtual ~GestureProviderTest() {} |
53 | 54 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 155 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
155 | 156 |
156 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 157 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
157 | 158 |
158 event = ObtainMotionEvent(event_time + kOneSecond, | 159 event = ObtainMotionEvent(event_time + kOneSecond, |
159 MotionEvent::ACTION_MOVE, | 160 MotionEvent::ACTION_MOVE, |
160 scroll_to_x, | 161 scroll_to_x, |
161 scroll_to_y); | 162 scroll_to_y); |
162 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 163 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
163 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); | 164 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); |
164 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); | 165 ASSERT_EQ(5U, GetReceivedGestureCount()) |
165 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); | 166 << "Only GestureBegin, TapDown, TapCancel, ScrollBegin and ScrollBy " |
166 ASSERT_EQ(4U, GetReceivedGestureCount()) << "Only TapDown, TapCancel, " | 167 << "should have been sent."; |
167 "ScrollBegin and ScrollBy " | 168 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); |
168 "should have been sent"; | 169 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(1).type); |
169 | 170 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(2).type); |
170 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(1).type); | 171 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(3).type); |
171 EXPECT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type); | 172 EXPECT_EQ(event_time + kOneSecond, GetReceivedGesture(3).time) |
172 EXPECT_EQ(event_time + kOneSecond, GetReceivedGesture(2).time) | |
173 << "ScrollBegin should have the time of the ACTION_MOVE"; | 173 << "ScrollBegin should have the time of the ACTION_MOVE"; |
174 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetReceivedGesture(4).type); | |
174 | 175 |
175 event = ObtainMotionEvent( | 176 event = ObtainMotionEvent( |
176 event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y); | 177 event_time + kOneSecond, end_action_type, scroll_to_x, scroll_to_y); |
177 gesture_provider_->OnTouchEvent(event); | 178 gesture_provider_->OnTouchEvent(event); |
178 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); | 179 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); |
179 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); | 180 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_END)); |
180 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 181 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
181 } | 182 } |
182 | 183 |
183 static void RunTasksAndWait(base::TimeDelta delay) { | 184 static void RunTasksAndWait(base::TimeDelta delay) { |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
291 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 292 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
292 | 293 |
293 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 294 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
294 | 295 |
295 event = ObtainMotionEvent(event_time + delta_time, | 296 event = ObtainMotionEvent(event_time + delta_time, |
296 MotionEvent::ACTION_MOVE, | 297 MotionEvent::ACTION_MOVE, |
297 kFakeCoordX * 5, | 298 kFakeCoordX * 5, |
298 kFakeCoordY * 5); | 299 kFakeCoordY * 5); |
299 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 300 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
300 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); | 301 EXPECT_TRUE(gesture_provider_->IsScrollInProgress()); |
301 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); | 302 ASSERT_EQ(5U, GetReceivedGestureCount()); |
302 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); | 303 ASSERT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); |
303 ASSERT_EQ(4U, GetReceivedGestureCount()); | 304 ASSERT_EQ(ET_GESTURE_TAP_DOWN, GetReceivedGesture(1).type); |
304 ASSERT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(2).type); | 305 ASSERT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(2).type); |
306 ASSERT_EQ(ET_GESTURE_SCROLL_BEGIN, GetReceivedGesture(3).type); | |
307 ASSERT_EQ(ET_GESTURE_SCROLL_UPDATE, GetReceivedGesture(4).type); | |
305 | 308 |
306 // We don't want to take a dependency here on exactly how hints are calculated | 309 // We don't want to take a dependency here on exactly how hints are calculated |
307 // for a fling (eg. may depend on velocity), so just validate the direction. | 310 // for a fling (eg. may depend on velocity), so just validate the direction. |
308 int hint_x = GetReceivedGesture(2).details.scroll_x_hint(); | 311 int hint_x = GetReceivedGesture(3).details.scroll_x_hint(); |
309 int hint_y = GetReceivedGesture(2).details.scroll_y_hint(); | 312 int hint_y = GetReceivedGesture(3).details.scroll_y_hint(); |
310 EXPECT_TRUE(hint_x > 0 && hint_y > 0 && hint_x > hint_y) | 313 EXPECT_TRUE(hint_x > 0 && hint_y > 0 && hint_x > hint_y) |
311 << "ScrollBegin hint should be in positive X axis"; | 314 << "ScrollBegin hint should be in positive X axis"; |
312 | 315 |
313 event = ObtainMotionEvent(event_time + delta_time * 2, | 316 event = ObtainMotionEvent(event_time + delta_time * 2, |
314 MotionEvent::ACTION_UP, | 317 MotionEvent::ACTION_UP, |
315 kFakeCoordX * 10, | 318 kFakeCoordX * 10, |
316 kFakeCoordY * 10); | 319 kFakeCoordY * 10); |
317 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 320 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
318 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); | 321 EXPECT_FALSE(gesture_provider_->IsScrollInProgress()); |
319 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); | 322 EXPECT_EQ(ET_SCROLL_FLING_START, GetMostRecentGestureEventType()); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
492 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); | 495 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); |
493 const size_t gesture_count = GetReceivedGestureCount(); | 496 const size_t gesture_count = GetReceivedGestureCount(); |
494 | 497 |
495 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3, | 498 event = ObtainMotionEvent(down_time_2 + kOneMicrosecond * 3, |
496 MotionEvent::ACTION_POINTER_UP, | 499 MotionEvent::ACTION_POINTER_UP, |
497 kFakeCoordX, | 500 kFakeCoordX, |
498 kFakeCoordY - 30, | 501 kFakeCoordY - 30, |
499 kFakeCoordX + 50, | 502 kFakeCoordX + 50, |
500 kFakeCoordY + 50); | 503 kFakeCoordY + 50); |
501 gesture_provider_->OnTouchEvent(event); | 504 gesture_provider_->OnTouchEvent(event); |
502 EXPECT_EQ(gesture_count, GetReceivedGestureCount()); | 505 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); |
506 EXPECT_EQ(gesture_count + 1, GetReceivedGestureCount()); | |
503 } | 507 } |
504 | 508 |
505 // Generate a scroll gesture and verify that the resulting scroll motion event | 509 // Generate a scroll gesture and verify that the resulting scroll motion event |
506 // has both absolute and relative position information. | 510 // has both absolute and relative position information. |
507 TEST_F(GestureProviderTest, ScrollUpdateValues) { | 511 TEST_F(GestureProviderTest, ScrollUpdateValues) { |
508 const int delta_x = 16; | 512 const int delta_x = 16; |
509 const int delta_y = 84; | 513 const int delta_y = 84; |
510 | 514 |
511 const base::TimeTicks event_time = TimeTicks::Now(); | 515 const base::TimeTicks event_time = TimeTicks::Now(); |
512 | 516 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
767 EXPECT_EQ(scroll_delta, gesture.details.scroll_y()); | 771 EXPECT_EQ(scroll_delta, gesture.details.scroll_y()); |
768 } | 772 } |
769 | 773 |
770 TEST_F(GestureProviderTest, NoDoubleTapWhenExplicitlyDisabled) { | 774 TEST_F(GestureProviderTest, NoDoubleTapWhenExplicitlyDisabled) { |
771 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); | 775 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); |
772 | 776 |
773 base::TimeTicks event_time = base::TimeTicks::Now(); | 777 base::TimeTicks event_time = base::TimeTicks::Now(); |
774 MockMotionEvent event = ObtainMotionEvent( | 778 MockMotionEvent event = ObtainMotionEvent( |
775 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); | 779 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); |
776 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 780 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
777 EXPECT_EQ(1U, GetReceivedGestureCount()); | 781 EXPECT_EQ(2U, GetReceivedGestureCount()); |
778 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 782 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
783 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); | |
779 | 784 |
780 event = ObtainMotionEvent(event_time + kOneMicrosecond, | 785 event = ObtainMotionEvent(event_time + kOneMicrosecond, |
781 MotionEvent::ACTION_UP, | 786 MotionEvent::ACTION_UP, |
782 kFakeCoordX, | 787 kFakeCoordX, |
783 kFakeCoordY); | 788 kFakeCoordY); |
784 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 789 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
785 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); | 790 EXPECT_EQ(ET_GESTURE_TAP, GetMostRecentGestureEventType()); |
786 | 791 |
787 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, | 792 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, |
788 MotionEvent::ACTION_DOWN, | 793 MotionEvent::ACTION_DOWN, |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
991 | 996 |
992 gesture_provider_->SetMultiTouchSupportEnabled(true); | 997 gesture_provider_->SetMultiTouchSupportEnabled(true); |
993 | 998 |
994 int secondary_coord_x = kFakeCoordX + 20 * scaled_touch_slop; | 999 int secondary_coord_x = kFakeCoordX + 20 * scaled_touch_slop; |
995 int secondary_coord_y = kFakeCoordY + 20 * scaled_touch_slop; | 1000 int secondary_coord_y = kFakeCoordY + 20 * scaled_touch_slop; |
996 | 1001 |
997 MockMotionEvent event = | 1002 MockMotionEvent event = |
998 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); | 1003 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); |
999 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1004 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1000 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1005 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
1006 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(0).type); | |
1001 | 1007 |
1002 event = ObtainMotionEvent(event_time, | 1008 event = ObtainMotionEvent(event_time, |
1003 MotionEvent::ACTION_POINTER_DOWN, | 1009 MotionEvent::ACTION_POINTER_DOWN, |
1004 kFakeCoordX, | 1010 kFakeCoordX, |
1005 kFakeCoordY, | 1011 kFakeCoordY, |
1006 secondary_coord_x, | 1012 secondary_coord_x, |
1007 secondary_coord_y); | 1013 secondary_coord_y); |
1008 gesture_provider_->OnTouchEvent(event); | 1014 gesture_provider_->OnTouchEvent(event); |
1009 EXPECT_EQ(1U, GetReceivedGestureCount()); | 1015 EXPECT_EQ(3U, GetReceivedGestureCount()); |
1016 EXPECT_EQ(ET_GESTURE_BEGIN, GetReceivedGesture(2).type); | |
1010 | 1017 |
1011 secondary_coord_x += 5 * scaled_touch_slop; | 1018 secondary_coord_x += 5 * scaled_touch_slop; |
1012 secondary_coord_y += 5 * scaled_touch_slop; | 1019 secondary_coord_y += 5 * scaled_touch_slop; |
1013 | 1020 |
1014 event = ObtainMotionEvent(event_time, | 1021 event = ObtainMotionEvent(event_time, |
1015 MotionEvent::ACTION_MOVE, | 1022 MotionEvent::ACTION_MOVE, |
1016 kFakeCoordX, | 1023 kFakeCoordX, |
1017 kFakeCoordY, | 1024 kFakeCoordY, |
1018 secondary_coord_x, | 1025 secondary_coord_x, |
1019 secondary_coord_y); | 1026 secondary_coord_y); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1088 MotionEvent::ACTION_UP); | 1095 MotionEvent::ACTION_UP); |
1089 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); | 1096 EXPECT_FALSE(gesture_provider_->OnTouchEvent(event)); |
1090 | 1097 |
1091 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3, | 1098 event = ObtainMotionEvent(event_time + kOneMicrosecond * 3, |
1092 MotionEvent::ACTION_DOWN); | 1099 MotionEvent::ACTION_DOWN); |
1093 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); | 1100 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); |
1094 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); | 1101 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); |
1095 } | 1102 } |
1096 | 1103 |
1097 } // namespace ui | 1104 } // namespace ui |
OLD | NEW |