OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "testing/gtest/include/gtest/gtest.h" | |
6 #include "ui/events/event.h" | |
7 #include "ui/events/gestures/motion_event_aura.h" | |
8 | |
9 namespace { | |
10 | |
11 ui::TouchEvent TouchWithType(ui::EventType type, int id) { | |
12 return ui::TouchEvent( | |
13 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(0)); | |
14 } | |
15 | |
16 ui::TouchEvent TouchWithPosition(ui::EventType type, | |
17 int id, | |
18 float x, | |
19 float y, | |
20 float radius, | |
21 float pressure) { | |
22 return ui::TouchEvent(type, | |
23 gfx::PointF(x, y), | |
24 0, | |
25 id, | |
26 base::TimeDelta::FromMilliseconds(0), | |
27 radius, | |
28 radius, | |
29 0, | |
30 pressure); | |
31 } | |
32 | |
33 ui::TouchEvent TouchWithTime(ui::EventType type, int id, int ms) { | |
34 return ui::TouchEvent( | |
35 type, gfx::PointF(0, 0), id, base::TimeDelta::FromMilliseconds(ms)); | |
36 } | |
37 | |
38 base::TimeTicks MsToTicks(int ms) { | |
39 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(ms); | |
40 } | |
41 | |
42 } // namespace | |
43 | |
44 namespace ui { | |
45 | |
46 TEST(MotionEventAuraTest, PointerCountAndIds) { | |
47 // Test that |PointerCount()| returns the correct number of pointers, and ids | |
48 // are assigned correctly. | |
49 int ids[] = {4, 6, 1}; | |
50 | |
51 MotionEventAura event; | |
52 EXPECT_EQ(0U, event.GetPointerCount()); | |
53 | |
54 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); | |
55 event.OnTouch(press0); | |
56 EXPECT_EQ(1U, event.GetPointerCount()); | |
57 | |
58 EXPECT_EQ(ids[0], event.GetPointerId(0)); | |
59 | |
60 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); | |
61 event.OnTouch(press1); | |
62 EXPECT_EQ(2U, event.GetPointerCount()); | |
63 | |
64 EXPECT_EQ(ids[0], event.GetPointerId(0)); | |
65 EXPECT_EQ(ids[1], event.GetPointerId(1)); | |
66 | |
67 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]); | |
68 event.OnTouch(press2); | |
69 EXPECT_EQ(3U, event.GetPointerCount()); | |
70 | |
71 EXPECT_EQ(ids[0], event.GetPointerId(0)); | |
72 EXPECT_EQ(ids[1], event.GetPointerId(1)); | |
73 EXPECT_EQ(ids[2], event.GetPointerId(2)); | |
74 | |
75 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); | |
76 event.OnTouch(release1); | |
77 event.CleanupRemovedTouchPoints(release1); | |
78 EXPECT_EQ(2U, event.GetPointerCount()); | |
79 | |
80 EXPECT_EQ(ids[0], event.GetPointerId(0)); | |
81 EXPECT_EQ(ids[2], event.GetPointerId(1)); | |
82 | |
83 // Test cloning of pointer count and id information. | |
84 scoped_ptr<MotionEvent> clone = event.Clone(); | |
85 EXPECT_EQ(2U, clone->GetPointerCount()); | |
86 EXPECT_EQ(ids[0], clone->GetPointerId(0)); | |
87 EXPECT_EQ(ids[2], clone->GetPointerId(1)); | |
88 | |
89 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); | |
90 event.OnTouch(release0); | |
91 event.CleanupRemovedTouchPoints(release0); | |
92 EXPECT_EQ(1U, event.GetPointerCount()); | |
93 | |
94 EXPECT_EQ(ids[2], event.GetPointerId(0)); | |
95 | |
96 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[2]); | |
97 event.OnTouch(release2); | |
98 event.CleanupRemovedTouchPoints(release2); | |
99 EXPECT_EQ(0U, event.GetPointerCount()); | |
100 } | |
101 | |
102 TEST(MotionEventAuraTest, GetActionIndexAfterRemoval) { | |
103 // Test that |GetActionIndex()| returns the correct index when points have | |
104 // been removed. | |
105 int ids[] = {4, 6, 9}; | |
106 | |
107 MotionEventAura event; | |
108 EXPECT_EQ(0U, event.GetPointerCount()); | |
109 | |
110 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); | |
111 event.OnTouch(press0); | |
112 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); | |
113 event.OnTouch(press1); | |
114 TouchEvent press2 = TouchWithType(ET_TOUCH_PRESSED, ids[2]); | |
115 event.OnTouch(press2); | |
116 EXPECT_EQ(3U, event.GetPointerCount()); | |
117 | |
118 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); | |
119 event.OnTouch(release1); | |
120 event.CleanupRemovedTouchPoints(release1); | |
121 EXPECT_EQ(1, event.GetActionIndex()); | |
122 EXPECT_EQ(2U, event.GetPointerCount()); | |
123 | |
124 TouchEvent release2 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); | |
125 event.OnTouch(release2); | |
126 event.CleanupRemovedTouchPoints(release2); | |
127 EXPECT_EQ(0, event.GetActionIndex()); | |
128 EXPECT_EQ(1U, event.GetPointerCount()); | |
129 | |
130 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[2]); | |
131 event.OnTouch(release0); | |
132 event.CleanupRemovedTouchPoints(release0); | |
133 EXPECT_EQ(0U, event.GetPointerCount()); | |
134 } | |
135 | |
136 TEST(MotionEventAuraTest, PointerLocations) { | |
137 // Test that location information is stored correctly. | |
138 MotionEventAura event; | |
139 | |
140 int ids[] = {15, 13}; | |
141 float x; | |
142 float y; | |
143 float r; | |
144 float p; | |
145 | |
146 x = 14.4f; | |
147 y = 17.3f; | |
148 r = 25.7f; | |
149 p = 48.2f; | |
150 TouchEvent press0 = TouchWithPosition(ET_TOUCH_PRESSED, ids[0], x, y, r, p); | |
151 event.OnTouch(press0); | |
152 | |
153 EXPECT_EQ(1U, event.GetPointerCount()); | |
154 EXPECT_FLOAT_EQ(x, event.GetX(0)); | |
155 EXPECT_FLOAT_EQ(y, event.GetY(0)); | |
156 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(0) / 2); | |
157 EXPECT_FLOAT_EQ(p, event.GetPressure(0)); | |
158 | |
159 x = 17.8f; | |
160 y = 12.1f; | |
161 r = 21.2f; | |
162 p = 18.4f; | |
163 TouchEvent press1 = TouchWithPosition(ET_TOUCH_PRESSED, ids[1], x, y, r, p); | |
164 event.OnTouch(press1); | |
165 | |
166 EXPECT_EQ(2U, event.GetPointerCount()); | |
167 EXPECT_FLOAT_EQ(x, event.GetX(1)); | |
168 EXPECT_FLOAT_EQ(y, event.GetY(1)); | |
169 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(1) / 2); | |
170 EXPECT_FLOAT_EQ(p, event.GetPressure(1)); | |
171 | |
172 // Test cloning of pointer location information. | |
173 scoped_ptr<MotionEvent> clone = event.Clone(); | |
174 EXPECT_EQ(2U, clone->GetPointerCount()); | |
175 EXPECT_FLOAT_EQ(x, clone->GetX(1)); | |
176 EXPECT_FLOAT_EQ(y, clone->GetY(1)); | |
177 EXPECT_FLOAT_EQ(r, clone->GetTouchMajor(1) / 2); | |
178 EXPECT_FLOAT_EQ(p, clone->GetPressure(1)); | |
179 | |
180 x = 27.9f; | |
181 y = 22.3f; | |
182 r = 7.6f; | |
183 p = 82.1f; | |
184 TouchEvent move1 = TouchWithPosition(ET_TOUCH_MOVED, ids[1], x, y, r, p); | |
185 event.OnTouch(move1); | |
186 | |
187 EXPECT_FLOAT_EQ(x, event.GetX(1)); | |
188 EXPECT_FLOAT_EQ(y, event.GetY(1)); | |
189 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(1) / 2); | |
190 EXPECT_FLOAT_EQ(p, event.GetPressure(1)); | |
191 | |
192 | |
193 x = 34.6f; | |
194 y = 23.8f; | |
195 r = 12.9f; | |
196 p = 14.2f; | |
197 TouchEvent move0 = TouchWithPosition(ET_TOUCH_MOVED, ids[0], x, y, r, p); | |
198 event.OnTouch(move0); | |
199 | |
200 EXPECT_FLOAT_EQ(x, event.GetX(0)); | |
201 EXPECT_FLOAT_EQ(y, event.GetY(0)); | |
202 EXPECT_FLOAT_EQ(r, event.GetTouchMajor(0) / 2); | |
203 EXPECT_FLOAT_EQ(p, event.GetPressure(0)); | |
204 } | |
205 | |
206 TEST(MotionEventAuraTest, Timestamps) { | |
207 // Test that timestamp information is stored and converted correctly. | |
208 MotionEventAura event; | |
209 int ids[] = {7, 13}; | |
210 int times_in_ms[] = {59436, 60263, 82175}; | |
211 | |
212 TouchEvent press0 = TouchWithTime( | |
213 ui::ET_TOUCH_PRESSED, ids[0], times_in_ms[0]); | |
214 event.OnTouch(press0); | |
215 EXPECT_EQ(MsToTicks(times_in_ms[0]), event.GetEventTime()); | |
216 | |
217 TouchEvent press1 = TouchWithTime( | |
218 ui::ET_TOUCH_PRESSED, ids[1], times_in_ms[1]); | |
219 event.OnTouch(press1); | |
220 EXPECT_EQ(MsToTicks(times_in_ms[1]), event.GetEventTime()); | |
221 | |
222 TouchEvent move0 = TouchWithTime( | |
223 ui::ET_TOUCH_MOVED, ids[0], times_in_ms[2]); | |
224 event.OnTouch(move0); | |
225 EXPECT_EQ(MsToTicks(times_in_ms[2]), event.GetEventTime()); | |
226 | |
227 // Test cloning of timestamp information. | |
228 scoped_ptr<MotionEvent> clone = event.Clone(); | |
229 EXPECT_EQ(MsToTicks(times_in_ms[2]), clone->GetEventTime()); | |
230 } | |
231 | |
232 TEST(MotionEventAuraTest, CachedAction) { | |
233 // Test that the cached action and cached action index are correct. | |
234 int ids[] = {4, 6}; | |
235 MotionEventAura event; | |
236 | |
237 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); | |
238 event.OnTouch(press0); | |
239 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); | |
240 EXPECT_EQ(1U, event.GetPointerCount()); | |
241 | |
242 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); | |
243 event.OnTouch(press1); | |
244 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); | |
245 EXPECT_EQ(1, event.GetActionIndex()); | |
246 EXPECT_EQ(2U, event.GetPointerCount()); | |
247 | |
248 // Test cloning of CachedAction information. | |
249 scoped_ptr<MotionEvent> clone = event.Clone(); | |
250 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, clone->GetAction()); | |
251 EXPECT_EQ(1, clone->GetActionIndex()); | |
252 | |
253 TouchEvent move0 = TouchWithType(ET_TOUCH_MOVED, ids[0]); | |
254 event.OnTouch(move0); | |
255 EXPECT_EQ(MotionEvent::ACTION_MOVE, event.GetAction()); | |
256 EXPECT_EQ(2U, event.GetPointerCount()); | |
257 | |
258 TouchEvent release0 = TouchWithType(ET_TOUCH_RELEASED, ids[0]); | |
259 event.OnTouch(release0); | |
260 EXPECT_EQ(MotionEvent::ACTION_POINTER_UP, event.GetAction()); | |
261 EXPECT_EQ(2U, event.GetPointerCount()); | |
262 event.CleanupRemovedTouchPoints(release0); | |
263 EXPECT_EQ(1U, event.GetPointerCount()); | |
264 | |
265 TouchEvent release1 = TouchWithType(ET_TOUCH_RELEASED, ids[1]); | |
266 event.OnTouch(release1); | |
267 EXPECT_EQ(MotionEvent::ACTION_UP, event.GetAction()); | |
268 EXPECT_EQ(1U, event.GetPointerCount()); | |
269 event.CleanupRemovedTouchPoints(release1); | |
270 EXPECT_EQ(0U, event.GetPointerCount()); | |
271 } | |
272 | |
273 TEST(MotionEventAuraTest, Cancel) { | |
274 int ids[] = {4, 6}; | |
275 MotionEventAura event; | |
276 | |
277 TouchEvent press0 = TouchWithType(ET_TOUCH_PRESSED, ids[0]); | |
278 event.OnTouch(press0); | |
279 EXPECT_EQ(MotionEvent::ACTION_DOWN, event.GetAction()); | |
280 EXPECT_EQ(1U, event.GetPointerCount()); | |
281 | |
282 TouchEvent press1 = TouchWithType(ET_TOUCH_PRESSED, ids[1]); | |
283 event.OnTouch(press1); | |
284 EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction()); | |
285 EXPECT_EQ(1, event.GetActionIndex()); | |
286 EXPECT_EQ(2U, event.GetPointerCount()); | |
287 | |
288 scoped_ptr<MotionEvent> cancel = event.Cancel(); | |
289 EXPECT_EQ(MotionEvent::ACTION_CANCEL, cancel->GetAction()); | |
290 EXPECT_EQ(2U, static_cast<MotionEventAura*>(cancel.get())->GetPointerCount()); | |
291 } | |
292 | |
293 } // namespace ui | |
OLD | NEW |