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