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

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

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

Powered by Google App Engine
This is Rietveld 408576698