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