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

Side by Side Diff: content/browser/renderer_host/input/motion_event_android_unittest.cc

Issue 502993004: Remove abstract Clone and Cancel methods from MotionEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nasty bug fix Created 6 years, 1 month 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 <android/input.h> 5 #include <android/input.h>
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/float_util.h" 8 #include "base/float_util.h"
9 #include "content/browser/renderer_host/input/motion_event_android.h" 9 #include "content/browser/renderer_host/input/motion_event_android.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/events/event_constants.h" 11 #include "ui/events/event_constants.h"
12 #include "ui/events/test/motion_event_test_utils.h"
12 13
13 using ui::MotionEvent; 14 using ui::MotionEvent;
14 15
15 namespace content { 16 namespace content {
16 namespace { 17 namespace {
17 const float kPixToDip = 0.5f; 18 const float kPixToDip = 0.5f;
18 19
19 int kAndroidActionDown = AMOTION_EVENT_ACTION_DOWN; 20 int kAndroidActionDown = AMOTION_EVENT_ACTION_DOWN;
20 21
21 int kAndroidAltKeyDown = AMETA_ALT_ON; 22 int kAndroidAltKeyDown = AMETA_ALT_ON;
22 23
23 // Corresponds to TOOL_TYPE_FINGER, see 24 // Corresponds to TOOL_TYPE_FINGER, see
24 // developer.android.com/reference/android/view/MotionEvent.html 25 // developer.android.com/reference/android/view/MotionEvent.html
25 // #TOOL_TYPE_FINGER. 26 // #TOOL_TYPE_FINGER.
26 int kAndroidToolTypeFinger = 1; 27 int kAndroidToolTypeFinger = 1;
27 28
28 // Corresponds to BUTTON_PRIMARY, see 29 // Corresponds to BUTTON_PRIMARY, see
29 // developer.android.com/reference/android/view/MotionEvent.html#BUTTON_PRIMARY. 30 // developer.android.com/reference/android/view/MotionEvent.html#BUTTON_PRIMARY.
30 int kAndroidButtonPrimary = 1; 31 int kAndroidButtonPrimary = 1;
31 32
32 } // namespace 33 } // namespace
33 34
35 // Note that these tests avoid creating a Java instance of the MotionEvent, as
36 // we're primarily testing caching behavior, and the code necessary to
37 // construct a Java-backed MotionEvent itself adds unnecessary complexity.
34 TEST(MotionEventAndroidTest, Constructor) { 38 TEST(MotionEventAndroidTest, Constructor) {
35 int event_time_ms = 5; 39 int event_time_ms = 5;
36 base::TimeTicks event_time = 40 base::TimeTicks event_time =
37 base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms); 41 base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms);
38 float x0 = 13.7f; 42 MotionEventAndroid::Pointer p0(
39 float y0 = -7.13f; 43 1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
40 float x1 = -13.7f; 44 MotionEventAndroid::Pointer p1(
41 float y1 = 7.13f; 45 2, -13.7f, 7.13f, 3.5f, 12.1f, -0.1f, kAndroidToolTypeFinger);
42 float raw_offset = 10.1f; 46 float raw_offset = -3.f;
43 float touch_major0 = 5.3f;
44 float touch_major1 = 3.5f;
45 float touch_minor0 = 1.2f;
46 float touch_minor1 = 2.1f;
47 float orientation0 = 0.1f;
48 float orientation1 = -0.1f;
49 int p0 = 1;
50 int p1 = 2;
51 int pointer_count = 2; 47 int pointer_count = 2;
52 int history_size = 0; 48 int history_size = 0;
53 int action_index = -1; 49 int action_index = -1;
54 base::android::ScopedJavaLocalRef<jobject> base_event_obj =
55 MotionEventAndroid::Obtain(
56 event_time, event_time, MotionEvent::ACTION_DOWN, x0, y0);
57 ASSERT_TRUE(base_event_obj.obj());
58
59 MotionEventAndroid event(kPixToDip, 50 MotionEventAndroid event(kPixToDip,
60 base::android::AttachCurrentThread(), 51 base::android::AttachCurrentThread(),
61 base_event_obj.obj(), 52 nullptr,
62 event_time_ms, 53 event_time_ms,
63 kAndroidActionDown, 54 kAndroidActionDown,
64 pointer_count, 55 pointer_count,
65 history_size, 56 history_size,
66 action_index, 57 action_index,
67 x0, 58 kAndroidButtonPrimary,
68 y0, 59 kAndroidAltKeyDown,
69 x1, 60 raw_offset,
70 y1, 61 -raw_offset,
71 p0, 62 p0,
72 p1, 63 p1);
73 touch_major0,
74 touch_major1,
75 touch_minor0,
76 touch_minor1,
77 orientation0,
78 orientation1,
79 x0 + raw_offset,
80 y0 - raw_offset,
81 kAndroidToolTypeFinger,
82 kAndroidToolTypeFinger,
83 kAndroidButtonPrimary,
84 kAndroidAltKeyDown);
85 64
86 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); 65 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
87 EXPECT_EQ(event_time, event.GetEventTime()); 66 EXPECT_EQ(event_time, event.GetEventTime());
88 EXPECT_EQ(x0 * kPixToDip, event.GetX(0)); 67 EXPECT_EQ(p0.pos_x_pixels * kPixToDip, event.GetX(0));
89 EXPECT_EQ(y0 * kPixToDip, event.GetY(0)); 68 EXPECT_EQ(p0.pos_y_pixels * kPixToDip, event.GetY(0));
90 EXPECT_EQ(x1 * kPixToDip, event.GetX(1)); 69 EXPECT_EQ(p1.pos_x_pixels * kPixToDip, event.GetX(1));
91 EXPECT_EQ(y1 * kPixToDip, event.GetY(1)); 70 EXPECT_EQ(p1.pos_y_pixels * kPixToDip, event.GetY(1));
92 EXPECT_FLOAT_EQ((x0 + raw_offset) * kPixToDip, event.GetRawX(0)); 71 EXPECT_FLOAT_EQ((p0.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(0));
93 EXPECT_FLOAT_EQ((y0 - raw_offset) * kPixToDip, event.GetRawY(0)); 72 EXPECT_FLOAT_EQ((p0.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(0));
94 EXPECT_FLOAT_EQ((x1 + raw_offset) * kPixToDip, event.GetRawX(1)); 73 EXPECT_FLOAT_EQ((p1.pos_x_pixels + raw_offset) * kPixToDip, event.GetRawX(1));
95 EXPECT_FLOAT_EQ((y1 - raw_offset) * kPixToDip, event.GetRawY(1)); 74 EXPECT_FLOAT_EQ((p1.pos_y_pixels - raw_offset) * kPixToDip, event.GetRawY(1));
96 EXPECT_EQ(touch_major0 * kPixToDip, event.GetTouchMajor(0)); 75 EXPECT_EQ(p0.touch_major_pixels * kPixToDip, event.GetTouchMajor(0));
97 EXPECT_EQ(touch_major1 * kPixToDip, event.GetTouchMajor(1)); 76 EXPECT_EQ(p1.touch_major_pixels * kPixToDip, event.GetTouchMajor(1));
98 EXPECT_EQ(touch_minor0 * kPixToDip, event.GetTouchMinor(0)); 77 EXPECT_EQ(p0.touch_minor_pixels * kPixToDip, event.GetTouchMinor(0));
99 EXPECT_EQ(touch_minor1 * kPixToDip, event.GetTouchMinor(1)); 78 EXPECT_EQ(p1.touch_minor_pixels * kPixToDip, event.GetTouchMinor(1));
100 EXPECT_EQ(orientation0, event.GetOrientation(0)); 79 EXPECT_EQ(p0.orientation_rad, event.GetOrientation(0));
101 EXPECT_EQ(orientation1, event.GetOrientation(1)); 80 EXPECT_EQ(p1.orientation_rad, event.GetOrientation(1));
102 EXPECT_EQ(p0, event.GetPointerId(0)); 81 EXPECT_EQ(p0.id, event.GetPointerId(0));
103 EXPECT_EQ(p1, event.GetPointerId(1)); 82 EXPECT_EQ(p1.id, event.GetPointerId(1));
104 EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0)); 83 EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(0));
105 EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(1)); 84 EXPECT_EQ(MotionEvent::TOOL_TYPE_FINGER, event.GetToolType(1));
106 EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState()); 85 EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState());
107 EXPECT_EQ(ui::EF_ALT_DOWN, event.GetFlags()); 86 EXPECT_EQ(ui::EF_ALT_DOWN, event.GetFlags());
108 EXPECT_EQ(static_cast<size_t>(pointer_count), event.GetPointerCount()); 87 EXPECT_EQ(static_cast<size_t>(pointer_count), event.GetPointerCount());
109 EXPECT_EQ(static_cast<size_t>(history_size), event.GetHistorySize()); 88 EXPECT_EQ(static_cast<size_t>(history_size), event.GetHistorySize());
110 EXPECT_EQ(action_index, event.GetActionIndex()); 89 EXPECT_EQ(action_index, event.GetActionIndex());
111 } 90 }
112 91
113 TEST(MotionEventAndroidTest, Clone) { 92 TEST(MotionEventAndroidTest, Clone) {
114 int event_time_ms = 5; 93 const int pointer_count = 1;
115 base::TimeTicks event_time = 94 MotionEventAndroid::Pointer p0(
116 base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms); 95 1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
117 float x = 13.7f; 96 MotionEventAndroid::Pointer p1(0, 0, 0, 0, 0, 0, 0);
118 float y = -7.13f;
119 float touch_major = 5.3f;
120 float touch_minor = 3.5f;
121 float orientation = 0.2f;
122 int pointer_count = 1;
123 int pointer_id = 1;
124 base::android::ScopedJavaLocalRef<jobject> event_obj =
125 MotionEventAndroid::Obtain(
126 event_time, event_time, MotionEvent::ACTION_DOWN, x, y);
127 ASSERT_TRUE(event_obj.obj());
128
129 MotionEventAndroid event(kPixToDip, 97 MotionEventAndroid event(kPixToDip,
130 base::android::AttachCurrentThread(), 98 base::android::AttachCurrentThread(),
131 event_obj.obj(), 99 nullptr,
100 0,
101 kAndroidActionDown,
102 pointer_count,
103 0,
104 0,
105 0,
106 0,
107 0,
108 0,
109 p0,
110 p1);
111
112 scoped_ptr<MotionEvent> clone = event.Clone();
113 EXPECT_EQ(ui::test::ToString(event), ui::test::ToString(*clone));
114 }
115
116 TEST(MotionEventAndroidTest, Cancel) {
117 const int event_time_ms = 5;
118 const int pointer_count = 1;
119 MotionEventAndroid::Pointer p0(
120 1, 13.7f, -7.13f, 5.3f, 1.2f, 0.1f, kAndroidToolTypeFinger);
121 MotionEventAndroid::Pointer p1(0, 0, 0, 0, 0, 0, 0);
122 MotionEventAndroid event(kPixToDip,
123 base::android::AttachCurrentThread(),
124 nullptr,
132 event_time_ms, 125 event_time_ms,
133 kAndroidActionDown, 126 kAndroidActionDown,
134 pointer_count, 127 pointer_count,
135 0, 128 0,
136 0, 129 0,
137 x,
138 y,
139 0,
140 0,
141 pointer_id,
142 0,
143 touch_major,
144 0.f,
145 touch_minor,
146 0.f,
147 orientation,
148 0.f,
149 x,
150 y,
151 0,
152 0,
153 0,
154 0);
155
156 scoped_ptr<MotionEvent> clone = event.Clone();
157 EXPECT_EQ(event, *clone);
158 }
159
160 TEST(MotionEventAndroidTest, Cancel) {
161 int event_time_ms = 5;
162 base::TimeTicks event_time =
163 base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms);
164 int pointer_count = 1;
165 float x = 13.7f;
166 float y = -7.13f;
167 base::android::ScopedJavaLocalRef<jobject> event_obj =
168 MotionEventAndroid::Obtain(
169 event_time, event_time, MotionEvent::ACTION_DOWN, x, y);
170 ASSERT_TRUE(event_obj.obj());
171
172 MotionEventAndroid event(kPixToDip,
173 base::android::AttachCurrentThread(),
174 event_obj.obj(),
175 event_time_ms,
176 kAndroidActionDown,
177 pointer_count,
178 0,
179 0,
180 x,
181 y,
182 0, 130 0,
183 0, 131 0,
184 0, 132 0,
185 0, 133 0,
186 0.f, 134 p0,
187 0.f, 135 p1);
188 0.f,
189 0.f,
190 0.f,
191 0.f,
192 x,
193 y,
194 0,
195 0,
196 0,
197 0);
198 136
199 scoped_ptr<MotionEvent> cancel_event = event.Cancel(); 137 scoped_ptr<MotionEvent> cancel_event = event.Cancel();
200 EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel_event->GetAction()); 138 EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel_event->GetAction());
201 EXPECT_EQ(event_time, cancel_event->GetEventTime()); 139 EXPECT_EQ(
202 EXPECT_EQ(x * kPixToDip, cancel_event->GetX(0)); 140 base::TimeTicks() + base::TimeDelta::FromMilliseconds(event_time_ms),
203 EXPECT_EQ(y * kPixToDip, cancel_event->GetY(0)); 141 cancel_event->GetEventTime());
142 EXPECT_EQ(p0.pos_x_pixels * kPixToDip, cancel_event->GetX(0));
143 EXPECT_EQ(p0.pos_y_pixels * kPixToDip, cancel_event->GetY(0));
204 EXPECT_EQ(static_cast<size_t>(pointer_count), 144 EXPECT_EQ(static_cast<size_t>(pointer_count),
205 cancel_event->GetPointerCount()); 145 cancel_event->GetPointerCount());
206 EXPECT_EQ(0U, cancel_event->GetHistorySize()); 146 EXPECT_EQ(0U, cancel_event->GetHistorySize());
207 } 147 }
208 148
209 TEST(MotionEventAndroidTest, InvalidOrientationsSanitized) { 149 TEST(MotionEventAndroidTest, InvalidOrientationsSanitized) {
210 base::TimeTicks event_time;
211 int pointer_count = 2; 150 int pointer_count = 2;
212 float orientation0 = 1e10f; 151 float orientation0 = 1e10f;
213 float orientation1 = std::numeric_limits<float>::quiet_NaN(); 152 float orientation1 = std::numeric_limits<float>::quiet_NaN();
214 base::android::ScopedJavaLocalRef<jobject> base_event_obj = 153 MotionEventAndroid::Pointer p0(0, 0, 0, 0, 0, orientation0, 0);
215 MotionEventAndroid::Obtain( 154 MotionEventAndroid::Pointer p1(1, 0, 0, 0, 0, orientation1, 0);
216 event_time, event_time, MotionEvent::ACTION_DOWN, 0, 0);
217 ASSERT_TRUE(base_event_obj.obj());
218
219 MotionEventAndroid event(kPixToDip, 155 MotionEventAndroid event(kPixToDip,
220 base::android::AttachCurrentThread(), 156 base::android::AttachCurrentThread(),
221 base_event_obj.obj(), 157 nullptr,
222 0, 158 0,
223 kAndroidActionDown, 159 kAndroidActionDown,
224 pointer_count, 160 pointer_count,
225 0, 161 0,
226 0, 162 0,
227 0, 163 0,
228 0, 164 0,
229 0, 165 0,
230 0, 166 0,
231 0, 167 p0,
232 0, 168 p1);
233 0,
234 0,
235 0,
236 0,
237 orientation0,
238 orientation1,
239 0,
240 0,
241 0,
242 0,
243 0,
244 0);
245 169
246 EXPECT_EQ(0.f, event.GetOrientation(0)); 170 EXPECT_EQ(0.f, event.GetOrientation(0));
247 EXPECT_EQ(0.f, event.GetOrientation(1)); 171 EXPECT_EQ(0.f, event.GetOrientation(1));
248 } 172 }
249 173
250 } // namespace content 174 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/motion_event_android.cc ('k') | content/browser/renderer_host/input/motion_event_web.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698