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

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

Issue 800163005: Fixed ui::TouchEvent rotation angle out-of-bound issue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « ui/events/gestures/motion_event_aura.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 7
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 101
102 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); 102 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
103 EXPECT_TRUE(event.OnTouch(release1)); 103 EXPECT_TRUE(event.OnTouch(release1));
104 event.CleanupRemovedTouchPoints(release1); 104 event.CleanupRemovedTouchPoints(release1);
105 EXPECT_EQ(2U, event.GetPointerCount()); 105 EXPECT_EQ(2U, event.GetPointerCount());
106 106
107 EXPECT_EQ(ids[0], event.GetPointerId(0)); 107 EXPECT_EQ(ids[0], event.GetPointerId(0));
108 EXPECT_EQ(ids[2], event.GetPointerId(1)); 108 EXPECT_EQ(ids[2], event.GetPointerId(1));
109 109
110 // Test cloning of pointer count and id information. 110 // Test cloning of pointer count and id information.
111 // TODO(mustaq): Make a separate clone test 111 // TODO(mustaq): Make a separate clone test, crbug.com/450655
112 scoped_ptr<MotionEvent> clone = event.Clone(); 112 scoped_ptr<MotionEvent> clone = event.Clone();
113 EXPECT_EQ(2U, clone->GetPointerCount()); 113 EXPECT_EQ(2U, clone->GetPointerCount());
114 EXPECT_EQ(ids[0], clone->GetPointerId(0)); 114 EXPECT_EQ(ids[0], clone->GetPointerId(0));
115 EXPECT_EQ(ids[2], clone->GetPointerId(1)); 115 EXPECT_EQ(ids[2], clone->GetPointerId(1));
116 EXPECT_EQ(test::ToString(event), test::ToString(*clone)); 116 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
117 117
118 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); 118 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
119 EXPECT_TRUE(event.OnTouch(release0)); 119 EXPECT_TRUE(event.OnTouch(release0));
120 event.CleanupRemovedTouchPoints(release0); 120 event.CleanupRemovedTouchPoints(release0);
121 EXPECT_EQ(1U, event.GetPointerCount()); 121 EXPECT_EQ(1U, event.GetPointerCount());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 EXPECT_TRUE(event.OnTouch(press1)); 200 EXPECT_TRUE(event.OnTouch(press1));
201 201
202 EXPECT_EQ(2U, event.GetPointerCount()); 202 EXPECT_EQ(2U, event.GetPointerCount());
203 EXPECT_FLOAT_EQ(x, event.GetX(1)); 203 EXPECT_FLOAT_EQ(x, event.GetX(1));
204 EXPECT_FLOAT_EQ(y, event.GetY(1)); 204 EXPECT_FLOAT_EQ(y, event.GetY(1));
205 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 205 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
206 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 206 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
207 207
208 // Test cloning of pointer location information. 208 // Test cloning of pointer location information.
209 scoped_ptr<MotionEvent> clone = event.Clone(); 209 scoped_ptr<MotionEvent> clone = event.Clone();
210 { 210 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
211 EXPECT_EQ(test::ToString(event), test::ToString(*clone)); 211 EXPECT_EQ(2U, clone->GetPointerCount());
212 EXPECT_EQ(2U, clone->GetPointerCount()); 212 EXPECT_FLOAT_EQ(x, clone->GetX(1));
213 EXPECT_FLOAT_EQ(x, clone->GetX(1)); 213 EXPECT_FLOAT_EQ(y, clone->GetY(1));
214 EXPECT_FLOAT_EQ(y, clone->GetY(1)); 214 EXPECT_FLOAT_EQ(raw_x, clone->GetRawX(1));
215 EXPECT_FLOAT_EQ(raw_x, clone->GetRawX(1)); 215 EXPECT_FLOAT_EQ(raw_y, clone->GetRawY(1));
216 EXPECT_FLOAT_EQ(raw_y, clone->GetRawY(1));
217 }
218 216
219 x = 27.9f; 217 x = 27.9f;
220 y = 22.3f; 218 y = 22.3f;
221 raw_x = x + kRawOffsetX; 219 raw_x = x + kRawOffsetX;
222 raw_y = y + kRawOffsetY; 220 raw_y = y + kRawOffsetY;
223 TouchEvent move1 = 221 TouchEvent move1 =
224 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y); 222 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y);
225 EXPECT_TRUE(event.OnTouch(move1)); 223 EXPECT_TRUE(event.OnTouch(move1));
226 224
227 EXPECT_FLOAT_EQ(x, event.GetX(1)); 225 EXPECT_FLOAT_EQ(x, event.GetX(1));
(...skipping 12 matching lines...) Expand all
240 EXPECT_FLOAT_EQ(x, event.GetX(0)); 238 EXPECT_FLOAT_EQ(x, event.GetX(0));
241 EXPECT_FLOAT_EQ(y, event.GetY(0)); 239 EXPECT_FLOAT_EQ(y, event.GetY(0));
242 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0)); 240 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
243 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0)); 241 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
244 } 242 }
245 243
246 TEST(MotionEventAuraTest, TapParams) { 244 TEST(MotionEventAuraTest, TapParams) {
247 // Test that touch params are stored correctly. 245 // Test that touch params are stored correctly.
248 MotionEventAura event; 246 MotionEventAura event;
249 247
250 int ids[] = {15, 13}; 248 int ids[] = {15, 13, 25, 23};
251 249
252 float radius_x; 250 float radius_x;
253 float radius_y; 251 float radius_y;
254 float rotation_angle; 252 float rotation_angle;
255 float pressure; 253 float pressure;
256 254
255 // Test case: radius_x > radius_y, rotation_angle < 90
257 radius_x = 123.45f; 256 radius_x = 123.45f;
258 radius_y = 67.89f; 257 radius_y = 67.89f;
259 rotation_angle = 23.f; 258 rotation_angle = 23.f;
260 pressure = 0.123f; 259 pressure = 0.123f;
261 TouchEvent press0 = TouchWithTapParams( 260 TouchEvent press0 = TouchWithTapParams(
262 ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure); 261 ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure);
263 EXPECT_TRUE(event.OnTouch(press0)); 262 EXPECT_TRUE(event.OnTouch(press0));
264 263
265 EXPECT_EQ(1U, event.GetPointerCount()); 264 EXPECT_EQ(1U, event.GetPointerCount());
266 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2); 265 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2);
267 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2); 266 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2);
268 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90); 267 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90);
269 EXPECT_FLOAT_EQ(pressure, event.GetPressure(0)); 268 EXPECT_FLOAT_EQ(pressure, event.GetPressure(0));
270 269
270 // Test case: radius_x < radius_y, rotation_angle < 90
271 radius_x = 67.89f; 271 radius_x = 67.89f;
272 radius_y = 123.45f; 272 radius_y = 123.45f;
273 rotation_angle = 46.f; 273 rotation_angle = 46.f;
274 pressure = 0.456f; 274 pressure = 0.456f;
275 TouchEvent press1 = TouchWithTapParams( 275 TouchEvent press1 = TouchWithTapParams(
276 ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure); 276 ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure);
277 EXPECT_TRUE(event.OnTouch(press1)); 277 EXPECT_TRUE(event.OnTouch(press1));
278 278
279 EXPECT_EQ(2U, event.GetPointerCount()); 279 EXPECT_EQ(2U, event.GetPointerCount());
280 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2); 280 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
281 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2); 281 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
282 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI); 282 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
283 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1)); 283 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
284 284
285 // Test cloning of tap params 285 // Test cloning of tap params
286 // TODO(mustaq): Make a separate clone test, crbug.com/450655
286 scoped_ptr<MotionEvent> clone = event.Clone(); 287 scoped_ptr<MotionEvent> clone = event.Clone();
287 { 288 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
288 EXPECT_EQ(test::ToString(event), test::ToString(*clone)); 289 EXPECT_EQ(2U, clone->GetPointerCount());
289 EXPECT_EQ(2U, clone->GetPointerCount()); 290 EXPECT_FLOAT_EQ(radius_y, clone->GetTouchMajor(1) / 2);
290 EXPECT_FLOAT_EQ(radius_y, clone->GetTouchMajor(1) / 2); 291 EXPECT_FLOAT_EQ(radius_x, clone->GetTouchMinor(1) / 2);
291 EXPECT_FLOAT_EQ(radius_x, clone->GetTouchMinor(1) / 2); 292 EXPECT_FLOAT_EQ(rotation_angle, clone->GetOrientation(1) * 180 / M_PI);
292 EXPECT_FLOAT_EQ(rotation_angle, clone->GetOrientation(1) * 180 / M_PI); 293 EXPECT_FLOAT_EQ(pressure, clone->GetPressure(1));
293 EXPECT_FLOAT_EQ(pressure, clone->GetPressure(1));
294 }
295 294
295 // TODO(mustaq): The move test seems out-of-scope here, crbug.com/450655
296 radius_x = 76.98f; 296 radius_x = 76.98f;
297 radius_y = 321.54f; 297 radius_y = 321.54f;
298 rotation_angle = 64.f; 298 rotation_angle = 64.f;
299 pressure = 0.654f; 299 pressure = 0.654f;
300 TouchEvent move1 = TouchWithTapParams( 300 TouchEvent move1 = TouchWithTapParams(
301 ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure); 301 ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure);
302 move1.set_location(gfx::Point(20, 21)); 302 move1.set_location(gfx::Point(20, 21));
303 EXPECT_TRUE(event.OnTouch(move1)); 303 EXPECT_TRUE(event.OnTouch(move1));
304 304
305 EXPECT_EQ(2U, event.GetPointerCount()); 305 EXPECT_EQ(2U, event.GetPointerCount());
306 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2); 306 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
307 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2); 307 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
308 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI); 308 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
309 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1)); 309 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
310
311 // Test case: radius_x > radius_y, rotation_angle > 90
312 radius_x = 123.45f;
313 radius_y = 67.89f;
314 rotation_angle = 92.f;
315 pressure = 0.789f;
316 TouchEvent press2 = TouchWithTapParams(
317 ET_TOUCH_PRESSED, ids[2], radius_x, radius_y, rotation_angle, pressure);
318 EXPECT_TRUE(event.OnTouch(press2));
319
320 EXPECT_EQ(3U, event.GetPointerCount());
321 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(2) / 2);
322 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(2) / 2);
323 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(2) * 180 / M_PI + 90);
324 EXPECT_FLOAT_EQ(pressure, event.GetPressure(2));
325
326 // Test case: radius_x < radius_y, rotation_angle > 90
327 radius_x = 67.89f;
328 radius_y = 123.45f;
329 rotation_angle = 135.f;
330 pressure = 0.012f;
331 TouchEvent press3 = TouchWithTapParams(
332 ET_TOUCH_PRESSED, ids[3], radius_x, radius_y, rotation_angle, pressure);
333 EXPECT_TRUE(event.OnTouch(press3));
334
335 EXPECT_EQ(4U, event.GetPointerCount());
336 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(3) / 2);
337 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(3) / 2);
338 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(3) * 180 / M_PI + 180);
339 EXPECT_FLOAT_EQ(pressure, event.GetPressure(3));
310 } 340 }
311 341
312 TEST(MotionEventAuraTest, Timestamps) { 342 TEST(MotionEventAuraTest, Timestamps) {
313 // Test that timestamp information is stored and converted correctly. 343 // Test that timestamp information is stored and converted correctly.
314 MotionEventAura event; 344 MotionEventAura event;
315 int ids[] = {7, 13}; 345 int ids[] = {7, 13};
316 int times_in_ms[] = {59436, 60263, 82175}; 346 int times_in_ms[] = {59436, 60263, 82175};
317 347
318 TouchEvent press0 = TouchWithTime( 348 TouchEvent press0 = TouchWithTime(
319 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]); 349 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]);
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 EXPECT_TRUE(event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, id))); 474 EXPECT_TRUE(event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, id)));
445 TouchEvent move0 = TouchWithPosition(ET_TOUCH_PRESSED, id, 10, 20, 10, 20); 475 TouchEvent move0 = TouchWithPosition(ET_TOUCH_PRESSED, id, 10, 20, 10, 20);
446 EXPECT_TRUE(event.OnTouch(move0)); 476 EXPECT_TRUE(event.OnTouch(move0));
447 477
448 TouchEvent move1 = TouchWithPosition(ET_TOUCH_MOVED, id, 11, 21, 11, 21); 478 TouchEvent move1 = TouchWithPosition(ET_TOUCH_MOVED, id, 11, 21, 11, 21);
449 EXPECT_TRUE(event.OnTouch(move1)); 479 EXPECT_TRUE(event.OnTouch(move1));
450 EXPECT_FALSE(event.OnTouch(move1)); 480 EXPECT_FALSE(event.OnTouch(move1));
451 } 481 }
452 482
453 } // namespace ui 483 } // namespace ui
OLDNEW
« no previous file with comments | « 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