| 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 | 
|---|