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

Side by Side Diff: ui/events/gestures/motion_event_aura_unittest.cc

Issue 494833003: Completed webkit radiusX, radiusY and rotationAngle handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweaked NaN checks Created 6 years, 3 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 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES
7
8 #include <cmath>
9
5 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
6 #include "ui/events/event.h" 11 #include "ui/events/event.h"
7 #include "ui/events/gestures/motion_event_aura.h" 12 #include "ui/events/gestures/motion_event_aura.h"
8 13
9 namespace { 14 namespace {
10 15
11 ui::TouchEvent TouchWithType(ui::EventType type, int id) { 16 ui::TouchEvent TouchWithType(ui::EventType type, int id) {
12 return ui::TouchEvent( 17 return ui::TouchEvent(
13 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0)); 18 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0));
14 } 19 }
15 20
16 ui::TouchEvent TouchWithPosition(ui::EventType type, 21 ui::TouchEvent TouchWithPosition(ui::EventType type,
17 int id, 22 int id,
18 float x, 23 float x,
19 float y, 24 float y,
20 float raw_x, 25 float raw_x,
21 float raw_y, 26 float raw_y) {
22 float radius,
23 float pressure) {
24 ui::TouchEvent event(type, 27 ui::TouchEvent event(type,
25 gfx::PointF(x, y), 28 gfx::PointF(x, y),
26 0, 29 0,
27 id, 30 id,
28 base::TimeDelta::FromMilliseconds(0), 31 base::TimeDelta::FromMilliseconds(0),
29 radius,
30 radius,
31 0, 32 0,
33 0,
34 0,
35 0);
36 event.set_root_location(gfx::PointF(raw_x, raw_y));
37 return event;
38 }
39
40 ui::TouchEvent TouchWithTapParams(ui::EventType type,
41 int id,
42 float radius_x,
43 float radius_y,
44 float rotation_angle,
45 float pressure) {
46 ui::TouchEvent event(type,
47 gfx::PointF(1, 1),
48 0,
49 id,
50 base::TimeDelta::FromMilliseconds(0),
51 radius_x,
52 radius_y,
53 rotation_angle,
32 pressure); 54 pressure);
33 event.set_root_location(gfx::PointF(raw_x, raw_y)); 55 event.set_root_location(gfx::PointF(1, 1));
34 return event; 56 return event;
35 } 57 }
36 58
37 ui::TouchEvent TouchWithTime(ui::EventType type, int id, int ms) { 59 ui::TouchEvent TouchWithTime(ui::EventType type, int id, int ms) {
38 return ui::TouchEvent( 60 return ui::TouchEvent(
39 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(ms)); 61 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(ms));
40 } 62 }
41 63
42 base::TimeTicks MsToTicks(int ms) { 64 base::TimeTicks MsToTicks(int ms) {
43 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms); 65 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 100
79 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); 101 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
80 event.OnTouch(release1); 102 event.OnTouch(release1);
81 event.CleanupRemovedTouchPoints(release1); 103 event.CleanupRemovedTouchPoints(release1);
82 EXPECT_EQ(2U, event.GetPointerCount()); 104 EXPECT_EQ(2U, event.GetPointerCount());
83 105
84 EXPECT_EQ(ids[0], event.GetPointerId(0)); 106 EXPECT_EQ(ids[0], event.GetPointerId(0));
85 EXPECT_EQ(ids[2], event.GetPointerId(1)); 107 EXPECT_EQ(ids[2], event.GetPointerId(1));
86 108
87 // Test cloning of pointer count and id information. 109 // Test cloning of pointer count and id information.
110 // TODO(mustaq): Make a separate clone test
88 scoped_ptr<MotionEvent> clone = event.Clone(); 111 scoped_ptr<MotionEvent> clone = event.Clone();
89 EXPECT_EQ(2U, clone->GetPointerCount()); 112 EXPECT_EQ(2U, clone->GetPointerCount());
90 EXPECT_EQ(ids[0], clone->GetPointerId(0)); 113 EXPECT_EQ(ids[0], clone->GetPointerId(0));
91 EXPECT_EQ(ids[2], clone->GetPointerId(1)); 114 EXPECT_EQ(ids[2], clone->GetPointerId(1));
92 115
93 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); 116 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
94 event.OnTouch(release0); 117 event.OnTouch(release0);
95 event.CleanupRemovedTouchPoints(release0); 118 event.CleanupRemovedTouchPoints(release0);
96 EXPECT_EQ(1U, event.GetPointerCount()); 119 EXPECT_EQ(1U, event.GetPointerCount());
97 120
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 MotionEventAura event; 165 MotionEventAura event;
143 166
144 const float kRawOffsetX = 11.1f; 167 const float kRawOffsetX = 11.1f;
145 const float kRawOffsetY = 13.3f; 168 const float kRawOffsetY = 13.3f;
146 169
147 int ids[] = {15, 13}; 170 int ids[] = {15, 13};
148 float x; 171 float x;
149 float y; 172 float y;
150 float raw_x; 173 float raw_x;
151 float raw_y; 174 float raw_y;
152 float r;
153 float p;
154 175
155 x = 14.4f; 176 x = 14.4f;
156 y = 17.3f; 177 y = 17.3f;
157 raw_x = x + kRawOffsetX; 178 raw_x = x + kRawOffsetX;
158 raw_y = y + kRawOffsetY; 179 raw_y = y + kRawOffsetY;
159 r = 25.7f;
160 p = 48.2f;
161 TouchEvent press0 = 180 TouchEvent press0 =
162 TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, raw_x, raw_y, r, p); 181 TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, raw_x, raw_y);
163 event.OnTouch(press0); 182 event.OnTouch(press0);
164 183
165 EXPECT_EQ(1U, event.GetPointerCount()); 184 EXPECT_EQ(1U, event.GetPointerCount());
166 EXPECT_FLOAT_EQ(x, event.GetX(0)); 185 EXPECT_FLOAT_EQ(x, event.GetX(0));
167 EXPECT_FLOAT_EQ(y, event.GetY(0)); 186 EXPECT_FLOAT_EQ(y, event.GetY(0));
168 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0)); 187 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
169 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0)); 188 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
170 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(0) / 2);
171 EXPECT_FLOAT_EQ(p, event.GetPressure(0));
172 189
173 x = 17.8f; 190 x = 17.8f;
174 y = 12.1f; 191 y = 12.1f;
175 raw_x = x + kRawOffsetX; 192 raw_x = x + kRawOffsetX;
176 raw_y = y + kRawOffsetY; 193 raw_y = y + kRawOffsetY;
177 r = 21.2f;
178 p = 18.4f;
179 TouchEvent press1 = 194 TouchEvent press1 =
180 TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, raw_x, raw_y, r, p); 195 TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, raw_x, raw_y);
181 event.OnTouch(press1); 196 event.OnTouch(press1);
182 197
183 EXPECT_EQ(2U, event.GetPointerCount()); 198 EXPECT_EQ(2U, event.GetPointerCount());
184 EXPECT_FLOAT_EQ(x, event.GetX(1)); 199 EXPECT_FLOAT_EQ(x, event.GetX(1));
185 EXPECT_FLOAT_EQ(y, event.GetY(1)); 200 EXPECT_FLOAT_EQ(y, event.GetY(1));
186 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 201 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
187 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 202 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
188 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(1) / 2);
189 EXPECT_FLOAT_EQ(p, event.GetPressure(1));
190 203
191 // Test cloning of pointer location information. 204 // Test cloning of pointer location information.
192 scoped_ptr<MotionEvent> clone = event.Clone(); 205 scoped_ptr<MotionEvent> clone = event.Clone();
193 EXPECT_EQ(2U, clone->GetPointerCount()); 206 {
194 EXPECT_FLOAT_EQ(x, clone->GetX(1)); 207 const MotionEventAura* raw_clone_aura =
195 EXPECT_FLOAT_EQ(y, clone->GetY(1)); 208 static_cast<MotionEventAura*>(clone.get());
196 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 209 EXPECT_EQ(2U, raw_clone_aura->GetPointerCount());
197 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 210 EXPECT_FLOAT_EQ(x, raw_clone_aura->GetX(1));
198 EXPECT_FLOAT_EQ(r, clone->GetTouchMajor(1) / 2); 211 EXPECT_FLOAT_EQ(y, raw_clone_aura->GetY(1));
199 EXPECT_FLOAT_EQ(p, clone->GetPressure(1)); 212 EXPECT_FLOAT_EQ(raw_x, raw_clone_aura->GetRawX(1));
213 EXPECT_FLOAT_EQ(raw_y, raw_clone_aura->GetRawY(1));
214 }
200 215
201 x = 27.9f; 216 x = 27.9f;
202 y = 22.3f; 217 y = 22.3f;
203 raw_x = x + kRawOffsetX; 218 raw_x = x + kRawOffsetX;
204 raw_y = y + kRawOffsetY; 219 raw_y = y + kRawOffsetY;
205 r = 7.6f;
206 p = 82.1f;
207 TouchEvent move1 = 220 TouchEvent move1 =
208 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y, r, p); 221 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y);
209 event.OnTouch(move1); 222 event.OnTouch(move1);
210 223
211 EXPECT_FLOAT_EQ(x, event.GetX(1)); 224 EXPECT_FLOAT_EQ(x, event.GetX(1));
212 EXPECT_FLOAT_EQ(y, event.GetY(1)); 225 EXPECT_FLOAT_EQ(y, event.GetY(1));
213 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 226 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
214 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 227 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
215 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(1) / 2);
216 EXPECT_FLOAT_EQ(p, event.GetPressure(1));
217 228
218 x = 34.6f; 229 x = 34.6f;
219 y = 23.8f; 230 y = 23.8f;
220 raw_x = x + kRawOffsetX; 231 raw_x = x + kRawOffsetX;
221 raw_y = y + kRawOffsetY; 232 raw_y = y + kRawOffsetY;
222 r = 12.9f;
223 p = 14.2f;
224 TouchEvent move0 = 233 TouchEvent move0 =
225 TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, raw_x, raw_y, r, p); 234 TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, raw_x, raw_y);
226 event.OnTouch(move0); 235 event.OnTouch(move0);
227 236
228 EXPECT_FLOAT_EQ(x, event.GetX(0)); 237 EXPECT_FLOAT_EQ(x, event.GetX(0));
229 EXPECT_FLOAT_EQ(y, event.GetY(0)); 238 EXPECT_FLOAT_EQ(y, event.GetY(0));
230 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0)); 239 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
231 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0)); 240 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
232 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(0) / 2); 241 }
233 EXPECT_FLOAT_EQ(p, event.GetPressure(0)); 242
243 TEST(MotionEventAuraTest, TapParams) {
244 // Test that touch params are stored correctly.
245 MotionEventAura event;
246
247 int ids[] = {15, 13};
248
249 float radius_x;
250 float radius_y;
251 float rotation_angle;
252 float pressure;
253
254 radius_x = 123.45f;
255 radius_y = 67.89f;
256 rotation_angle = 23.f;
257 pressure = 0.123f;
258 TouchEvent press0 = TouchWithTapParams(
259 ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure);
260 event.OnTouch(press0);
261
262 EXPECT_EQ(1U, event.GetPointerCount());
263 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2);
264 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2);
265 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90);
266 EXPECT_FLOAT_EQ(pressure, event.GetPressure(0));
267
268 radius_x = 67.89f;
269 radius_y = 123.45f;
270 rotation_angle = 46.f;
271 pressure = 0.456f;
272 TouchEvent press1 = TouchWithTapParams(
273 ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure);
274 event.OnTouch(press1);
275
276 EXPECT_EQ(2U, event.GetPointerCount());
277 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
278 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
279 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
280 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
281
282 // Test cloning of tap params
283 scoped_ptr<MotionEvent> clone = event.Clone();
284 {
285 const MotionEventAura* raw_clone_aura =
286 static_cast<MotionEventAura*>(clone.get());
287 EXPECT_EQ(2U, raw_clone_aura->GetPointerCount());
288 EXPECT_FLOAT_EQ(radius_y, raw_clone_aura->GetTouchMajor(1) / 2);
289 EXPECT_FLOAT_EQ(radius_x, raw_clone_aura->GetTouchMinor(1) / 2);
290 EXPECT_FLOAT_EQ(
291 rotation_angle, raw_clone_aura->GetOrientation(1) * 180 / M_PI);
292 EXPECT_FLOAT_EQ(pressure, raw_clone_aura->GetPressure(1));
293 }
294
295 radius_x = 76.98f;
296 radius_y = 321.54f;
297 rotation_angle = 64.f;
298 pressure = 0.654f;
299 TouchEvent move1 = TouchWithTapParams(
300 ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure);
301 event.OnTouch(move1);
302
303 EXPECT_EQ(2U, event.GetPointerCount());
304 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
305 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
306 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
307 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
234 } 308 }
235 309
236 TEST(MotionEventAuraTest, Timestamps) { 310 TEST(MotionEventAuraTest, Timestamps) {
237 // Test that timestamp information is stored and converted correctly. 311 // Test that timestamp information is stored and converted correctly.
238 MotionEventAura event; 312 MotionEventAura event;
239 int ids[] = {7, 13}; 313 int ids[] = {7, 13};
240 int times_in_ms[] = {59436, 60263, 82175}; 314 int times_in_ms[] = {59436, 60263, 82175};
241 315
242 TouchEvent press0 = TouchWithTime( 316 TouchEvent press0 = TouchWithTime(
243 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]); 317 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 399
326 // For now, all pointers have an unknown tool type. 400 // For now, all pointers have an unknown tool type.
327 // TODO(jdduke): Expand this test when ui::TouchEvent identifies the source 401 // TODO(jdduke): Expand this test when ui::TouchEvent identifies the source
328 // touch type, crbug.com/404128. 402 // touch type, crbug.com/404128.
329 event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, 7)); 403 event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, 7));
330 ASSERT_EQ(1U, event.GetPointerCount()); 404 ASSERT_EQ(1U, event.GetPointerCount());
331 EXPECT_EQ(MotionEvent::TOOL_TYPE_UNKNOWN, event.GetToolType(0)); 405 EXPECT_EQ(MotionEvent::TOOL_TYPE_UNKNOWN, event.GetToolType(0));
332 } 406 }
333 407
334 } // namespace ui 408 } // namespace ui
OLDNEW
« ui/events/gestures/motion_event_aura.cc ('K') | « ui/events/gestures/motion_event_aura.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698