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

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

Issue 677113002: ozone: evdev: Handle mouse events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: adopt spang ideas 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
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 <linux/input.h> 5 #include <linux/input.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/events/event.h" 12 #include "ui/events/event.h"
13 #include "ui/events/keycodes/keyboard_codes.h" 13 #include "ui/events/keycodes/keyboard_codes.h"
14 #include "ui/events/ozone/evdev/key_event_converter_evdev.h" 14 #include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
15 #include "ui/events/ozone/evdev/keyboard_evdev.h" 15 #include "ui/events/ozone/evdev/keyboard_evdev.h"
16 16
17 namespace ui { 17 namespace ui {
18 18
19 const char kTestDevicePath[] = "/dev/input/test-device"; 19 const char kTestDevicePath[] = "/dev/input/test-device";
20 20
21 class MockKeyEventConverterEvdev : public KeyEventConverterEvdev { 21 class MockEventConverterEvdevImpl : public EventConverterEvdevImpl {
22 public: 22 public:
23 MockKeyEventConverterEvdev(int fd, KeyboardEvdev* keyboard) 23 MockEventConverterEvdevImpl(int fd, KeyboardEvdev* keyboard)
24 : KeyEventConverterEvdev(fd, 24 : EventConverterEvdevImpl(fd,
25 base::FilePath(kTestDevicePath), 25 base::FilePath(kTestDevicePath),
26 1, 26 1,
27 keyboard) { 27 keyboard) {
28 Start(); 28 Start();
29 } 29 }
30 virtual ~MockKeyEventConverterEvdev() {}; 30 virtual ~MockEventConverterEvdevImpl() {};
31 31
32 private: 32 private:
33 DISALLOW_COPY_AND_ASSIGN(MockKeyEventConverterEvdev); 33 DISALLOW_COPY_AND_ASSIGN(MockEventConverterEvdevImpl);
34 }; 34 };
35 35
36 } // namespace ui 36 } // namespace ui
37 37
38 // Test fixture. 38 // Test fixture.
39 class KeyEventConverterEvdevTest : public testing::Test { 39 class EventConverterEvdevImplTest : public testing::Test {
40 public: 40 public:
41 KeyEventConverterEvdevTest() {} 41 EventConverterEvdevImplTest() {}
42 42
43 // Overridden from testing::Test: 43 // Overridden from testing::Test:
44 virtual void SetUp() override { 44 virtual void SetUp() override {
45 45
46 // Set up pipe to satisfy message pump (unused). 46 // Set up pipe to satisfy message pump (unused).
47 int evdev_io[2]; 47 int evdev_io[2];
48 if (pipe(evdev_io)) 48 if (pipe(evdev_io))
49 PLOG(FATAL) << "failed pipe"; 49 PLOG(FATAL) << "failed pipe";
50 events_in_ = evdev_io[0]; 50 events_in_ = evdev_io[0];
51 events_out_ = evdev_io[1]; 51 events_out_ = evdev_io[1];
52 52
53 modifiers_.reset(new ui::EventModifiersEvdev()); 53 modifiers_.reset(new ui::EventModifiersEvdev());
54 keyboard_.reset(new ui::KeyboardEvdev( 54 keyboard_.reset(new ui::KeyboardEvdev(
55 modifiers_.get(), 55 modifiers_.get(),
56 base::Bind(&KeyEventConverterEvdevTest::DispatchEventForTest, 56 base::Bind(&EventConverterEvdevImplTest::DispatchEventForTest,
57 base::Unretained(this)))); 57 base::Unretained(this))));
58 device_.reset( 58 device_.reset(
59 new ui::MockKeyEventConverterEvdev(events_in_, keyboard_.get())); 59 new ui::MockEventConverterEvdevImpl(events_in_, keyboard_.get()));
60 } 60 }
61 virtual void TearDown() override { 61 virtual void TearDown() override {
62 device_.reset(); 62 device_.reset();
63 keyboard_.reset(); 63 keyboard_.reset();
64 modifiers_.reset(); 64 modifiers_.reset();
65 close(events_in_); 65 close(events_in_);
66 close(events_out_); 66 close(events_out_);
67 } 67 }
68 68
69 ui::MockKeyEventConverterEvdev* device() { return device_.get(); } 69 ui::MockEventConverterEvdevImpl* device() { return device_.get(); }
70 ui::EventModifiersEvdev* modifiers() { return modifiers_.get(); } 70 ui::EventModifiersEvdev* modifiers() { return modifiers_.get(); }
71 71
72 unsigned size() { return dispatched_events_.size(); } 72 unsigned size() { return dispatched_events_.size(); }
73 ui::KeyEvent* dispatched_event(unsigned index) { 73 ui::KeyEvent* dispatched_event(unsigned index) {
74 DCHECK_GT(dispatched_events_.size(), index); 74 DCHECK_GT(dispatched_events_.size(), index);
75 ui::Event* ev = dispatched_events_[index]; 75 ui::Event* ev = dispatched_events_[index];
76 DCHECK(ev->IsKeyEvent()); 76 DCHECK(ev->IsKeyEvent());
77 return static_cast<ui::KeyEvent*>(ev); 77 return static_cast<ui::KeyEvent*>(ev);
78 } 78 }
79 79
80 private: 80 private:
81 void DispatchEventForTest(scoped_ptr<ui::Event> event) { 81 void DispatchEventForTest(scoped_ptr<ui::Event> event) {
82 dispatched_events_.push_back(event.release()); 82 dispatched_events_.push_back(event.release());
83 } 83 }
84 84
85 base::MessageLoopForUI ui_loop_; 85 base::MessageLoopForUI ui_loop_;
86 86
87 scoped_ptr<ui::EventModifiersEvdev> modifiers_; 87 scoped_ptr<ui::EventModifiersEvdev> modifiers_;
88 scoped_ptr<ui::KeyboardEvdev> keyboard_; 88 scoped_ptr<ui::KeyboardEvdev> keyboard_;
89 scoped_ptr<ui::MockKeyEventConverterEvdev> device_; 89 scoped_ptr<ui::MockEventConverterEvdevImpl> device_;
90 90
91 ScopedVector<ui::Event> dispatched_events_; 91 ScopedVector<ui::Event> dispatched_events_;
92 92
93 int events_out_; 93 int events_out_;
94 int events_in_; 94 int events_in_;
95 95
96 DISALLOW_COPY_AND_ASSIGN(KeyEventConverterEvdevTest); 96 DISALLOW_COPY_AND_ASSIGN(EventConverterEvdevImplTest);
97 }; 97 };
98 98
99 TEST_F(KeyEventConverterEvdevTest, KeyPress) { 99 TEST_F(EventConverterEvdevImplTest, KeyPress) {
100 ui::MockKeyEventConverterEvdev* dev = device(); 100 ui::MockEventConverterEvdevImpl* dev = device();
101 101
102 struct input_event mock_kernel_queue[] = { 102 struct input_event mock_kernel_queue[] = {
103 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, 103 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
104 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1}, 104 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1},
105 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 105 {{0, 0}, EV_SYN, SYN_REPORT, 0},
106 106
107 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, 107 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
108 {{0, 0}, EV_KEY, KEY_BACKSPACE, 0}, 108 {{0, 0}, EV_KEY, KEY_BACKSPACE, 0},
109 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 109 {{0, 0}, EV_SYN, SYN_REPORT, 0},
110 }; 110 };
111 111
112 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); 112 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
113 EXPECT_EQ(2u, size()); 113 EXPECT_EQ(2u, size());
114 114
115 ui::KeyEvent* event; 115 ui::KeyEvent* event;
116 116
117 event = dispatched_event(0); 117 event = dispatched_event(0);
118 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); 118 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
119 EXPECT_EQ(ui::VKEY_BACK, event->key_code()); 119 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
120 EXPECT_EQ(0, event->flags()); 120 EXPECT_EQ(0, event->flags());
121 121
122 event = dispatched_event(1); 122 event = dispatched_event(1);
123 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 123 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
124 EXPECT_EQ(ui::VKEY_BACK, event->key_code()); 124 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
125 EXPECT_EQ(0, event->flags()); 125 EXPECT_EQ(0, event->flags());
126 } 126 }
127 127
128 TEST_F(KeyEventConverterEvdevTest, KeyRepeat) { 128 TEST_F(EventConverterEvdevImplTest, KeyRepeat) {
129 ui::MockKeyEventConverterEvdev* dev = device(); 129 ui::MockEventConverterEvdevImpl* dev = device();
130 130
131 struct input_event mock_kernel_queue[] = { 131 struct input_event mock_kernel_queue[] = {
132 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, 132 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
133 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1}, 133 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1},
134 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 134 {{0, 0}, EV_SYN, SYN_REPORT, 0},
135 135
136 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, 136 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
137 {{0, 0}, EV_KEY, KEY_BACKSPACE, 2}, 137 {{0, 0}, EV_KEY, KEY_BACKSPACE, 2},
138 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 138 {{0, 0}, EV_SYN, SYN_REPORT, 0},
139 139
(...skipping 25 matching lines...) Expand all
165 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); 165 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
166 EXPECT_EQ(ui::VKEY_BACK, event->key_code()); 166 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
167 EXPECT_EQ(0, event->flags()); 167 EXPECT_EQ(0, event->flags());
168 168
169 event = dispatched_event(3); 169 event = dispatched_event(3);
170 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 170 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
171 EXPECT_EQ(ui::VKEY_BACK, event->key_code()); 171 EXPECT_EQ(ui::VKEY_BACK, event->key_code());
172 EXPECT_EQ(0, event->flags()); 172 EXPECT_EQ(0, event->flags());
173 } 173 }
174 174
175 TEST_F(KeyEventConverterEvdevTest, NoEvents) { 175 TEST_F(EventConverterEvdevImplTest, NoEvents) {
176 ui::MockKeyEventConverterEvdev* dev = device(); 176 ui::MockEventConverterEvdevImpl* dev = device();
177 dev->ProcessEvents(NULL, 0); 177 dev->ProcessEvents(NULL, 0);
178 EXPECT_EQ(0u, size()); 178 EXPECT_EQ(0u, size());
179 } 179 }
180 180
181 TEST_F(KeyEventConverterEvdevTest, KeyWithModifier) { 181 TEST_F(EventConverterEvdevImplTest, KeyWithModifier) {
182 ui::MockKeyEventConverterEvdev* dev = device(); 182 ui::MockEventConverterEvdevImpl* dev = device();
183 183
184 struct input_event mock_kernel_queue[] = { 184 struct input_event mock_kernel_queue[] = {
185 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1}, 185 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
186 {{0, 0}, EV_KEY, KEY_LEFTSHIFT, 1}, 186 {{0, 0}, EV_KEY, KEY_LEFTSHIFT, 1},
187 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 187 {{0, 0}, EV_SYN, SYN_REPORT, 0},
188 188
189 {{0, 0}, EV_MSC, MSC_SCAN, 0x70004}, 189 {{0, 0}, EV_MSC, MSC_SCAN, 0x70004},
190 {{0, 0}, EV_KEY, KEY_A, 1}, 190 {{0, 0}, EV_KEY, KEY_A, 1},
191 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 191 {{0, 0}, EV_SYN, SYN_REPORT, 0},
192 192
(...skipping 25 matching lines...) Expand all
218 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 218 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
219 EXPECT_EQ(ui::VKEY_A, event->key_code()); 219 EXPECT_EQ(ui::VKEY_A, event->key_code());
220 EXPECT_EQ(ui::EF_SHIFT_DOWN, event->flags()); 220 EXPECT_EQ(ui::EF_SHIFT_DOWN, event->flags());
221 221
222 event = dispatched_event(3); 222 event = dispatched_event(3);
223 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 223 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
224 EXPECT_EQ(ui::VKEY_SHIFT, event->key_code()); 224 EXPECT_EQ(ui::VKEY_SHIFT, event->key_code());
225 EXPECT_EQ(0, event->flags()); 225 EXPECT_EQ(0, event->flags());
226 } 226 }
227 227
228 TEST_F(KeyEventConverterEvdevTest, KeyWithDuplicateModifier) { 228 TEST_F(EventConverterEvdevImplTest, KeyWithDuplicateModifier) {
229 ui::MockKeyEventConverterEvdev* dev = device(); 229 ui::MockEventConverterEvdevImpl* dev = device();
230 230
231 struct input_event mock_kernel_queue[] = { 231 struct input_event mock_kernel_queue[] = {
232 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1}, 232 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
233 {{0, 0}, EV_KEY, KEY_LEFTCTRL, 1}, 233 {{0, 0}, EV_KEY, KEY_LEFTCTRL, 1},
234 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 234 {{0, 0}, EV_SYN, SYN_REPORT, 0},
235 235
236 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e5}, 236 {{0, 0}, EV_MSC, MSC_SCAN, 0x700e5},
237 {{0, 0}, EV_KEY, KEY_RIGHTCTRL, 1}, 237 {{0, 0}, EV_KEY, KEY_RIGHTCTRL, 1},
238 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 238 {{0, 0}, EV_SYN, SYN_REPORT, 0},
239 239
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 283 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
284 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code()); 284 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
285 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags()); 285 EXPECT_EQ(ui::EF_CONTROL_DOWN, event->flags());
286 286
287 event = dispatched_event(5); 287 event = dispatched_event(5);
288 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 288 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
289 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code()); 289 EXPECT_EQ(ui::VKEY_CONTROL, event->key_code());
290 EXPECT_EQ(0, event->flags()); 290 EXPECT_EQ(0, event->flags());
291 } 291 }
292 292
293 TEST_F(KeyEventConverterEvdevTest, KeyWithLock) { 293 TEST_F(EventConverterEvdevImplTest, KeyWithLock) {
294 ui::MockKeyEventConverterEvdev* dev = device(); 294 ui::MockEventConverterEvdevImpl* dev = device();
295 295
296 struct input_event mock_kernel_queue[] = { 296 struct input_event mock_kernel_queue[] = {
297 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039}, 297 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
298 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 1}, 298 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 1},
299 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 299 {{0, 0}, EV_SYN, SYN_REPORT, 0},
300 300
301 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039}, 301 {{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
302 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 0}, 302 {{0, 0}, EV_KEY, KEY_CAPSLOCK, 0},
303 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 303 {{0, 0}, EV_SYN, SYN_REPORT, 0},
304 304
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); 348 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type());
349 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); 349 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
350 EXPECT_EQ(0, event->flags()); 350 EXPECT_EQ(0, event->flags());
351 351
352 event = dispatched_event(5); 352 event = dispatched_event(5);
353 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); 353 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type());
354 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); 354 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code());
355 EXPECT_EQ(0, event->flags()); 355 EXPECT_EQ(0, event->flags());
356 } 356 }
357 357
358 TEST_F(KeyEventConverterEvdevTest, UnmappedKeyPress) { 358 TEST_F(EventConverterEvdevImplTest, UnmappedKeyPress) {
359 ui::MockKeyEventConverterEvdev* dev = device(); 359 ui::MockEventConverterEvdevImpl* dev = device();
360 360
361 struct input_event mock_kernel_queue[] = { 361 struct input_event mock_kernel_queue[] = {
362 {{0, 0}, EV_KEY, BTN_TOUCH, 1}, 362 {{0, 0}, EV_KEY, BTN_TOUCH, 1},
363 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 363 {{0, 0}, EV_SYN, SYN_REPORT, 0},
364 364
365 {{0, 0}, EV_KEY, BTN_TOUCH, 0}, 365 {{0, 0}, EV_KEY, BTN_TOUCH, 0},
366 {{0, 0}, EV_SYN, SYN_REPORT, 0}, 366 {{0, 0}, EV_SYN, SYN_REPORT, 0},
367 }; 367 };
368 368
369 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue)); 369 dev->ProcessEvents(mock_kernel_queue, arraysize(mock_kernel_queue));
370 EXPECT_EQ(0u, size()); 370 EXPECT_EQ(0u, size());
371 } 371 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698