Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: ui/events/ozone/evdev/event_converter_evdev_impl_unittest.cc

Issue 682753005: Revert "ozone: evdev: Handle mouse events" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <linux/input.h>
6
7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/scoped_vector.h"
10 #include "base/message_loop/message_loop.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/events/event.h"
13 #include "ui/events/keycodes/keyboard_codes.h"
14 #include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
15 #include "ui/events/ozone/evdev/keyboard_evdev.h"
16
17 namespace ui {
18
19 const char kTestDevicePath[] = "/dev/input/test-device";
20
21 class MockEventConverterEvdevImpl : public EventConverterEvdevImpl {
22 public:
23 MockEventConverterEvdevImpl(int fd, KeyboardEvdev* keyboard)
24 : EventConverterEvdevImpl(fd,
25 base::FilePath(kTestDevicePath),
26 1,
27 keyboard) {
28 Start();
29 }
30 virtual ~MockEventConverterEvdevImpl() {}
31
32 private:
33 DISALLOW_COPY_AND_ASSIGN(MockEventConverterEvdevImpl);
34 };
35
36 } // namespace ui
37
38 // Test fixture.
39 class EventConverterEvdevImplTest : public testing::Test {
40 public:
41 EventConverterEvdevImplTest() {}
42
43 // Overridden from testing::Test:
44 void SetUp() override {
45 // Set up pipe to satisfy message pump (unused).
46 int evdev_io[2];
47 if (pipe(evdev_io))
48 PLOG(FATAL) << "failed pipe";
49 events_in_ = evdev_io[0];
50 events_out_ = evdev_io[1];
51
52 modifiers_.reset(new ui::EventModifiersEvdev());
53 keyboard_.reset(new ui::KeyboardEvdev(
54 modifiers_.get(),
55 base::Bind(&EventConverterEvdevImplTest::DispatchEventForTest,
56 base::Unretained(this))));
57 device_.reset(
58 new ui::MockEventConverterEvdevImpl(events_in_, keyboard_.get()));
59 }
60 void TearDown() override {
61 device_.reset();
62 keyboard_.reset();
63 modifiers_.reset();
64 close(events_in_);
65 close(events_out_);
66 }
67
68 ui::MockEventConverterEvdevImpl* device() { return device_.get(); }
69 ui::EventModifiersEvdev* modifiers() { return modifiers_.get(); }
70
71 unsigned size() { return dispatched_events_.size(); }
72 ui::KeyEvent* dispatched_event(unsigned index) {
73 DCHECK_GT(dispatched_events_.size(), index);
74 ui::Event* ev = dispatched_events_[index];
75 DCHECK(ev->IsKeyEvent());
76 return static_cast<ui::KeyEvent*>(ev);
77 }
78
79 private:
80 void DispatchEventForTest(scoped_ptr<ui::Event> event) {
81 dispatched_events_.push_back(event.release());
82 }
83
84 base::MessageLoopForUI ui_loop_;
85
86 scoped_ptr<ui::EventModifiersEvdev> modifiers_;
87 scoped_ptr<ui::KeyboardEvdev> keyboard_;
88 scoped_ptr<ui::MockEventConverterEvdevImpl> device_;
89
90 ScopedVector<ui::Event> dispatched_events_;
91
92 int events_out_;
93 int events_in_;
94
95 DISALLOW_COPY_AND_ASSIGN(EventConverterEvdevImplTest);
96 };
97
98 TEST_F(EventConverterEvdevImplTest, KeyPress) {
99 ui::MockEventConverterEvdevImpl* dev = device();
100
101 struct input_event mock_kernel_queue[] = {
102 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
103 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1},
104 {{0, 0}, EV_SYN, SYN_REPORT, 0},
105
106 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
107 {{0, 0}, EV_KEY, KEY_BACKSPACE, 0},
108 {{0, 0}, EV_SYN, SYN_REPORT, 0},
109 };
110
111 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
112 EXPECT_EQ(2u, size());
113
114 ui::KeyEvent* event;
115
116 event = dispatched_event(0);
117 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
118 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
119 EXPECT_EQ(0, event->flags());
120
121 event = dispatched_event(1);
122 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
123 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
124 EXPECT_EQ(0, event->flags());
125 }
126
127 TEST_F(EventConverterEvdevImplTest, KeyRepeat) {
128 ui::MockEventConverterEvdevImpl* dev = device();
129
130 struct input_event mock_kernel_queue[] = {
131 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
132 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1},
133 {{0, 0}, EV_SYN, SYN_REPORT, 0},
134
135 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
136 {{0, 0}, EV_KEY, KEY_BACKSPACE, 2},
137 {{0, 0}, EV_SYN, SYN_REPORT, 0},
138
139 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
140 {{0, 0}, EV_KEY, KEY_BACKSPACE, 2},
141 {{0, 0}, EV_SYN, SYN_REPORT, 0},
142
143 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
144 {{0, 0}, EV_KEY, KEY_BACKSPACE, 0},
145 {{0, 0}, EV_SYN, SYN_REPORT, 0},
146 };
147
148 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
149 EXPECT_EQ(4u, size());
150
151 ui::KeyEvent* event;
152
153 event = dispatched_event(0);
154 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
155 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
156 EXPECT_EQ(0, event->flags());
157
158 event = dispatched_event(1);
159 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
160 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
161 EXPECT_EQ(0, event->flags());
162
163 event = dispatched_event(2);
164 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
165 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
166 EXPECT_EQ(0, event->flags());
167
168 event = dispatched_event(3);
169 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
170 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
171 EXPECT_EQ(0, event->flags());
172 }
173
174 TEST_F(EventConverterEvdevImplTest, NoEvents) {
175 ui::MockEventConverterEvdevImpl* dev = device();
176 dev->ProcessEvents(NULL, 0);
177 EXPECT_EQ(0u, size());
178 }
179
180 TEST_F(EventConverterEvdevImplTest, KeyWithModifier) {
181 ui::MockEventConverterEvdevImpl* dev = device();
182
183 struct input_event mock_kernel_queue[] = {
184 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
185 {{0, 0}, EV_KEY, KEY_LEFTSHIFT, 1},
186 {{0, 0}, EV_SYN, SYN_REPORT, 0},
187
188 {{0, 0}, EV_MSC, MSC_SCAN, 0x70004},
189 {{0, 0}, EV_KEY, KEY_A, 1},
190 {{0, 0}, EV_SYN, SYN_REPORT, 0},
191
192 {{0, 0}, EV_MSC, MSC_SCAN, 0x70004},
193 {{0, 0}, EV_KEY, KEY_A, 0},
194 {{0, 0}, EV_SYN, SYN_REPORT, 0},
195
196 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
197 {{0, 0}, EV_KEY, KEY_LEFTSHIFT, 0},
198 {{0, 0}, EV_SYN, SYN_REPORT, 0},
199 };
200
201 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
202 EXPECT_EQ(4u, size());
203
204 ui::KeyEvent* event;
205
206 event = dispatched_event(0);
207 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
208 EXPECT_EQ(ui::VKEY_SHIFT, event->key_code());
209 EXPECT_EQ(ui::EF_SHIFT_DOWN, event->flags());
210
211 event = dispatched_event(1);
212 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
213 EXPECT_EQ(ui::VKEY_A, event->key_code());
214 EXPECT_EQ(ui::EF_SHIFT_DOWN, event->flags());
215
216 event = dispatched_event(2);
217 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
218 EXPECT_EQ(ui::VKEY_A, event->key_code());
219 EXPECT_EQ(ui::EF_SHIFT_DOWN, event->flags());
220
221 event = dispatched_event(3);
222 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
223 EXPECT_EQ(ui::VKEY_SHIFT, event->key_code());
224 EXPECT_EQ(0, event->flags());
225 }
226
227 TEST_F(EventConverterEvdevImplTest, KeyWithDuplicateModifier) {
228 ui::MockEventConverterEvdevImpl* dev = device();
229
230 struct input_event mock_kernel_queue[] = {
231 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
232 {{0, 0}, EV_KEY, KEY_LEFTCTRL, 1},
233 {{0, 0}, EV_SYN, SYN_REPORT, 0},
234
235 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e5},
236 {{0, 0}, EV_KEY, KEY_RIGHTCTRL, 1},
237 {{0, 0}, EV_SYN, SYN_REPORT, 0},
238
239 {{0, 0}, EV_MSC, MSC_SCAN, 0x7001d},
240 {{0, 0}, EV_KEY, KEY_Z, 1},
241 {{0, 0}, EV_SYN, SYN_REPORT, 0},
242
243 {{0, 0}, EV_MSC, MSC_SCAN, 0x7001d},
244 {{0, 0}, EV_KEY, KEY_Z, 0},
245 {{0, 0}, EV_SYN, SYN_REPORT, 0},
246
247 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
248 {{0, 0}, EV_KEY, KEY_LEFTCTRL, 0},
249 {{0, 0}, EV_SYN, SYN_REPORT, 0},
250
251 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e5},
252 {{0, 0}, EV_KEY, KEY_RIGHTCTRL, 0},
253 {{0, 0}, EV_SYN, SYN_REPORT, 0},
254 };
255
256 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
257 EXPECT_EQ(6u, size());
258
259 ui::KeyEvent* event;
260
261 event = dispatched_event(0);
262 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
263 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
264 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
265
266 event = dispatched_event(1);
267 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
268 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
269 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
270
271 event = dispatched_event(2);
272 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
273 EXPECT_EQ(ui::VKEY_Z, event->key_code());
274 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
275
276 event = dispatched_event(3);
277 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
278 EXPECT_EQ(ui::VKEY_Z, event->key_code());
279 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
280
281 event = dispatched_event(4);
282 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
283 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
284 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
285
286 event = dispatched_event(5);
287 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
288 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
289 EXPECT_EQ(0, event->flags());
290 }
291
292 TEST_F(EventConverterEvdevImplTest, KeyWithLock) {
293 ui::MockEventConverterEvdevImpl* dev = device();
294
295 struct input_event mock_kernel_queue[] = {
296 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
297 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 1},
298 {{0, 0}, EV_SYN, SYN_REPORT, 0},
299
300 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
301 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 0},
302 {{0, 0}, EV_SYN, SYN_REPORT, 0},
303
304 {{0, 0}, EV_MSC, MSC_SCAN, 0x70014},
305 {{0, 0}, EV_KEY, KEY_Q, 1},
306 {{0, 0}, EV_SYN, SYN_REPORT, 0},
307
308 {{0, 0}, EV_MSC, MSC_SCAN, 0x70014},
309 {{0, 0}, EV_KEY, KEY_Q, 0},
310 {{0, 0}, EV_SYN, SYN_REPORT, 0},
311
312 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
313 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 1},
314 {{0, 0}, EV_SYN, SYN_REPORT, 0},
315
316 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
317 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 0},
318 {{0, 0}, EV_SYN, SYN_REPORT, 0},
319 };
320
321 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
322 EXPECT_EQ(6u, size());
323
324 ui::KeyEvent* event;
325
326 event = dispatched_event(0);
327 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
328 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
329 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN, event->flags());
330
331 event = dispatched_event(1);
332 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
333 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
334 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN, event->flags());
335
336 event = dispatched_event(2);
337 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
338 EXPECT_EQ(ui::VKEY_Q, event->key_code());
339 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN, event->flags());
340
341 event = dispatched_event(3);
342 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
343 EXPECT_EQ(ui::VKEY_Q, event->key_code());
344 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN, event->flags());
345
346 event = dispatched_event(4);
347 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
348 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
349 EXPECT_EQ(0, event->flags());
350
351 event = dispatched_event(5);
352 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
353 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
354 EXPECT_EQ(0, event->flags());
355 }
356
357 TEST_F(EventConverterEvdevImplTest, UnmappedKeyPress) {
358 ui::MockEventConverterEvdevImpl* dev = device();
359
360 struct input_event mock_kernel_queue[] = {
361 {{0, 0}, EV_KEY, BTN_TOUCH, 1},
362 {{0, 0}, EV_SYN, SYN_REPORT, 0},
363
364 {{0, 0}, EV_KEY, BTN_TOUCH, 0},
365 {{0, 0}, EV_SYN, SYN_REPORT, 0},
366 };
367
368 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
369 EXPECT_EQ(0u, size());
370 }
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/event_converter_evdev_impl.cc ('k') | ui/events/ozone/evdev/event_factory_evdev.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698