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

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

Issue 1287103004: Sync ui/events to chromium @ https://codereview.chromium.org/1210203002 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 4 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_impl.cc ('k') | ui/events/input_device_event_observer.h » ('j') | 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"
11 #include "ui/events/event.h" 11 #include "ui/events/event.h"
12 #include "ui/events/gestures/motion_event_impl.h" 12 #include "ui/events/gestures/motion_event_aura.h"
13 #include "ui/events/test/motion_event_test_utils.h"
13 14
14 namespace { 15 namespace {
15 16
16 ui::TouchEvent TouchWithType(ui::EventType type, int id) { 17 ui::TouchEvent TouchWithType(ui::EventType type, int id) {
17 return ui::TouchEvent( 18 return ui::TouchEvent(
18 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0)); 19 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0));
19 } 20 }
20 21
21 ui::TouchEvent TouchWithPosition(ui::EventType type, 22 ui::TouchEvent TouchWithPosition(ui::EventType type,
22 int id, 23 int id,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 } 63 }
63 64
64 base::TimeTicks MsToTicks(int ms) { 65 base::TimeTicks MsToTicks(int ms) {
65 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms); 66 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms);
66 } 67 }
67 68
68 } // namespace 69 } // namespace
69 70
70 namespace ui { 71 namespace ui {
71 72
72 TEST(MotionEventImplTest, PointerCountAndIds) { 73 TEST(MotionEventAuraTest, PointerCountAndIds) {
73 // Test that |PointerCount()| returns the correct number of pointers, and ids 74 // Test that |PointerCount()| returns the correct number of pointers, and ids
74 // are assigned correctly. 75 // are assigned correctly.
75 int ids[] = {4, 6, 1}; 76 int ids[] = {4, 6, 1};
76 77
77 MotionEventImpl event; 78 MotionEventAura event;
78 EXPECT_EQ(0U, event.GetPointerCount()); 79 EXPECT_EQ(0U, event.GetPointerCount());
79 80
80 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); 81 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
81 event.OnTouch(press0); 82 EXPECT_TRUE(event.OnTouch(press0));
82 EXPECT_EQ(1U, event.GetPointerCount()); 83 EXPECT_EQ(1U, event.GetPointerCount());
83 84
84 EXPECT_EQ(ids[0], event.GetPointerId(0)); 85 EXPECT_EQ(ids[0], event.GetPointerId(0));
85 86
86 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); 87 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
87 event.OnTouch(press1); 88 EXPECT_TRUE(event.OnTouch(press1));
88 EXPECT_EQ(2U, event.GetPointerCount()); 89 EXPECT_EQ(2U, event.GetPointerCount());
89 90
90 EXPECT_EQ(ids[0], event.GetPointerId(0)); 91 EXPECT_EQ(ids[0], event.GetPointerId(0));
91 EXPECT_EQ(ids[1], event.GetPointerId(1)); 92 EXPECT_EQ(ids[1], event.GetPointerId(1));
92 93
93 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]); 94 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]);
94 event.OnTouch(press2); 95 EXPECT_TRUE(event.OnTouch(press2));
95 EXPECT_EQ(3U, event.GetPointerCount()); 96 EXPECT_EQ(3U, event.GetPointerCount());
96 97
97 EXPECT_EQ(ids[0], event.GetPointerId(0)); 98 EXPECT_EQ(ids[0], event.GetPointerId(0));
98 EXPECT_EQ(ids[1], event.GetPointerId(1)); 99 EXPECT_EQ(ids[1], event.GetPointerId(1));
99 EXPECT_EQ(ids[2], event.GetPointerId(2)); 100 EXPECT_EQ(ids[2], event.GetPointerId(2));
100 101
101 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); 102 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
102 event.OnTouch(release1); 103 EXPECT_TRUE(event.OnTouch(release1));
103 event.CleanupRemovedTouchPoints(release1); 104 event.CleanupRemovedTouchPoints(release1);
104 EXPECT_EQ(2U, event.GetPointerCount()); 105 EXPECT_EQ(2U, event.GetPointerCount());
105 106
106 EXPECT_EQ(ids[0], event.GetPointerId(0)); 107 EXPECT_EQ(ids[0], event.GetPointerId(0));
107 EXPECT_EQ(ids[2], event.GetPointerId(1)); 108 EXPECT_EQ(ids[2], event.GetPointerId(1));
108 109
109 // Test cloning of pointer count and id information. 110 // Test cloning of pointer count and id information.
110 // TODO(mustaq): Make a separate clone test 111 // TODO(mustaq): Make a separate clone test, crbug.com/450655
111 scoped_ptr<MotionEvent> clone = event.Clone(); 112 scoped_ptr<MotionEvent> clone = event.Clone();
112 EXPECT_EQ(2U, clone->GetPointerCount()); 113 EXPECT_EQ(2U, clone->GetPointerCount());
113 EXPECT_EQ(ids[0], clone->GetPointerId(0)); 114 EXPECT_EQ(ids[0], clone->GetPointerId(0));
114 EXPECT_EQ(ids[2], clone->GetPointerId(1)); 115 EXPECT_EQ(ids[2], clone->GetPointerId(1));
116 EXPECT_EQ(event.GetUniqueEventId(), clone->GetUniqueEventId());
117 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
115 118
116 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); 119 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
117 event.OnTouch(release0); 120 EXPECT_TRUE(event.OnTouch(release0));
118 event.CleanupRemovedTouchPoints(release0); 121 event.CleanupRemovedTouchPoints(release0);
119 EXPECT_EQ(1U, event.GetPointerCount()); 122 EXPECT_EQ(1U, event.GetPointerCount());
120 123
121 EXPECT_EQ(ids[2], event.GetPointerId(0)); 124 EXPECT_EQ(ids[2], event.GetPointerId(0));
122 125
123 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[2]); 126 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[2]);
124 event.OnTouch(release2); 127 EXPECT_TRUE(event.OnTouch(release2));
125 event.CleanupRemovedTouchPoints(release2); 128 event.CleanupRemovedTouchPoints(release2);
126 EXPECT_EQ(0U, event.GetPointerCount()); 129 EXPECT_EQ(0U, event.GetPointerCount());
127 } 130 }
128 131
129 TEST(MotionEventImplTest, GetActionIndexAfterRemoval) { 132 TEST(MotionEventAuraTest, GetActionIndexAfterRemoval) {
130 // Test that |GetActionIndex()| returns the correct index when points have 133 // Test that |GetActionIndex()| returns the correct index when points have
131 // been removed. 134 // been removed.
132 int ids[] = {4, 6, 9}; 135 int ids[] = {4, 6, 9};
133 136
134 MotionEventImpl event; 137 MotionEventAura event;
135 EXPECT_EQ(0U, event.GetPointerCount()); 138 EXPECT_EQ(0U, event.GetPointerCount());
136 139
137 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); 140 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
138 event.OnTouch(press0); 141 EXPECT_TRUE(event.OnTouch(press0));
139 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); 142 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
140 event.OnTouch(press1); 143 EXPECT_TRUE(event.OnTouch(press1));
144 EXPECT_EQ(1, event.GetActionIndex());
141 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]); 145 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]);
142 event.OnTouch(press2); 146 EXPECT_TRUE(event.OnTouch(press2));
147 EXPECT_EQ(2, event.GetActionIndex());
143 EXPECT_EQ(3U, event.GetPointerCount()); 148 EXPECT_EQ(3U, event.GetPointerCount());
144 149
145 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); 150 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
146 event.OnTouch(release1); 151 EXPECT_TRUE(event.OnTouch(release1));
152 EXPECT_EQ(1, event.GetActionIndex());
147 event.CleanupRemovedTouchPoints(release1); 153 event.CleanupRemovedTouchPoints(release1);
148 EXPECT_EQ(1, event.GetActionIndex());
149 EXPECT_EQ(2U, event.GetPointerCount()); 154 EXPECT_EQ(2U, event.GetPointerCount());
150 155
151 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); 156 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
152 event.OnTouch(release2); 157 EXPECT_TRUE(event.OnTouch(release2));
158 EXPECT_EQ(0, event.GetActionIndex());
153 event.CleanupRemovedTouchPoints(release2); 159 event.CleanupRemovedTouchPoints(release2);
154 EXPECT_EQ(0, event.GetActionIndex());
155 EXPECT_EQ(1U, event.GetPointerCount()); 160 EXPECT_EQ(1U, event.GetPointerCount());
156 161
157 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[2]); 162 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[2]);
158 event.OnTouch(release0); 163 EXPECT_TRUE(event.OnTouch(release0));
159 event.CleanupRemovedTouchPoints(release0); 164 event.CleanupRemovedTouchPoints(release0);
160 EXPECT_EQ(0U, event.GetPointerCount()); 165 EXPECT_EQ(0U, event.GetPointerCount());
161 } 166 }
162 167
163 TEST(MotionEventImplTest, PointerLocations) { 168 TEST(MotionEventAuraTest, PointerLocations) {
164 // Test that location information is stored correctly. 169 // Test that location information is stored correctly.
165 MotionEventImpl event; 170 MotionEventAura event;
166 171
167 const float kRawOffsetX = 11.1f; 172 const float kRawOffsetX = 11.1f;
168 const float kRawOffsetY = 13.3f; 173 const float kRawOffsetY = 13.3f;
169 174
170 int ids[] = {15, 13}; 175 int ids[] = {15, 13};
171 float x; 176 float x;
172 float y; 177 float y;
173 float raw_x; 178 float raw_x;
174 float raw_y; 179 float raw_y;
175 180
176 x = 14.4f; 181 x = 14.4f;
177 y = 17.3f; 182 y = 17.3f;
178 raw_x = x + kRawOffsetX; 183 raw_x = x + kRawOffsetX;
179 raw_y = y + kRawOffsetY; 184 raw_y = y + kRawOffsetY;
180 TouchEvent press0 = 185 TouchEvent press0 =
181 TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, raw_x, raw_y); 186 TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, raw_x, raw_y);
182 event.OnTouch(press0); 187 EXPECT_TRUE(event.OnTouch(press0));
183 188
184 EXPECT_EQ(1U, event.GetPointerCount()); 189 EXPECT_EQ(1U, event.GetPointerCount());
185 EXPECT_FLOAT_EQ(x, event.GetX(0)); 190 EXPECT_FLOAT_EQ(x, event.GetX(0));
186 EXPECT_FLOAT_EQ(y, event.GetY(0)); 191 EXPECT_FLOAT_EQ(y, event.GetY(0));
187 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0)); 192 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
188 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0)); 193 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
189 194
190 x = 17.8f; 195 x = 17.8f;
191 y = 12.1f; 196 y = 12.1f;
192 raw_x = x + kRawOffsetX; 197 raw_x = x + kRawOffsetX;
193 raw_y = y + kRawOffsetY; 198 raw_y = y + kRawOffsetY;
194 TouchEvent press1 = 199 TouchEvent press1 =
195 TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, raw_x, raw_y); 200 TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, raw_x, raw_y);
196 event.OnTouch(press1); 201 EXPECT_TRUE(event.OnTouch(press1));
197 202
198 EXPECT_EQ(2U, event.GetPointerCount()); 203 EXPECT_EQ(2U, event.GetPointerCount());
199 EXPECT_FLOAT_EQ(x, event.GetX(1)); 204 EXPECT_FLOAT_EQ(x, event.GetX(1));
200 EXPECT_FLOAT_EQ(y, event.GetY(1)); 205 EXPECT_FLOAT_EQ(y, event.GetY(1));
201 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 206 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
202 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 207 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
203 208
204 // Test cloning of pointer location information. 209 // Test cloning of pointer location information.
205 scoped_ptr<MotionEvent> clone = event.Clone(); 210 scoped_ptr<MotionEvent> clone = event.Clone();
206 { 211 EXPECT_EQ(event.GetUniqueEventId(), clone->GetUniqueEventId());
207 const MotionEventImpl* raw_clone_aura = 212 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
208 static_cast<MotionEventImpl*>(clone.get()); 213 EXPECT_EQ(2U, clone->GetPointerCount());
209 EXPECT_EQ(2U, raw_clone_aura->GetPointerCount()); 214 EXPECT_FLOAT_EQ(x, clone->GetX(1));
210 EXPECT_FLOAT_EQ(x, raw_clone_aura->GetX(1)); 215 EXPECT_FLOAT_EQ(y, clone->GetY(1));
211 EXPECT_FLOAT_EQ(y, raw_clone_aura->GetY(1)); 216 EXPECT_FLOAT_EQ(raw_x, clone->GetRawX(1));
212 EXPECT_FLOAT_EQ(raw_x, raw_clone_aura->GetRawX(1)); 217 EXPECT_FLOAT_EQ(raw_y, clone->GetRawY(1));
213 EXPECT_FLOAT_EQ(raw_y, raw_clone_aura->GetRawY(1));
214 }
215 218
216 x = 27.9f; 219 x = 27.9f;
217 y = 22.3f; 220 y = 22.3f;
218 raw_x = x + kRawOffsetX; 221 raw_x = x + kRawOffsetX;
219 raw_y = y + kRawOffsetY; 222 raw_y = y + kRawOffsetY;
220 TouchEvent move1 = 223 TouchEvent move1 =
221 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y); 224 TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, raw_x, raw_y);
222 event.OnTouch(move1); 225 EXPECT_TRUE(event.OnTouch(move1));
223 226
224 EXPECT_FLOAT_EQ(x, event.GetX(1)); 227 EXPECT_FLOAT_EQ(x, event.GetX(1));
225 EXPECT_FLOAT_EQ(y, event.GetY(1)); 228 EXPECT_FLOAT_EQ(y, event.GetY(1));
226 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1)); 229 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(1));
227 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1)); 230 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(1));
228 231
229 x = 34.6f; 232 x = 34.6f;
230 y = 23.8f; 233 y = 23.8f;
231 raw_x = x + kRawOffsetX; 234 raw_x = x + kRawOffsetX;
232 raw_y = y + kRawOffsetY; 235 raw_y = y + kRawOffsetY;
233 TouchEvent move0 = 236 TouchEvent move0 =
234 TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, raw_x, raw_y); 237 TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, raw_x, raw_y);
235 event.OnTouch(move0); 238 EXPECT_TRUE(event.OnTouch(move0));
236 239
237 EXPECT_FLOAT_EQ(x, event.GetX(0)); 240 EXPECT_FLOAT_EQ(x, event.GetX(0));
238 EXPECT_FLOAT_EQ(y, event.GetY(0)); 241 EXPECT_FLOAT_EQ(y, event.GetY(0));
239 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0)); 242 EXPECT_FLOAT_EQ(raw_x, event.GetRawX(0));
240 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0)); 243 EXPECT_FLOAT_EQ(raw_y, event.GetRawY(0));
241 } 244 }
242 245
243 TEST(MotionEventImplTest, TapParams) { 246 TEST(MotionEventAuraTest, TapParams) {
244 // Test that touch params are stored correctly. 247 // Test that touch params are stored correctly.
245 MotionEventImpl event; 248 MotionEventAura event;
246 249
247 int ids[] = {15, 13}; 250 int ids[] = {15, 13, 25, 23};
248 251
249 float radius_x; 252 float radius_x;
250 float radius_y; 253 float radius_y;
251 float rotation_angle; 254 float rotation_angle;
252 float pressure; 255 float pressure;
253 256
257 // Test case: radius_x > radius_y, rotation_angle < 90
254 radius_x = 123.45f; 258 radius_x = 123.45f;
255 radius_y = 67.89f; 259 radius_y = 67.89f;
256 rotation_angle = 23.f; 260 rotation_angle = 23.f;
257 pressure = 0.123f; 261 pressure = 0.123f;
258 TouchEvent press0 = TouchWithTapParams( 262 TouchEvent press0 = TouchWithTapParams(
259 ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure); 263 ET_TOUCH_PRESSED, ids[0], radius_x, radius_y, rotation_angle, pressure);
260 event.OnTouch(press0); 264 EXPECT_TRUE(event.OnTouch(press0));
261 265
262 EXPECT_EQ(1U, event.GetPointerCount()); 266 EXPECT_EQ(1U, event.GetPointerCount());
263 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2); 267 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(0) / 2);
264 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2); 268 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(0) / 2);
265 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90); 269 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(0) * 180 / M_PI + 90);
266 EXPECT_FLOAT_EQ(pressure, event.GetPressure(0)); 270 EXPECT_FLOAT_EQ(pressure, event.GetPressure(0));
267 271
272 // Test case: radius_x < radius_y, rotation_angle < 90
268 radius_x = 67.89f; 273 radius_x = 67.89f;
269 radius_y = 123.45f; 274 radius_y = 123.45f;
270 rotation_angle = 46.f; 275 rotation_angle = 46.f;
271 pressure = 0.456f; 276 pressure = 0.456f;
272 TouchEvent press1 = TouchWithTapParams( 277 TouchEvent press1 = TouchWithTapParams(
273 ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure); 278 ET_TOUCH_PRESSED, ids[1], radius_x, radius_y, rotation_angle, pressure);
274 event.OnTouch(press1); 279 EXPECT_TRUE(event.OnTouch(press1));
275 280
276 EXPECT_EQ(2U, event.GetPointerCount()); 281 EXPECT_EQ(2U, event.GetPointerCount());
277 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2); 282 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
278 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2); 283 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
279 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI); 284 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
280 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1)); 285 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
281 286
282 // Test cloning of tap params 287 // Test cloning of tap params
288 // TODO(mustaq): Make a separate clone test, crbug.com/450655
283 scoped_ptr<MotionEvent> clone = event.Clone(); 289 scoped_ptr<MotionEvent> clone = event.Clone();
284 { 290 EXPECT_EQ(event.GetUniqueEventId(), clone->GetUniqueEventId());
285 const MotionEventImpl* raw_clone_aura = 291 EXPECT_EQ(test::ToString(event), test::ToString(*clone));
286 static_cast<MotionEventImpl*>(clone.get()); 292 EXPECT_EQ(2U, clone->GetPointerCount());
287 EXPECT_EQ(2U, raw_clone_aura->GetPointerCount()); 293 EXPECT_FLOAT_EQ(radius_y, clone->GetTouchMajor(1) / 2);
288 EXPECT_FLOAT_EQ(radius_y, raw_clone_aura->GetTouchMajor(1) / 2); 294 EXPECT_FLOAT_EQ(radius_x, clone->GetTouchMinor(1) / 2);
289 EXPECT_FLOAT_EQ(radius_x, raw_clone_aura->GetTouchMinor(1) / 2); 295 EXPECT_FLOAT_EQ(rotation_angle, clone->GetOrientation(1) * 180 / M_PI);
290 EXPECT_FLOAT_EQ( 296 EXPECT_FLOAT_EQ(pressure, clone->GetPressure(1));
291 rotation_angle, raw_clone_aura->GetOrientation(1) * 180 / M_PI);
292 EXPECT_FLOAT_EQ(pressure, raw_clone_aura->GetPressure(1));
293 }
294 297
298 // TODO(mustaq): The move test seems out-of-scope here, crbug.com/450655
295 radius_x = 76.98f; 299 radius_x = 76.98f;
296 radius_y = 321.54f; 300 radius_y = 321.54f;
297 rotation_angle = 64.f; 301 rotation_angle = 64.f;
298 pressure = 0.654f; 302 pressure = 0.654f;
299 TouchEvent move1 = TouchWithTapParams( 303 TouchEvent move1 = TouchWithTapParams(
300 ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure); 304 ET_TOUCH_MOVED, ids[1], radius_x, radius_y, rotation_angle, pressure);
301 event.OnTouch(move1); 305 move1.set_location(gfx::Point(20, 21));
306 EXPECT_TRUE(event.OnTouch(move1));
302 307
303 EXPECT_EQ(2U, event.GetPointerCount()); 308 EXPECT_EQ(2U, event.GetPointerCount());
304 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2); 309 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(1) / 2);
305 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2); 310 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(1) / 2);
306 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI); 311 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(1) * 180 / M_PI);
307 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1)); 312 EXPECT_FLOAT_EQ(pressure, event.GetPressure(1));
313
314 // Test case: radius_x > radius_y, rotation_angle > 90
315 radius_x = 123.45f;
316 radius_y = 67.89f;
317 rotation_angle = 92.f;
318 pressure = 0.789f;
319 TouchEvent press2 = TouchWithTapParams(
320 ET_TOUCH_PRESSED, ids[2], radius_x, radius_y, rotation_angle, pressure);
321 EXPECT_TRUE(event.OnTouch(press2));
322
323 EXPECT_EQ(3U, event.GetPointerCount());
324 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMajor(2) / 2);
325 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMinor(2) / 2);
326 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(2) * 180 / M_PI + 90);
327 EXPECT_FLOAT_EQ(pressure, event.GetPressure(2));
328
329 // Test case: radius_x < radius_y, rotation_angle > 90
330 radius_x = 67.89f;
331 radius_y = 123.45f;
332 rotation_angle = 135.f;
333 pressure = 0.012f;
334 TouchEvent press3 = TouchWithTapParams(
335 ET_TOUCH_PRESSED, ids[3], radius_x, radius_y, rotation_angle, pressure);
336 EXPECT_TRUE(event.OnTouch(press3));
337
338 EXPECT_EQ(4U, event.GetPointerCount());
339 EXPECT_FLOAT_EQ(radius_y, event.GetTouchMajor(3) / 2);
340 EXPECT_FLOAT_EQ(radius_x, event.GetTouchMinor(3) / 2);
341 EXPECT_FLOAT_EQ(rotation_angle, event.GetOrientation(3) * 180 / M_PI + 180);
342 EXPECT_FLOAT_EQ(pressure, event.GetPressure(3));
308 } 343 }
309 344
310 TEST(MotionEventImplTest, Timestamps) { 345 TEST(MotionEventAuraTest, Timestamps) {
311 // Test that timestamp information is stored and converted correctly. 346 // Test that timestamp information is stored and converted correctly.
312 MotionEventImpl event; 347 MotionEventAura event;
313 int ids[] = {7, 13}; 348 int ids[] = {7, 13};
314 int times_in_ms[] = {59436, 60263, 82175}; 349 int times_in_ms[] = {59436, 60263, 82175};
315 350
316 TouchEvent press0 = TouchWithTime( 351 TouchEvent press0 = TouchWithTime(
317 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]); 352 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]);
318 event.OnTouch(press0); 353 EXPECT_TRUE(event.OnTouch(press0));
319 EXPECT_EQ(MsToTicks(times_in_ms[0]), event.GetEventTime()); 354 EXPECT_EQ(MsToTicks(times_in_ms[0]), event.GetEventTime());
320 355
321 TouchEvent press1 = TouchWithTime( 356 TouchEvent press1 = TouchWithTime(
322 ui::ET_TOUCH_PRESSED, ids[1], times_in_ms[1]); 357 ui::ET_TOUCH_PRESSED, ids[1], times_in_ms[1]);
323 event.OnTouch(press1); 358 EXPECT_TRUE(event.OnTouch(press1));
324 EXPECT_EQ(MsToTicks(times_in_ms[1]), event.GetEventTime()); 359 EXPECT_EQ(MsToTicks(times_in_ms[1]), event.GetEventTime());
325 360
326 TouchEvent move0 = TouchWithTime( 361 TouchEvent move0 = TouchWithTime(
327 ui::ET_TOUCH_MOVED, ids[0], times_in_ms[2]); 362 ui::ET_TOUCH_MOVED, ids[0], times_in_ms[2]);
328 event.OnTouch(move0); 363 move0.set_location(gfx::PointF(12, 21));
364 EXPECT_TRUE(event.OnTouch(move0));
329 EXPECT_EQ(MsToTicks(times_in_ms[2]), event.GetEventTime()); 365 EXPECT_EQ(MsToTicks(times_in_ms[2]), event.GetEventTime());
330 366
331 // Test cloning of timestamp information. 367 // Test cloning of timestamp information.
332 scoped_ptr<MotionEvent> clone = event.Clone(); 368 scoped_ptr<MotionEvent> clone = event.Clone();
333 EXPECT_EQ(MsToTicks(times_in_ms[2]), clone->GetEventTime()); 369 EXPECT_EQ(MsToTicks(times_in_ms[2]), clone->GetEventTime());
334 } 370 }
335 371
336 TEST(MotionEventImplTest, CachedAction) { 372 TEST(MotionEventAuraTest, CachedAction) {
337 // Test that the cached action and cached action index are correct. 373 // Test that the cached action and cached action index are correct.
338 int ids[] = {4, 6}; 374 int ids[] = {4, 6};
339 MotionEventImpl event; 375 MotionEventAura event;
340 376
341 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); 377 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
342 event.OnTouch(press0); 378 EXPECT_TRUE(event.OnTouch(press0));
343 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); 379 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
344 EXPECT_EQ(1U, event.GetPointerCount()); 380 EXPECT_EQ(1U, event.GetPointerCount());
345 381
346 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); 382 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
347 event.OnTouch(press1); 383 EXPECT_TRUE(event.OnTouch(press1));
348 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); 384 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
349 EXPECT_EQ(1, event.GetActionIndex()); 385 EXPECT_EQ(1, event.GetActionIndex());
350 EXPECT_EQ(2U, event.GetPointerCount()); 386 EXPECT_EQ(2U, event.GetPointerCount());
351 387
352 // Test cloning of CachedAction information. 388 // Test cloning of CachedAction information.
353 scoped_ptr<MotionEvent> clone = event.Clone(); 389 scoped_ptr<MotionEvent> clone = event.Clone();
354 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, clone->GetAction()); 390 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, clone->GetAction());
355 EXPECT_EQ(1, clone->GetActionIndex()); 391 EXPECT_EQ(1, clone->GetActionIndex());
356 392
357 TouchEvent move0 = TouchWithType(ET_TOUCH_MOVED, ids[0]); 393 TouchEvent move0 = TouchWithType(ET_TOUCH_MOVED, ids[0]);
358 event.OnTouch(move0); 394 move0.set_location(gfx::PointF(10, 12));
395 EXPECT_TRUE(event.OnTouch(move0));
359 EXPECT_EQ(MotionEvent::ACTION_MOVE, event.GetAction()); 396 EXPECT_EQ(MotionEvent::ACTION_MOVE, event.GetAction());
360 EXPECT_EQ(2U, event.GetPointerCount()); 397 EXPECT_EQ(2U, event.GetPointerCount());
361 398
362 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); 399 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]);
363 event.OnTouch(release0); 400 EXPECT_TRUE(event.OnTouch(release0));
364 EXPECT_EQ(MotionEvent::ACTION_POINTER_UP, event.GetAction()); 401 EXPECT_EQ(MotionEvent::ACTION_POINTER_UP, event.GetAction());
365 EXPECT_EQ(2U, event.GetPointerCount()); 402 EXPECT_EQ(2U, event.GetPointerCount());
366 event.CleanupRemovedTouchPoints(release0); 403 event.CleanupRemovedTouchPoints(release0);
367 EXPECT_EQ(1U, event.GetPointerCount()); 404 EXPECT_EQ(1U, event.GetPointerCount());
368 405
369 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); 406 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]);
370 event.OnTouch(release1); 407 EXPECT_TRUE(event.OnTouch(release1));
371 EXPECT_EQ(MotionEvent::ACTION_UP, event.GetAction()); 408 EXPECT_EQ(MotionEvent::ACTION_UP, event.GetAction());
372 EXPECT_EQ(1U, event.GetPointerCount()); 409 EXPECT_EQ(1U, event.GetPointerCount());
373 event.CleanupRemovedTouchPoints(release1); 410 event.CleanupRemovedTouchPoints(release1);
374 EXPECT_EQ(0U, event.GetPointerCount()); 411 EXPECT_EQ(0U, event.GetPointerCount());
375 } 412 }
376 413
377 TEST(MotionEventImplTest, Cancel) { 414 TEST(MotionEventAuraTest, Cancel) {
378 int ids[] = {4, 6}; 415 int ids[] = {4, 6};
379 MotionEventImpl event; 416 MotionEventAura event;
380 417
381 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); 418 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
382 event.OnTouch(press0); 419 EXPECT_TRUE(event.OnTouch(press0));
383 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); 420 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
384 EXPECT_EQ(1U, event.GetPointerCount()); 421 EXPECT_EQ(1U, event.GetPointerCount());
385 422
386 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); 423 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
387 event.OnTouch(press1); 424 EXPECT_TRUE(event.OnTouch(press1));
388 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); 425 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
389 EXPECT_EQ(1, event.GetActionIndex()); 426 EXPECT_EQ(1, event.GetActionIndex());
390 EXPECT_EQ(2U, event.GetPointerCount()); 427 EXPECT_EQ(2U, event.GetPointerCount());
391 428
392 scoped_ptr<MotionEvent> cancel = event.Cancel(); 429 scoped_ptr<MotionEvent> cancel = event.Cancel();
393 EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel->GetAction()); 430 EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel->GetAction());
394 EXPECT_EQ(2U, static_cast<MotionEventImpl*>(cancel.get())->GetPointerCount()); 431 EXPECT_EQ(2U, cancel->GetPointerCount());
395 } 432 }
396 433
397 TEST(MotionEventImplTest, ToolType) { 434 TEST(MotionEventAuraTest, ToolType) {
398 MotionEventImpl event; 435 MotionEventAura event;
399 436
400 // For now, all pointers have an unknown tool type. 437 // For now, all pointers have an unknown tool type.
401 // TODO(jdduke): Expand this test when ui::TouchEvent identifies the source 438 // TODO(jdduke): Expand this test when ui::TouchEvent identifies the source
402 // touch type, crbug.com/404128. 439 // touch type, crbug.com/404128.
403 event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, 7)); 440 EXPECT_TRUE(event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, 7)));
404 ASSERT_EQ(1U, event.GetPointerCount()); 441 ASSERT_EQ(1U, event.GetPointerCount());
405 EXPECT_EQ(MotionEvent::TOOL_TYPE_UNKNOWN, event.GetToolType(0)); 442 EXPECT_EQ(MotionEvent::TOOL_TYPE_UNKNOWN, event.GetToolType(0));
406 } 443 }
407 444
408 TEST(MotionEventImplTest, Flags) { 445 TEST(MotionEventAuraTest, Flags) {
409 int ids[] = {7, 11}; 446 int ids[] = {7, 11};
410 MotionEventImpl event; 447 MotionEventAura event;
411 448
412 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); 449 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]);
413 press0.set_flags(EF_CONTROL_DOWN); 450 press0.set_flags(EF_CONTROL_DOWN);
414 event.OnTouch(press0); 451 EXPECT_TRUE(event.OnTouch(press0));
415 EXPECT_EQ(EF_CONTROL_DOWN, event.GetFlags()); 452 EXPECT_EQ(EF_CONTROL_DOWN, event.GetFlags());
416 453
417 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); 454 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]);
418 press1.set_flags(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN); 455 press1.set_flags(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN);
419 event.OnTouch(press1); 456 EXPECT_TRUE(event.OnTouch(press1));
420 EXPECT_EQ(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN, event.GetFlags()); 457 EXPECT_EQ(EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN, event.GetFlags());
421 } 458 }
422 459
460 // Once crbug.com/446852 is fixed, we should ignore redundant presses.
461 TEST(MotionEventAuraTest, DoesntIgnoreRedundantPresses) {
462 const int id = 7;
463 const int position_1 = 10;
464 const int position_2 = 23;
465
466 MotionEventAura event;
467 TouchEvent press1 = TouchWithPosition(ET_TOUCH_PRESSED, id, position_1,
468 position_1, position_1, position_1);
469 EXPECT_TRUE(event.OnTouch(press1));
470 TouchEvent press2 = TouchWithPosition(ET_TOUCH_PRESSED, id, position_2,
471 position_2, position_2, position_2);
472 EXPECT_TRUE(event.OnTouch(press2));
473
474 EXPECT_EQ(1U, event.GetPointerCount());
475 EXPECT_FLOAT_EQ(position_2, event.GetX(0));
476 }
477
478 TEST(MotionEventAuraTest, IgnoresEventsWithoutPress) {
479 int id = 7;
480 MotionEventAura event;
481 EXPECT_FALSE(event.OnTouch(TouchWithType(ET_TOUCH_MOVED, id)));
482 }
483
484 TEST(MotionEventAuraTest, IgnoresStationaryMoves) {
485 int id = 7;
486 MotionEventAura event;
487 EXPECT_TRUE(event.OnTouch(TouchWithType(ET_TOUCH_PRESSED, id)));
488 TouchEvent move0 = TouchWithPosition(ET_TOUCH_PRESSED, id, 10, 20, 10, 20);
489 EXPECT_TRUE(event.OnTouch(move0));
490
491 TouchEvent move1 = TouchWithPosition(ET_TOUCH_MOVED, id, 11, 21, 11, 21);
492 EXPECT_TRUE(event.OnTouch(move1));
493 EXPECT_FALSE(event.OnTouch(move1));
494 }
495
496 // Test after converting touch events into motion events, motion events should
497 // have the same unique_event_id as touch events.
498 TEST(MotionEventAuraTest, UniqueEventID) {
499 MotionEventAura event;
500
501 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, 3);
502 EXPECT_TRUE(event.OnTouch(press0));
503 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction());
504 ASSERT_EQ(1U, event.GetPointerCount());
505 EXPECT_EQ(event.GetUniqueEventId(), press0.unique_event_id());
506
507 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, 6);
508 EXPECT_TRUE(event.OnTouch(press1));
509 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
510 EXPECT_EQ(2U, event.GetPointerCount());
511 EXPECT_EQ(event.GetUniqueEventId(), press1.unique_event_id());
512 }
513
423 } // namespace ui 514 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/gestures/motion_event_impl.cc ('k') | ui/events/input_device_event_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698