| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 9 #include "base/message_loop/message_loop.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/events/event.h" | 11 #include "ui/events/event.h" |
| 11 #include "ui/events/keycodes/keyboard_codes.h" | 12 #include "ui/events/keycodes/keyboard_codes.h" |
| 12 #include "ui/events/ozone/evdev/key_event_converter.h" | 13 #include "ui/events/ozone/evdev/key_event_converter.h" |
| 13 | 14 |
| 14 namespace ui { | 15 namespace ui { |
| 15 | 16 |
| 16 const int kInvalidFileDescriptor = -1; | |
| 17 const char kTestDevicePath[] = "/dev/input/test-device"; | 17 const char kTestDevicePath[] = "/dev/input/test-device"; |
| 18 | 18 |
| 19 class MockKeyEventConverterEvdev : public KeyEventConverterEvdev { | 19 class MockKeyEventConverterEvdev : public KeyEventConverterEvdev { |
| 20 public: | 20 public: |
| 21 MockKeyEventConverterEvdev(EventModifiersEvdev* modifiers) | 21 MockKeyEventConverterEvdev(int fd, EventModifiersEvdev* modifiers) |
| 22 : KeyEventConverterEvdev(kInvalidFileDescriptor, | 22 : KeyEventConverterEvdev(fd, base::FilePath(kTestDevicePath), modifiers) { |
| 23 base::FilePath(kTestDevicePath), | 23 } |
| 24 modifiers) {} | |
| 25 virtual ~MockKeyEventConverterEvdev() {}; | 24 virtual ~MockKeyEventConverterEvdev() {}; |
| 26 | 25 |
| 27 unsigned size() { return dispatched_events_.size(); } | 26 unsigned size() { return dispatched_events_.size(); } |
| 28 KeyEvent* event(unsigned index) { return dispatched_events_[index]; } | 27 KeyEvent* event(unsigned index) { |
| 28 CHECK_GT(dispatched_events_.size(), index); |
| 29 return dispatched_events_[index]; |
| 30 } |
| 29 | 31 |
| 30 virtual void DispatchEvent(scoped_ptr<Event> event) OVERRIDE; | 32 virtual void DispatchEvent(scoped_ptr<Event> event) OVERRIDE; |
| 31 | 33 |
| 32 private: | 34 private: |
| 33 ScopedVector<KeyEvent> dispatched_events_; | 35 ScopedVector<KeyEvent> dispatched_events_; |
| 34 | 36 |
| 35 DISALLOW_COPY_AND_ASSIGN(MockKeyEventConverterEvdev); | 37 DISALLOW_COPY_AND_ASSIGN(MockKeyEventConverterEvdev); |
| 36 }; | 38 }; |
| 37 | 39 |
| 38 void MockKeyEventConverterEvdev::DispatchEvent(scoped_ptr<Event> event) { | 40 void MockKeyEventConverterEvdev::DispatchEvent(scoped_ptr<Event> event) { |
| 39 dispatched_events_.push_back(static_cast<KeyEvent*>(event.release())); | 41 dispatched_events_.push_back(static_cast<KeyEvent*>(event.release())); |
| 40 } | 42 } |
| 41 | 43 |
| 42 } // namespace ui | 44 } // namespace ui |
| 43 | 45 |
| 44 // Test fixture. | 46 // Test fixture. |
| 45 class KeyEventConverterEvdevTest : public testing::Test { | 47 class KeyEventConverterEvdevTest : public testing::Test { |
| 46 public: | 48 public: |
| 47 KeyEventConverterEvdevTest() {} | 49 KeyEventConverterEvdevTest() {} |
| 48 | 50 |
| 49 // Overridden from testing::Test: | 51 // Overridden from testing::Test: |
| 50 virtual void SetUp() OVERRIDE { | 52 virtual void SetUp() OVERRIDE { |
| 53 |
| 54 // Set up pipe to satisfy message pump (unused). |
| 55 int evdev_io[2]; |
| 56 if (pipe(evdev_io)) |
| 57 PLOG(FATAL) << "failed pipe"; |
| 58 events_in_ = evdev_io[0]; |
| 59 events_out_ = evdev_io[1]; |
| 60 |
| 51 modifiers_ = new ui::EventModifiersEvdev(); | 61 modifiers_ = new ui::EventModifiersEvdev(); |
| 52 device_ = new ui::MockKeyEventConverterEvdev(modifiers_); | 62 device_ = new ui::MockKeyEventConverterEvdev(events_in_, modifiers_); |
| 53 } | 63 } |
| 54 virtual void TearDown() OVERRIDE { | 64 virtual void TearDown() OVERRIDE { |
| 55 delete device_; | 65 delete device_; |
| 56 delete modifiers_; | 66 delete modifiers_; |
| 67 close(events_in_); |
| 68 close(events_out_); |
| 57 } | 69 } |
| 58 | 70 |
| 59 ui::MockKeyEventConverterEvdev* device() { return device_; } | 71 ui::MockKeyEventConverterEvdev* device() { return device_; } |
| 60 ui::EventModifiersEvdev* modifiers() { return modifiers_; } | 72 ui::EventModifiersEvdev* modifiers() { return modifiers_; } |
| 61 | 73 |
| 62 private: | 74 private: |
| 75 base::MessageLoopForUI ui_loop_; |
| 76 |
| 63 ui::EventModifiersEvdev* modifiers_; | 77 ui::EventModifiersEvdev* modifiers_; |
| 64 ui::MockKeyEventConverterEvdev* device_; | 78 ui::MockKeyEventConverterEvdev* device_; |
| 79 |
| 80 int events_out_; |
| 81 int events_in_; |
| 82 |
| 65 DISALLOW_COPY_AND_ASSIGN(KeyEventConverterEvdevTest); | 83 DISALLOW_COPY_AND_ASSIGN(KeyEventConverterEvdevTest); |
| 66 }; | 84 }; |
| 67 | 85 |
| 68 TEST_F(KeyEventConverterEvdevTest, KeyPress) { | 86 TEST_F(KeyEventConverterEvdevTest, KeyPress) { |
| 69 ui::MockKeyEventConverterEvdev* dev = device(); | 87 ui::MockKeyEventConverterEvdev* dev = device(); |
| 70 | 88 |
| 71 struct input_event mock_kernel_queue[] = { | 89 struct input_event mock_kernel_queue[] = { |
| 72 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, | 90 {{0, 0}, EV_MSC, MSC_SCAN, 0x7002a}, |
| 73 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1}, | 91 {{0, 0}, EV_KEY, KEY_BACKSPACE, 1}, |
| 74 {{0, 0}, EV_SYN, SYN_REPORT, 0}, | 92 {{0, 0}, EV_SYN, SYN_REPORT, 0}, |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 event = dev->event(4); | 334 event = dev->event(4); |
| 317 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); | 335 EXPECT_EQ(ui::ET_KEY_PRESSED, event->type()); |
| 318 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); | 336 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); |
| 319 EXPECT_EQ(0, event->flags()); | 337 EXPECT_EQ(0, event->flags()); |
| 320 | 338 |
| 321 event = dev->event(5); | 339 event = dev->event(5); |
| 322 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); | 340 EXPECT_EQ(ui::ET_KEY_RELEASED, event->type()); |
| 323 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); | 341 EXPECT_EQ(ui::VKEY_CAPITAL, event->key_code()); |
| 324 EXPECT_EQ(0, event->flags()); | 342 EXPECT_EQ(0, event->flags()); |
| 325 } | 343 } |
| OLD | NEW |