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

Side by Side Diff: ui/events/gesture_detection/gesture_provider_unittest.cc

Issue 220063002: [Android] Use DIP coordinates with MotionEventAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 6 years, 8 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 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 124
125 const GestureEventData* GetActiveScrollBeginEvent() const { 125 const GestureEventData* GetActiveScrollBeginEvent() const {
126 return active_scroll_begin_event_ ? active_scroll_begin_event_.get() : NULL; 126 return active_scroll_begin_event_ ? active_scroll_begin_event_.get() : NULL;
127 } 127 }
128 128
129 const GestureProvider::Config& GetDefaultConfig() const { 129 const GestureProvider::Config& GetDefaultConfig() const {
130 static GestureProvider::Config sConfig = CreateDefaultConfig(); 130 static GestureProvider::Config sConfig = CreateDefaultConfig();
131 return sConfig; 131 return sConfig;
132 } 132 }
133 133
134 int GetTouchSlop() const { 134 float GetTouchSlop() const {
135 return GetDefaultConfig().gesture_detector_config.scaled_touch_slop; 135 return GetDefaultConfig().gesture_detector_config.touch_slop;
136 } 136 }
137 137
138 base::TimeDelta GetLongPressTimeout() const { 138 base::TimeDelta GetLongPressTimeout() const {
139 return GetDefaultConfig().gesture_detector_config.longpress_timeout; 139 return GetDefaultConfig().gesture_detector_config.longpress_timeout;
140 } 140 }
141 141
142 base::TimeDelta GetShowPressTimeout() const { 142 base::TimeDelta GetShowPressTimeout() const {
143 return GetDefaultConfig().gesture_detector_config.showpress_timeout; 143 return GetDefaultConfig().gesture_detector_config.showpress_timeout;
144 } 144 }
145 145
146 void SetBeginEndTypesEnabled(bool enabled) { 146 void SetBeginEndTypesEnabled(bool enabled) {
147 GestureProvider::Config config = GetDefaultConfig(); 147 GestureProvider::Config config = GetDefaultConfig();
148 config.gesture_begin_end_types_enabled = true; 148 config.gesture_begin_end_types_enabled = true;
149 gesture_provider_.reset(new GestureProvider(config, this)); 149 gesture_provider_.reset(new GestureProvider(config, this));
150 gesture_provider_->SetMultiTouchSupportEnabled(false); 150 gesture_provider_->SetMultiTouchSupportEnabled(false);
151 } 151 }
152 152
153 protected: 153 protected:
154 void CheckScrollEventSequenceForEndActionType( 154 void CheckScrollEventSequenceForEndActionType(
155 MotionEvent::Action end_action_type) { 155 MotionEvent::Action end_action_type) {
156 base::TimeTicks event_time = base::TimeTicks::Now(); 156 base::TimeTicks event_time = base::TimeTicks::Now();
157 const int scroll_to_x = kFakeCoordX + 100; 157 const float scroll_to_x = kFakeCoordX + 100;
158 const int scroll_to_y = kFakeCoordY + 100; 158 const float scroll_to_y = kFakeCoordY + 100;
159 int motion_event_id = 0; 159 int motion_event_id = 0;
160 160
161 MockMotionEvent event = 161 MockMotionEvent event =
162 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 162 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
163 event.SetId(++motion_event_id); 163 event.SetId(++motion_event_id);
164 164
165 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 165 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
166 166
167 event = ObtainMotionEvent(event_time + kOneSecond, 167 event = ObtainMotionEvent(event_time + kOneSecond,
168 MotionEvent::ACTION_MOVE, 168 MotionEvent::ACTION_MOVE,
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 kFakeCoordX, 500 kFakeCoordX,
501 kFakeCoordY - 200); 501 kFakeCoordY - 200);
502 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 502 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
503 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END)); 503 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_END));
504 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 504 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
505 } 505 }
506 506
507 // Generate a scroll gesture and verify that the resulting scroll motion event 507 // Generate a scroll gesture and verify that the resulting scroll motion event
508 // has both absolute and relative position information. 508 // has both absolute and relative position information.
509 TEST_F(GestureProviderTest, ScrollUpdateValues) { 509 TEST_F(GestureProviderTest, ScrollUpdateValues) {
510 const int delta_x = 16; 510 const float delta_x = 16;
511 const int delta_y = 84; 511 const float delta_y = 84;
512 512
513 const base::TimeTicks event_time = TimeTicks::Now(); 513 const base::TimeTicks event_time = TimeTicks::Now();
514 514
515 MockMotionEvent event = 515 MockMotionEvent event =
516 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 516 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
517 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 517 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
518 518
519 // Move twice so that we get two ET_GESTURE_SCROLL_UPDATE events and can 519 // Move twice so that we get two ET_GESTURE_SCROLL_UPDATE events and can
520 // compare the relative and absolute coordinates. 520 // compare the relative and absolute coordinates.
521 event = ObtainMotionEvent(event_time + kOneMicrosecond, 521 event = ObtainMotionEvent(event_time + kOneMicrosecond,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 EXPECT_LE(gesture.details.scroll_y(), ((int)delta_y) + 1); 590 EXPECT_LE(gesture.details.scroll_y(), ((int)delta_y) + 1);
591 591
592 // And that there has been no horizontal motion at all. 592 // And that there has been no horizontal motion at all.
593 EXPECT_EQ(0, gesture.details.scroll_x()); 593 EXPECT_EQ(0, gesture.details.scroll_x());
594 } 594 }
595 } 595 }
596 596
597 // Generate a scroll gesture and verify that the resulting scroll begin event 597 // Generate a scroll gesture and verify that the resulting scroll begin event
598 // has the expected hint values. 598 // has the expected hint values.
599 TEST_F(GestureProviderTest, ScrollBeginValues) { 599 TEST_F(GestureProviderTest, ScrollBeginValues) {
600 const int delta_x = 13; 600 const float delta_x = 13;
601 const int delta_y = 89; 601 const float delta_y = 89;
602 602
603 const base::TimeTicks event_time = TimeTicks::Now(); 603 const base::TimeTicks event_time = TimeTicks::Now();
604 604
605 MockMotionEvent event = 605 MockMotionEvent event =
606 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 606 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
607 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 607 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
608 608
609 // Move twice such that the first event isn't sufficient to start 609 // Move twice such that the first event isn't sufficient to start
610 // scrolling on it's own. 610 // scrolling on it's own.
611 event = ObtainMotionEvent(event_time + kOneMicrosecond, 611 event = ObtainMotionEvent(event_time + kOneMicrosecond,
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 event.SetId(++motion_event_id); 747 event.SetId(++motion_event_id);
748 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 748 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
749 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType()); 749 EXPECT_EQ(ET_GESTURE_SCROLL_END, GetMostRecentGestureEventType());
750 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 750 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
751 EXPECT_FALSE(gesture_provider_->IsDoubleTapInProgress()); 751 EXPECT_FALSE(gesture_provider_->IsDoubleTapInProgress());
752 } 752 }
753 753
754 // Verify that the touch slop region is removed from the first scroll delta to 754 // Verify that the touch slop region is removed from the first scroll delta to
755 // avoid a jump when starting to scroll. 755 // avoid a jump when starting to scroll.
756 TEST_F(GestureProviderTest, TouchSlopRemovedFromScroll) { 756 TEST_F(GestureProviderTest, TouchSlopRemovedFromScroll) {
757 const int scaled_touch_slop = GetTouchSlop(); 757 const float touch_slop = GetTouchSlop();
758 const int scroll_delta = 5; 758 const float scroll_delta = 5;
759 759
760 base::TimeTicks event_time = base::TimeTicks::Now(); 760 base::TimeTicks event_time = base::TimeTicks::Now();
761 761
762 MockMotionEvent event = 762 MockMotionEvent event =
763 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 763 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
764 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 764 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
765 765
766 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2, 766 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
767 MotionEvent::ACTION_MOVE, 767 MotionEvent::ACTION_MOVE,
768 kFakeCoordX, 768 kFakeCoordX,
769 kFakeCoordY + scaled_touch_slop + scroll_delta); 769 kFakeCoordY + touch_slop + scroll_delta);
770 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 770 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
771 771
772 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType()); 772 EXPECT_EQ(ET_GESTURE_SCROLL_UPDATE, GetMostRecentGestureEventType());
773 GestureEventData gesture = GetMostRecentGestureEvent(); 773 GestureEventData gesture = GetMostRecentGestureEvent();
774 EXPECT_EQ(0, gesture.details.scroll_x()); 774 EXPECT_EQ(0, gesture.details.scroll_x());
775 EXPECT_EQ(scroll_delta, gesture.details.scroll_y()); 775 EXPECT_EQ(scroll_delta, gesture.details.scroll_y());
776 } 776 }
777 777
778 // Verify that movement with the touch slop region does not generate a scroll,
tdresser 2014/04/09 14:00:01 with -> within
jdduke (slow) 2014/04/10 22:04:53 Done.
779 // and that the slop region is correct even when using fractional coordinates.
780 TEST_F(GestureProviderTest, NoScrollWithinTouchSlop) {
781 const float touch_slop = GetTouchSlop();
782 const float scale_factor = 2.5f;
783 const int touch_slop_pixels = static_cast<int>(scale_factor * touch_slop);
784
785 base::TimeTicks event_time = base::TimeTicks::Now();
786
787 MockMotionEvent event =
788 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
789 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
790
791 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
792 MotionEvent::ACTION_MOVE,
793 kFakeCoordX + touch_slop_pixels / scale_factor,
794 kFakeCoordY);
795 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
796 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
797
798 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
799 MotionEvent::ACTION_MOVE,
800 kFakeCoordX,
801 kFakeCoordY + touch_slop_pixels / scale_factor);
802 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
803 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
804
805 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
806 MotionEvent::ACTION_MOVE,
807 kFakeCoordX - touch_slop_pixels / scale_factor,
808 kFakeCoordY);
809 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
810 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
811
812 event = ObtainMotionEvent(event_time + kOneMicrosecond * 2,
813 MotionEvent::ACTION_MOVE,
814 kFakeCoordX,
815 kFakeCoordY - touch_slop_pixels / scale_factor);
816 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
817 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
818
819 event =
820 ObtainMotionEvent(event_time + kOneMicrosecond * 2,
821 MotionEvent::ACTION_MOVE,
822 kFakeCoordX,
823 kFakeCoordY + (touch_slop_pixels + 1.f) / scale_factor);
824 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
825 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
826 }
827
778 TEST_F(GestureProviderTest, NoDoubleTapWhenExplicitlyDisabled) { 828 TEST_F(GestureProviderTest, NoDoubleTapWhenExplicitlyDisabled) {
779 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false); 829 gesture_provider_->SetDoubleTapSupportForPlatformEnabled(false);
780 830
781 base::TimeTicks event_time = base::TimeTicks::Now(); 831 base::TimeTicks event_time = base::TimeTicks::Now();
782 MockMotionEvent event = ObtainMotionEvent( 832 MockMotionEvent event = ObtainMotionEvent(
783 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY); 833 event_time, MotionEvent::ACTION_DOWN, kFakeCoordX, kFakeCoordY);
784 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 834 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
785 EXPECT_EQ(1U, GetReceivedGestureCount()); 835 EXPECT_EQ(1U, GetReceivedGestureCount());
786 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 836 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
787 837
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 MotionEvent::ACTION_UP, 1038 MotionEvent::ACTION_UP,
989 kFakeCoordX, 1039 kFakeCoordX,
990 kFakeCoordY + 200); 1040 kFakeCoordY + 200);
991 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1041 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
992 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_PINCH_END)); 1042 EXPECT_FALSE(HasReceivedGesture(ET_GESTURE_PINCH_END));
993 } 1043 }
994 1044
995 // Verify that pinch zoom sends the proper event sequence. 1045 // Verify that pinch zoom sends the proper event sequence.
996 TEST_F(GestureProviderTest, PinchZoom) { 1046 TEST_F(GestureProviderTest, PinchZoom) {
997 base::TimeTicks event_time = base::TimeTicks::Now(); 1047 base::TimeTicks event_time = base::TimeTicks::Now();
998 const int scaled_touch_slop = GetTouchSlop(); 1048 const float touch_slop = GetTouchSlop();
999 int motion_event_id = 0; 1049 int motion_event_id = 0;
1000 1050
1001 gesture_provider_->SetMultiTouchSupportEnabled(true); 1051 gesture_provider_->SetMultiTouchSupportEnabled(true);
1002 1052
1003 int secondary_coord_x = kFakeCoordX + 20 * scaled_touch_slop; 1053 int secondary_coord_x = kFakeCoordX + 20 * touch_slop;
1004 int secondary_coord_y = kFakeCoordY + 20 * scaled_touch_slop; 1054 int secondary_coord_y = kFakeCoordY + 20 * touch_slop;
1005 1055
1006 MockMotionEvent event = 1056 MockMotionEvent event =
1007 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN); 1057 ObtainMotionEvent(event_time, MotionEvent::ACTION_DOWN);
1008 event.SetId(++motion_event_id); 1058 event.SetId(++motion_event_id);
1009 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1059 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1010 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType()); 1060 EXPECT_EQ(ET_GESTURE_TAP_DOWN, GetMostRecentGestureEventType());
1011 1061
1012 event = ObtainMotionEvent(event_time, 1062 event = ObtainMotionEvent(event_time,
1013 MotionEvent::ACTION_POINTER_DOWN, 1063 MotionEvent::ACTION_POINTER_DOWN,
1014 kFakeCoordX, 1064 kFakeCoordX,
1015 kFakeCoordY, 1065 kFakeCoordY,
1016 secondary_coord_x, 1066 secondary_coord_x,
1017 secondary_coord_y); 1067 secondary_coord_y);
1018 event.SetId(++motion_event_id); 1068 event.SetId(++motion_event_id);
1019 1069
1020 gesture_provider_->OnTouchEvent(event); 1070 gesture_provider_->OnTouchEvent(event);
1021 EXPECT_EQ(1U, GetReceivedGestureCount()); 1071 EXPECT_EQ(1U, GetReceivedGestureCount());
1022 1072
1023 secondary_coord_x += 5 * scaled_touch_slop; 1073 secondary_coord_x += 5 * touch_slop;
1024 secondary_coord_y += 5 * scaled_touch_slop; 1074 secondary_coord_y += 5 * touch_slop;
1025 event = ObtainMotionEvent(event_time, 1075 event = ObtainMotionEvent(event_time,
1026 MotionEvent::ACTION_MOVE, 1076 MotionEvent::ACTION_MOVE,
1027 kFakeCoordX, 1077 kFakeCoordX,
1028 kFakeCoordY, 1078 kFakeCoordY,
1029 secondary_coord_x, 1079 secondary_coord_x,
1030 secondary_coord_y); 1080 secondary_coord_y);
1031 event.SetId(++motion_event_id); 1081 event.SetId(++motion_event_id);
1032 1082
1033 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1083 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1034 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 1084 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
1035 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN)); 1085 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_PINCH_BEGIN));
1036 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN)); 1086 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_BEGIN));
1037 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE)); 1087 EXPECT_TRUE(HasReceivedGesture(ET_GESTURE_SCROLL_UPDATE));
1038 1088
1039 secondary_coord_x += 2 * scaled_touch_slop; 1089 secondary_coord_x += 2 * touch_slop;
1040 secondary_coord_y += 2 * scaled_touch_slop; 1090 secondary_coord_y += 2 * touch_slop;
1041 event = ObtainMotionEvent(event_time, 1091 event = ObtainMotionEvent(event_time,
1042 MotionEvent::ACTION_MOVE, 1092 MotionEvent::ACTION_MOVE,
1043 kFakeCoordX, 1093 kFakeCoordX,
1044 kFakeCoordY, 1094 kFakeCoordY,
1045 secondary_coord_x, 1095 secondary_coord_x,
1046 secondary_coord_y); 1096 secondary_coord_y);
1047 event.SetId(++motion_event_id); 1097 event.SetId(++motion_event_id);
1048 1098
1049 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1099 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1050 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id); 1100 EXPECT_EQ(motion_event_id, GetMostRecentGestureEvent().motion_event_id);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL); 1236 event = ObtainMotionEvent(event_time, MotionEvent::ACTION_CANCEL);
1187 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event)); 1237 EXPECT_TRUE(gesture_provider_->OnTouchEvent(event));
1188 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(12).type); 1238 EXPECT_EQ(ET_GESTURE_TAP_CANCEL, GetReceivedGesture(12).type);
1189 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType()); 1239 EXPECT_EQ(ET_GESTURE_END, GetMostRecentGestureEventType());
1190 EXPECT_EQ(14U, GetReceivedGestureCount()); 1240 EXPECT_EQ(14U, GetReceivedGestureCount());
1191 1241
1192 1242
1193 } 1243 }
1194 1244
1195 } // namespace ui 1245 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698