| 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 |