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 // 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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |