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 #include <errno.h> | 5 #include <errno.h> |
6 #include <fcntl.h> | 6 #include <fcntl.h> |
7 #include <linux/input.h> | 7 #include <linux/input.h> |
8 #include <unistd.h> | 8 #include <unistd.h> |
9 | 9 |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
14 #include "base/memory/scoped_vector.h" | 14 #include "base/memory/scoped_vector.h" |
15 #include "base/posix/eintr_wrapper.h" | 15 #include "base/posix/eintr_wrapper.h" |
16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "ui/events/devices/device_data_manager.h" | 19 #include "ui/events/devices/device_data_manager.h" |
| 20 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" |
20 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" | 21 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" |
21 #include "ui/events/platform/platform_event_dispatcher.h" | 22 #include "ui/events/platform/platform_event_dispatcher.h" |
22 #include "ui/events/platform/platform_event_source.h" | 23 #include "ui/events/platform/platform_event_source.h" |
23 | 24 |
24 namespace { | 25 namespace { |
25 | 26 |
26 static int SetNonBlocking(int fd) { | 27 static int SetNonBlocking(int fd) { |
27 int flags = fcntl(fd, F_GETFL, 0); | 28 int flags = fcntl(fd, F_GETFL, 0); |
28 if (flags == -1) | 29 if (flags == -1) |
29 flags = 0; | 30 flags = 0; |
30 return fcntl(fd, F_SETFL, flags | O_NONBLOCK); | 31 return fcntl(fd, F_SETFL, flags | O_NONBLOCK); |
31 } | 32 } |
32 | 33 |
33 const char kTestDevicePath[] = "/dev/input/test-device"; | 34 const char kTestDevicePath[] = "/dev/input/test-device"; |
34 | 35 |
35 } // namespace | 36 } // namespace |
36 | 37 |
37 namespace ui { | 38 namespace ui { |
38 | 39 |
39 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev { | 40 class MockTouchEventConverterEvdev : public TouchEventConverterEvdev { |
40 public: | 41 public: |
41 MockTouchEventConverterEvdev(int fd, base::FilePath path); | 42 MockTouchEventConverterEvdev(int fd, |
| 43 base::FilePath path, |
| 44 DeviceEventDispatcherEvdev* dispatcher); |
42 ~MockTouchEventConverterEvdev() override {} | 45 ~MockTouchEventConverterEvdev() override {} |
43 | 46 |
44 void ConfigureReadMock(struct input_event* queue, | 47 void ConfigureReadMock(struct input_event* queue, |
45 long read_this_many, | 48 long read_this_many, |
46 long queue_index); | 49 long queue_index); |
47 | 50 |
48 unsigned size() { return dispatched_events_.size(); } | |
49 const TouchEventParams& event(unsigned index) { | |
50 DCHECK_GT(dispatched_events_.size(), index); | |
51 return dispatched_events_[index]; | |
52 } | |
53 | |
54 // Actually dispatch the event reader code. | 51 // Actually dispatch the event reader code. |
55 void ReadNow() { | 52 void ReadNow() { |
56 OnFileCanReadWithoutBlocking(read_pipe_); | 53 OnFileCanReadWithoutBlocking(read_pipe_); |
57 base::RunLoop().RunUntilIdle(); | 54 base::RunLoop().RunUntilIdle(); |
58 } | 55 } |
59 | 56 |
60 void DispatchCallback(const TouchEventParams& params) { | |
61 dispatched_events_.push_back(params); | |
62 } | |
63 | |
64 void Initialize(const EventDeviceInfo& device_info) override {} | 57 void Initialize(const EventDeviceInfo& device_info) override {} |
65 bool Reinitialize() override { return true; } | 58 bool Reinitialize() override { return true; } |
66 | 59 |
67 private: | 60 private: |
68 int read_pipe_; | 61 int read_pipe_; |
69 int write_pipe_; | 62 int write_pipe_; |
70 | 63 |
71 std::vector<TouchEventParams> dispatched_events_; | |
72 | |
73 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev); | 64 DISALLOW_COPY_AND_ASSIGN(MockTouchEventConverterEvdev); |
74 }; | 65 }; |
75 | 66 |
76 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev(int fd, | 67 class MockDeviceEventDispatcherEvdev : public DeviceEventDispatcherEvdev { |
77 base::FilePath path) | 68 public: |
78 : TouchEventConverterEvdev( | 69 MockDeviceEventDispatcherEvdev( |
79 fd, | 70 const base::Callback<void(const TouchEventParams& params)>& callback) |
80 path, | 71 : callback_(callback) {} |
81 1, | 72 ~MockDeviceEventDispatcherEvdev() {} |
82 INPUT_DEVICE_UNKNOWN, | 73 |
83 base::Bind(&MockTouchEventConverterEvdev::DispatchCallback, | 74 // DeviceEventDispatcherEvdev: |
84 base::Unretained(this))) { | 75 void DispatchKeyEvent(int device_id, unsigned int code, bool down) override {} |
| 76 void DispatchMouseMoveEvent(int device_id, |
| 77 const gfx::PointF& location) override {} |
| 78 void DispatchMouseButtonEvent(int device_id, |
| 79 const gfx::PointF& location, |
| 80 unsigned int button, |
| 81 bool down, |
| 82 bool allow_remap) override {} |
| 83 void DispatchMouseWheelEvent(int device_id, |
| 84 const gfx::PointF& location, |
| 85 const gfx::Vector2d& delta) override {} |
| 86 void DispatchScrollEvent(const ScrollEventParams& params) override {} |
| 87 void DispatchTouchEvent(const TouchEventParams& params) override { |
| 88 callback_.Run(params); |
| 89 } |
| 90 |
| 91 private: |
| 92 base::Callback<void(const TouchEventParams& params)> callback_; |
| 93 }; |
| 94 |
| 95 MockTouchEventConverterEvdev::MockTouchEventConverterEvdev( |
| 96 int fd, |
| 97 base::FilePath path, |
| 98 DeviceEventDispatcherEvdev* dispatcher) |
| 99 : TouchEventConverterEvdev(fd, path, 1, INPUT_DEVICE_UNKNOWN, dispatcher) { |
85 pressure_min_ = 30; | 100 pressure_min_ = 30; |
86 pressure_max_ = 60; | 101 pressure_max_ = 60; |
87 | 102 |
88 // TODO(rjkroege): Check test axes. | 103 // TODO(rjkroege): Check test axes. |
89 x_min_tuxels_ = 0; | 104 x_min_tuxels_ = 0; |
90 x_num_tuxels_ = std::numeric_limits<int>::max(); | 105 x_num_tuxels_ = std::numeric_limits<int>::max(); |
91 y_min_tuxels_ = 0; | 106 y_min_tuxels_ = 0; |
92 y_num_tuxels_ = std::numeric_limits<int>::max(); | 107 y_num_tuxels_ = std::numeric_limits<int>::max(); |
93 | 108 |
94 int fds[2]; | 109 int fds[2]; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 // Set up pipe to satisfy message pump (unused). | 142 // Set up pipe to satisfy message pump (unused). |
128 int evdev_io[2]; | 143 int evdev_io[2]; |
129 if (pipe(evdev_io)) | 144 if (pipe(evdev_io)) |
130 PLOG(FATAL) << "failed pipe"; | 145 PLOG(FATAL) << "failed pipe"; |
131 events_in_ = evdev_io[0]; | 146 events_in_ = evdev_io[0]; |
132 events_out_ = evdev_io[1]; | 147 events_out_ = evdev_io[1]; |
133 | 148 |
134 // Device creation happens on a worker thread since it may involve blocking | 149 // Device creation happens on a worker thread since it may involve blocking |
135 // operations. Simulate that by creating it before creating a UI message | 150 // operations. Simulate that by creating it before creating a UI message |
136 // loop. | 151 // loop. |
| 152 dispatcher_.reset(new ui::MockDeviceEventDispatcherEvdev( |
| 153 base::Bind(&TouchEventConverterEvdevTest::DispatchCallback, |
| 154 base::Unretained(this)))); |
137 device_ = new ui::MockTouchEventConverterEvdev( | 155 device_ = new ui::MockTouchEventConverterEvdev( |
138 events_in_, base::FilePath(kTestDevicePath)); | 156 events_in_, base::FilePath(kTestDevicePath), dispatcher_.get()); |
139 loop_ = new base::MessageLoopForUI; | 157 loop_ = new base::MessageLoopForUI; |
140 | 158 |
141 ui::DeviceDataManager::CreateInstance(); | 159 ui::DeviceDataManager::CreateInstance(); |
142 } | 160 } |
143 | 161 |
144 void TearDown() override { | 162 void TearDown() override { |
145 delete device_; | 163 delete device_; |
146 delete loop_; | 164 delete loop_; |
147 } | 165 } |
148 | 166 |
149 ui::MockTouchEventConverterEvdev* device() { return device_; } | 167 ui::MockTouchEventConverterEvdev* device() { return device_; } |
150 | 168 |
| 169 unsigned size() { return dispatched_events_.size(); } |
| 170 const ui::TouchEventParams& dispatched_event(unsigned index) { |
| 171 DCHECK_GT(dispatched_events_.size(), index); |
| 172 return dispatched_events_[index]; |
| 173 } |
| 174 |
151 private: | 175 private: |
152 base::MessageLoop* loop_; | 176 base::MessageLoop* loop_; |
153 ui::MockTouchEventConverterEvdev* device_; | 177 ui::MockTouchEventConverterEvdev* device_; |
| 178 scoped_ptr<ui::MockDeviceEventDispatcherEvdev> dispatcher_; |
154 | 179 |
155 int events_out_; | 180 int events_out_; |
156 int events_in_; | 181 int events_in_; |
157 | 182 |
| 183 void DispatchCallback(const ui::TouchEventParams& params) { |
| 184 dispatched_events_.push_back(params); |
| 185 } |
| 186 std::vector<ui::TouchEventParams> dispatched_events_; |
| 187 |
158 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); | 188 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdevTest); |
159 }; | 189 }; |
160 | 190 |
161 // TODO(rjkroege): Test for valid handling of time stamps. | 191 // TODO(rjkroege): Test for valid handling of time stamps. |
162 TEST_F(TouchEventConverterEvdevTest, TouchDown) { | 192 TEST_F(TouchEventConverterEvdevTest, TouchDown) { |
163 ui::MockTouchEventConverterEvdev* dev = device(); | 193 ui::MockTouchEventConverterEvdev* dev = device(); |
164 | 194 |
165 struct input_event mock_kernel_queue[] = { | 195 struct input_event mock_kernel_queue[] = { |
166 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 196 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
167 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 197 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
168 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 198 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
169 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 199 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
170 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 200 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
171 }; | 201 }; |
172 | 202 |
173 dev->ConfigureReadMock(mock_kernel_queue, 1, 0); | 203 dev->ConfigureReadMock(mock_kernel_queue, 1, 0); |
174 dev->ReadNow(); | 204 dev->ReadNow(); |
175 EXPECT_EQ(0u, dev->size()); | 205 EXPECT_EQ(0u, size()); |
176 | 206 |
177 dev->ConfigureReadMock(mock_kernel_queue, 2, 1); | 207 dev->ConfigureReadMock(mock_kernel_queue, 2, 1); |
178 dev->ReadNow(); | 208 dev->ReadNow(); |
179 EXPECT_EQ(0u, dev->size()); | 209 EXPECT_EQ(0u, size()); |
180 | 210 |
181 dev->ConfigureReadMock(mock_kernel_queue, 3, 3); | 211 dev->ConfigureReadMock(mock_kernel_queue, 3, 3); |
182 dev->ReadNow(); | 212 dev->ReadNow(); |
183 EXPECT_EQ(1u, dev->size()); | 213 EXPECT_EQ(1u, size()); |
184 | 214 |
185 ui::TouchEventParams event = dev->event(0); | 215 ui::TouchEventParams event = dispatched_event(0); |
186 | 216 |
187 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); | 217 EXPECT_EQ(ui::ET_TOUCH_PRESSED, event.type); |
188 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 218 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
189 EXPECT_EQ(42, event.location.x()); | 219 EXPECT_EQ(42, event.location.x()); |
190 EXPECT_EQ(51, event.location.y()); | 220 EXPECT_EQ(51, event.location.y()); |
191 EXPECT_EQ(0, event.touch_id); | 221 EXPECT_EQ(0, event.touch_id); |
192 EXPECT_FLOAT_EQ(1.5f, event.radii.x()); | 222 EXPECT_FLOAT_EQ(1.5f, event.radii.x()); |
193 EXPECT_FLOAT_EQ(.5f, event.pressure); | 223 EXPECT_FLOAT_EQ(.5f, event.pressure); |
194 } | 224 } |
195 | 225 |
196 TEST_F(TouchEventConverterEvdevTest, NoEvents) { | 226 TEST_F(TouchEventConverterEvdevTest, NoEvents) { |
197 ui::MockTouchEventConverterEvdev* dev = device(); | 227 ui::MockTouchEventConverterEvdev* dev = device(); |
198 dev->ConfigureReadMock(NULL, 0, 0); | 228 dev->ConfigureReadMock(NULL, 0, 0); |
199 EXPECT_EQ(0u, dev->size()); | 229 EXPECT_EQ(0u, size()); |
200 } | 230 } |
201 | 231 |
202 TEST_F(TouchEventConverterEvdevTest, TouchMove) { | 232 TEST_F(TouchEventConverterEvdevTest, TouchMove) { |
203 ui::MockTouchEventConverterEvdev* dev = device(); | 233 ui::MockTouchEventConverterEvdev* dev = device(); |
204 | 234 |
205 struct input_event mock_kernel_queue_press[] = { | 235 struct input_event mock_kernel_queue_press[] = { |
206 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 236 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
207 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 237 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
208 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 238 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
209 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 239 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
210 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 240 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
211 }; | 241 }; |
212 | 242 |
213 struct input_event mock_kernel_queue_move1[] = { | 243 struct input_event mock_kernel_queue_move1[] = { |
214 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, | 244 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 50}, |
215 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 245 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
216 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 246 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 43}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
217 }; | 247 }; |
218 | 248 |
219 struct input_event mock_kernel_queue_move2[] = { | 249 struct input_event mock_kernel_queue_move2[] = { |
220 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 250 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 42}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
221 }; | 251 }; |
222 | 252 |
223 // Setup and discard a press. | 253 // Setup and discard a press. |
224 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); | 254 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); |
225 dev->ReadNow(); | 255 dev->ReadNow(); |
226 EXPECT_EQ(1u, dev->size()); | 256 EXPECT_EQ(1u, size()); |
227 | 257 |
228 dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); | 258 dev->ConfigureReadMock(mock_kernel_queue_move1, 4, 0); |
229 dev->ReadNow(); | 259 dev->ReadNow(); |
230 EXPECT_EQ(2u, dev->size()); | 260 EXPECT_EQ(2u, size()); |
231 ui::TouchEventParams event = dev->event(1); | 261 ui::TouchEventParams event = dispatched_event(1); |
232 | 262 |
233 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); | 263 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); |
234 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 264 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
235 EXPECT_EQ(42, event.location.x()); | 265 EXPECT_EQ(42, event.location.x()); |
236 EXPECT_EQ(43, event.location.y()); | 266 EXPECT_EQ(43, event.location.y()); |
237 EXPECT_EQ(0, event.touch_id); | 267 EXPECT_EQ(0, event.touch_id); |
238 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); | 268 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); |
239 | 269 |
240 dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0); | 270 dev->ConfigureReadMock(mock_kernel_queue_move2, 2, 0); |
241 dev->ReadNow(); | 271 dev->ReadNow(); |
242 EXPECT_EQ(3u, dev->size()); | 272 EXPECT_EQ(3u, size()); |
243 event = dev->event(2); | 273 event = dispatched_event(2); |
244 | 274 |
245 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); | 275 EXPECT_EQ(ui::ET_TOUCH_MOVED, event.type); |
246 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 276 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
247 EXPECT_EQ(42, event.location.x()); | 277 EXPECT_EQ(42, event.location.x()); |
248 EXPECT_EQ(42, event.location.y()); | 278 EXPECT_EQ(42, event.location.y()); |
249 EXPECT_EQ(0, event.touch_id); | 279 EXPECT_EQ(0, event.touch_id); |
250 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); | 280 EXPECT_FLOAT_EQ(2.f / 3.f, event.pressure); |
251 } | 281 } |
252 | 282 |
253 TEST_F(TouchEventConverterEvdevTest, TouchRelease) { | 283 TEST_F(TouchEventConverterEvdevTest, TouchRelease) { |
254 ui::MockTouchEventConverterEvdev* dev = device(); | 284 ui::MockTouchEventConverterEvdev* dev = device(); |
255 | 285 |
256 struct input_event mock_kernel_queue_press[] = { | 286 struct input_event mock_kernel_queue_press[] = { |
257 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 287 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
258 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 288 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
259 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 289 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
260 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 290 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
261 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 291 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
262 }; | 292 }; |
263 | 293 |
264 struct input_event mock_kernel_queue_release[] = { | 294 struct input_event mock_kernel_queue_release[] = { |
265 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 295 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
266 }; | 296 }; |
267 | 297 |
268 // Setup and discard a press. | 298 // Setup and discard a press. |
269 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); | 299 dev->ConfigureReadMock(mock_kernel_queue_press, 6, 0); |
270 dev->ReadNow(); | 300 dev->ReadNow(); |
271 EXPECT_EQ(1u, dev->size()); | 301 EXPECT_EQ(1u, size()); |
272 ui::TouchEventParams event = dev->event(0); | 302 ui::TouchEventParams event = dispatched_event(0); |
273 | 303 |
274 dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0); | 304 dev->ConfigureReadMock(mock_kernel_queue_release, 2, 0); |
275 dev->ReadNow(); | 305 dev->ReadNow(); |
276 EXPECT_EQ(2u, dev->size()); | 306 EXPECT_EQ(2u, size()); |
277 event = dev->event(1); | 307 event = dispatched_event(1); |
278 | 308 |
279 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); | 309 EXPECT_EQ(ui::ET_TOUCH_RELEASED, event.type); |
280 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); | 310 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), event.timestamp); |
281 EXPECT_EQ(42, event.location.x()); | 311 EXPECT_EQ(42, event.location.x()); |
282 EXPECT_EQ(51, event.location.y()); | 312 EXPECT_EQ(51, event.location.y()); |
283 EXPECT_EQ(0, event.touch_id); | 313 EXPECT_EQ(0, event.touch_id); |
284 EXPECT_FLOAT_EQ(.5f, event.pressure); | 314 EXPECT_FLOAT_EQ(.5f, event.pressure); |
285 } | 315 } |
286 | 316 |
287 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { | 317 TEST_F(TouchEventConverterEvdevTest, TwoFingerGesture) { |
288 ui::MockTouchEventConverterEvdev* dev = device(); | 318 ui::MockTouchEventConverterEvdev* dev = device(); |
289 | 319 |
290 struct input_event mock_kernel_queue_press0[] = { | 320 struct input_event mock_kernel_queue_press0[] = { |
291 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 321 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
292 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 322 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
293 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 323 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
294 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 324 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
295 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 325 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
296 }; | 326 }; |
297 // Setup and discard a press. | 327 // Setup and discard a press. |
298 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); | 328 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); |
299 dev->ReadNow(); | 329 dev->ReadNow(); |
300 EXPECT_EQ(1u, dev->size()); | 330 EXPECT_EQ(1u, size()); |
301 | 331 |
302 struct input_event mock_kernel_queue_move0[] = { | 332 struct input_event mock_kernel_queue_move0[] = { |
303 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 333 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
304 }; | 334 }; |
305 // Setup and discard a move. | 335 // Setup and discard a move. |
306 dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0); | 336 dev->ConfigureReadMock(mock_kernel_queue_move0, 2, 0); |
307 dev->ReadNow(); | 337 dev->ReadNow(); |
308 EXPECT_EQ(2u, dev->size()); | 338 EXPECT_EQ(2u, size()); |
309 | 339 |
310 struct input_event mock_kernel_queue_move0press1[] = { | 340 struct input_event mock_kernel_queue_move0press1[] = { |
311 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 341 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
312 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686}, | 342 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 686}, |
313 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 343 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
314 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 344 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
315 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101}, | 345 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 101}, |
316 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 346 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 102}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
317 }; | 347 }; |
318 // Move on 0, press on 1. | 348 // Move on 0, press on 1. |
319 dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0); | 349 dev->ConfigureReadMock(mock_kernel_queue_move0press1, 9, 0); |
320 dev->ReadNow(); | 350 dev->ReadNow(); |
321 EXPECT_EQ(4u, dev->size()); | 351 EXPECT_EQ(4u, size()); |
322 ui::TouchEventParams ev0 = dev->event(2); | 352 ui::TouchEventParams ev0 = dispatched_event(2); |
323 ui::TouchEventParams ev1 = dev->event(3); | 353 ui::TouchEventParams ev1 = dispatched_event(3); |
324 | 354 |
325 // Move | 355 // Move |
326 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 356 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
327 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 357 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
328 EXPECT_EQ(40, ev0.location.x()); | 358 EXPECT_EQ(40, ev0.location.x()); |
329 EXPECT_EQ(51, ev0.location.y()); | 359 EXPECT_EQ(51, ev0.location.y()); |
330 EXPECT_EQ(0, ev0.touch_id); | 360 EXPECT_EQ(0, ev0.touch_id); |
331 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 361 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
332 | 362 |
333 // Press | 363 // Press |
334 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); | 364 EXPECT_EQ(ui::ET_TOUCH_PRESSED, ev1.type); |
335 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 365 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
336 EXPECT_EQ(101, ev1.location.x()); | 366 EXPECT_EQ(101, ev1.location.x()); |
337 EXPECT_EQ(102, ev1.location.y()); | 367 EXPECT_EQ(102, ev1.location.y()); |
338 EXPECT_EQ(1, ev1.touch_id); | 368 EXPECT_EQ(1, ev1.touch_id); |
339 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 369 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
340 | 370 |
341 // Stationary 0, Moves 1. | 371 // Stationary 0, Moves 1. |
342 struct input_event mock_kernel_queue_stationary0_move1[] = { | 372 struct input_event mock_kernel_queue_stationary0_move1[] = { |
343 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 373 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
344 }; | 374 }; |
345 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); | 375 dev->ConfigureReadMock(mock_kernel_queue_stationary0_move1, 2, 0); |
346 dev->ReadNow(); | 376 dev->ReadNow(); |
347 EXPECT_EQ(5u, dev->size()); | 377 EXPECT_EQ(5u, size()); |
348 ev1 = dev->event(4); | 378 ev1 = dispatched_event(4); |
349 | 379 |
350 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 380 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
351 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 381 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
352 EXPECT_EQ(40, ev1.location.x()); | 382 EXPECT_EQ(40, ev1.location.x()); |
353 EXPECT_EQ(102, ev1.location.y()); | 383 EXPECT_EQ(102, ev1.location.y()); |
354 EXPECT_EQ(1, ev1.touch_id); | 384 EXPECT_EQ(1, ev1.touch_id); |
355 | 385 |
356 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 386 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
357 | 387 |
358 // Move 0, stationary 1. | 388 // Move 0, stationary 1. |
359 struct input_event mock_kernel_queue_move0_stationary1[] = { | 389 struct input_event mock_kernel_queue_move0_stationary1[] = { |
360 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, | 390 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 39}, |
361 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 391 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
362 }; | 392 }; |
363 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); | 393 dev->ConfigureReadMock(mock_kernel_queue_move0_stationary1, 3, 0); |
364 dev->ReadNow(); | 394 dev->ReadNow(); |
365 EXPECT_EQ(6u, dev->size()); | 395 EXPECT_EQ(6u, size()); |
366 ev0 = dev->event(5); | 396 ev0 = dispatched_event(5); |
367 | 397 |
368 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); | 398 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev0.type); |
369 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 399 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
370 EXPECT_EQ(39, ev0.location.x()); | 400 EXPECT_EQ(39, ev0.location.x()); |
371 EXPECT_EQ(51, ev0.location.y()); | 401 EXPECT_EQ(51, ev0.location.y()); |
372 EXPECT_EQ(0, ev0.touch_id); | 402 EXPECT_EQ(0, ev0.touch_id); |
373 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 403 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
374 | 404 |
375 // Release 0, move 1. | 405 // Release 0, move 1. |
376 struct input_event mock_kernel_queue_release0_move1[] = { | 406 struct input_event mock_kernel_queue_release0_move1[] = { |
377 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, | 407 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, |
378 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 408 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 38}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
379 }; | 409 }; |
380 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); | 410 dev->ConfigureReadMock(mock_kernel_queue_release0_move1, 4, 0); |
381 dev->ReadNow(); | 411 dev->ReadNow(); |
382 EXPECT_EQ(8u, dev->size()); | 412 EXPECT_EQ(8u, size()); |
383 ev0 = dev->event(6); | 413 ev0 = dispatched_event(6); |
384 ev1 = dev->event(7); | 414 ev1 = dispatched_event(7); |
385 | 415 |
386 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); | 416 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev0.type); |
387 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); | 417 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev0.timestamp); |
388 EXPECT_EQ(39, ev0.location.x()); | 418 EXPECT_EQ(39, ev0.location.x()); |
389 EXPECT_EQ(51, ev0.location.y()); | 419 EXPECT_EQ(51, ev0.location.y()); |
390 EXPECT_EQ(0, ev0.touch_id); | 420 EXPECT_EQ(0, ev0.touch_id); |
391 EXPECT_FLOAT_EQ(.5f, ev0.pressure); | 421 EXPECT_FLOAT_EQ(.5f, ev0.pressure); |
392 | 422 |
393 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); | 423 EXPECT_EQ(ui::ET_TOUCH_MOVED, ev1.type); |
394 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 424 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
395 EXPECT_EQ(38, ev1.location.x()); | 425 EXPECT_EQ(38, ev1.location.x()); |
396 EXPECT_EQ(102, ev1.location.y()); | 426 EXPECT_EQ(102, ev1.location.y()); |
397 EXPECT_EQ(1, ev1.touch_id); | 427 EXPECT_EQ(1, ev1.touch_id); |
398 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 428 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
399 | 429 |
400 // Release 1. | 430 // Release 1. |
401 struct input_event mock_kernel_queue_release1[] = { | 431 struct input_event mock_kernel_queue_release1[] = { |
402 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 432 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, -1}, {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
403 }; | 433 }; |
404 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); | 434 dev->ConfigureReadMock(mock_kernel_queue_release1, 2, 0); |
405 dev->ReadNow(); | 435 dev->ReadNow(); |
406 EXPECT_EQ(9u, dev->size()); | 436 EXPECT_EQ(9u, size()); |
407 ev1 = dev->event(8); | 437 ev1 = dispatched_event(8); |
408 | 438 |
409 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); | 439 EXPECT_EQ(ui::ET_TOUCH_RELEASED, ev1.type); |
410 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); | 440 EXPECT_EQ(base::TimeDelta::FromMicroseconds(0), ev1.timestamp); |
411 EXPECT_EQ(38, ev1.location.x()); | 441 EXPECT_EQ(38, ev1.location.x()); |
412 EXPECT_EQ(102, ev1.location.y()); | 442 EXPECT_EQ(102, ev1.location.y()); |
413 EXPECT_EQ(1, ev1.touch_id); | 443 EXPECT_EQ(1, ev1.touch_id); |
414 EXPECT_FLOAT_EQ(.5f, ev1.pressure); | 444 EXPECT_FLOAT_EQ(.5f, ev1.pressure); |
415 } | 445 } |
416 | 446 |
417 TEST_F(TouchEventConverterEvdevTest, TypeA) { | 447 TEST_F(TouchEventConverterEvdevTest, TypeA) { |
418 ui::MockTouchEventConverterEvdev* dev = device(); | 448 ui::MockTouchEventConverterEvdev* dev = device(); |
419 | 449 |
420 struct input_event mock_kernel_queue_press0[] = { | 450 struct input_event mock_kernel_queue_press0[] = { |
421 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 451 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
422 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 452 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
423 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 453 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
424 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, | 454 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, |
425 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, | 455 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, |
426 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 456 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
427 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 61}, | 457 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 61}, |
428 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 71}, | 458 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 71}, |
429 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, | 459 {{0, 0}, EV_SYN, SYN_MT_REPORT, 0}, |
430 {{0, 0}, EV_SYN, SYN_REPORT, 0} | 460 {{0, 0}, EV_SYN, SYN_REPORT, 0} |
431 }; | 461 }; |
432 | 462 |
433 // Check that two events are generated. | 463 // Check that two events are generated. |
434 dev->ConfigureReadMock(mock_kernel_queue_press0, 10, 0); | 464 dev->ConfigureReadMock(mock_kernel_queue_press0, 10, 0); |
435 dev->ReadNow(); | 465 dev->ReadNow(); |
436 EXPECT_EQ(2u, dev->size()); | 466 EXPECT_EQ(2u, size()); |
437 } | 467 } |
438 | 468 |
439 TEST_F(TouchEventConverterEvdevTest, Unsync) { | 469 TEST_F(TouchEventConverterEvdevTest, Unsync) { |
440 ui::MockTouchEventConverterEvdev* dev = device(); | 470 ui::MockTouchEventConverterEvdev* dev = device(); |
441 | 471 |
442 struct input_event mock_kernel_queue_press0[] = { | 472 struct input_event mock_kernel_queue_press0[] = { |
443 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, | 473 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 684}, |
444 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, | 474 {{0, 0}, EV_ABS, ABS_MT_TOUCH_MAJOR, 3}, |
445 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, | 475 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 45}, |
446 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, | 476 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 42}, |
447 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 477 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 51}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
448 }; | 478 }; |
449 | 479 |
450 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); | 480 dev->ConfigureReadMock(mock_kernel_queue_press0, 6, 0); |
451 dev->ReadNow(); | 481 dev->ReadNow(); |
452 EXPECT_EQ(1u, dev->size()); | 482 EXPECT_EQ(1u, size()); |
453 | 483 |
454 // Prepare a move with a drop. | 484 // Prepare a move with a drop. |
455 struct input_event mock_kernel_queue_move0[] = { | 485 struct input_event mock_kernel_queue_move0[] = { |
456 {{0, 0}, EV_SYN, SYN_DROPPED, 0}, | 486 {{0, 0}, EV_SYN, SYN_DROPPED, 0}, |
457 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 487 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
458 }; | 488 }; |
459 | 489 |
460 // Verify that we didn't receive it/ | 490 // Verify that we didn't receive it/ |
461 dev->ConfigureReadMock(mock_kernel_queue_move0, 3, 0); | 491 dev->ConfigureReadMock(mock_kernel_queue_move0, 3, 0); |
462 dev->ReadNow(); | 492 dev->ReadNow(); |
463 EXPECT_EQ(1u, dev->size()); | 493 EXPECT_EQ(1u, size()); |
464 | 494 |
465 struct input_event mock_kernel_queue_move1[] = { | 495 struct input_event mock_kernel_queue_move1[] = { |
466 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} | 496 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 40}, {{0, 0}, EV_SYN, SYN_REPORT, 0} |
467 }; | 497 }; |
468 | 498 |
469 // Verify that it re-syncs after a SYN_REPORT. | 499 // Verify that it re-syncs after a SYN_REPORT. |
470 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0); | 500 dev->ConfigureReadMock(mock_kernel_queue_move1, 2, 0); |
471 dev->ReadNow(); | 501 dev->ReadNow(); |
472 EXPECT_EQ(2u, dev->size()); | 502 EXPECT_EQ(2u, size()); |
473 } | 503 } |
474 | 504 |
475 // crbug.com/407386 | 505 // crbug.com/407386 |
476 TEST_F(TouchEventConverterEvdevTest, | 506 TEST_F(TouchEventConverterEvdevTest, |
477 DontChangeMultitouchPositionFromLegacyAxes) { | 507 DontChangeMultitouchPositionFromLegacyAxes) { |
478 ui::MockTouchEventConverterEvdev* dev = device(); | 508 ui::MockTouchEventConverterEvdev* dev = device(); |
479 | 509 |
480 struct input_event mock_kernel_queue[] = { | 510 struct input_event mock_kernel_queue[] = { |
481 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, | 511 {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, |
482 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, | 512 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, |
483 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, | 513 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, |
484 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, | 514 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, |
485 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, | 515 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, |
486 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, | 516 {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, |
487 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, | 517 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, |
488 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, | 518 {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, |
489 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, | 519 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, |
490 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, | 520 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, |
491 {{0, 0}, EV_ABS, ABS_X, 999}, | 521 {{0, 0}, EV_ABS, ABS_X, 999}, |
492 {{0, 0}, EV_ABS, ABS_Y, 888}, | 522 {{0, 0}, EV_ABS, ABS_Y, 888}, |
493 {{0, 0}, EV_ABS, ABS_PRESSURE, 55}, | 523 {{0, 0}, EV_ABS, ABS_PRESSURE, 55}, |
494 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 524 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
495 }; | 525 }; |
496 | 526 |
497 // Check that two events are generated. | 527 // Check that two events are generated. |
498 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 528 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
499 dev->ReadNow(); | 529 dev->ReadNow(); |
500 | 530 |
501 const unsigned int kExpectedEventCount = 2; | 531 const unsigned int kExpectedEventCount = 2; |
502 EXPECT_EQ(kExpectedEventCount, dev->size()); | 532 EXPECT_EQ(kExpectedEventCount, size()); |
503 if (kExpectedEventCount != dev->size()) | 533 if (kExpectedEventCount != size()) |
504 return; | 534 return; |
505 | 535 |
506 ui::TouchEventParams ev0 = dev->event(0); | 536 ui::TouchEventParams ev0 = dispatched_event(0); |
507 ui::TouchEventParams ev1 = dev->event(1); | 537 ui::TouchEventParams ev1 = dispatched_event(1); |
508 | 538 |
509 EXPECT_EQ(0, ev0.touch_id); | 539 EXPECT_EQ(0, ev0.touch_id); |
510 EXPECT_EQ(999, ev0.location.x()); | 540 EXPECT_EQ(999, ev0.location.x()); |
511 EXPECT_EQ(888, ev0.location.y()); | 541 EXPECT_EQ(888, ev0.location.y()); |
512 EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure); | 542 EXPECT_FLOAT_EQ(0.8333333f, ev0.pressure); |
513 | 543 |
514 EXPECT_EQ(1, ev1.touch_id); | 544 EXPECT_EQ(1, ev1.touch_id); |
515 EXPECT_EQ(777, ev1.location.x()); | 545 EXPECT_EQ(777, ev1.location.x()); |
516 EXPECT_EQ(666, ev1.location.y()); | 546 EXPECT_EQ(666, ev1.location.y()); |
517 EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure); | 547 EXPECT_FLOAT_EQ(0.4666666f, ev1.pressure); |
(...skipping 11 matching lines...) Expand all Loading... |
529 {{0, 0}, EV_ABS, ABS_MT_SLOT, ui::TouchEventConverterEvdev::MAX_FINGERS}, | 559 {{0, 0}, EV_ABS, ABS_MT_SLOT, ui::TouchEventConverterEvdev::MAX_FINGERS}, |
530 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, | 560 {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, |
531 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, | 561 {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, |
532 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, | 562 {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, |
533 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 563 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
534 }; | 564 }; |
535 | 565 |
536 // Check that one 1 event is generated | 566 // Check that one 1 event is generated |
537 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); | 567 dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); |
538 dev->ReadNow(); | 568 dev->ReadNow(); |
539 EXPECT_EQ(1u, dev->size()); | 569 EXPECT_EQ(1u, size()); |
540 } | 570 } |
OLD | NEW |