OLD | NEW |
(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 "athena/input/public/accelerator_manager.h" |
| 6 |
| 7 #include "athena/input/public/input_manager.h" |
| 8 #include "athena/test/athena_test_base.h" |
| 9 #include "ui/aura/test/event_generator.h" |
| 10 |
| 11 namespace athena { |
| 12 namespace { |
| 13 |
| 14 const int kInvalidCommandId = -1; |
| 15 |
| 16 class TestHandler : public AcceleratorHandler { |
| 17 public: |
| 18 TestHandler() : fired_command_id_(kInvalidCommandId), enabled_(true) {} |
| 19 virtual ~TestHandler() {} |
| 20 |
| 21 void set_enabled(bool enabled) { enabled_ = enabled; } |
| 22 |
| 23 int GetFiredCommandIdAndReset() { |
| 24 int fired = fired_command_id_; |
| 25 fired_command_id_ = kInvalidCommandId; |
| 26 return fired; |
| 27 } |
| 28 |
| 29 private: |
| 30 // AcceleratorHandler: |
| 31 virtual bool IsCommandEnabled(int command_id) const OVERRIDE { |
| 32 return enabled_; |
| 33 } |
| 34 virtual bool OnAcceleratorFired(int command_id, |
| 35 const ui::Accelerator& accelerator) OVERRIDE { |
| 36 fired_command_id_ = command_id; |
| 37 return true; |
| 38 } |
| 39 |
| 40 int fired_command_id_; |
| 41 bool enabled_; |
| 42 |
| 43 DISALLOW_COPY_AND_ASSIGN(TestHandler); |
| 44 }; |
| 45 |
| 46 } // namespace athena |
| 47 |
| 48 typedef test::AthenaTestBase InputManagerTest; |
| 49 |
| 50 TEST_F(InputManagerTest, Basic) { |
| 51 enum TestCommandId { |
| 52 COMMAND_A = 1, |
| 53 COMMAND_B = 2, |
| 54 COMMAND_C = 2, |
| 55 COMMAND_D = 2, |
| 56 }; |
| 57 const AcceleratorData data[] = { |
| 58 {TRIGGER_ON_PRESS, ui::VKEY_A, ui::EF_SHIFT_DOWN, COMMAND_A, AF_RESERVED}, |
| 59 {TRIGGER_ON_RELEASE, ui::VKEY_B, ui::EF_SHIFT_DOWN, COMMAND_B, |
| 60 AF_RESERVED}, |
| 61 {TRIGGER_ON_PRESS, ui::VKEY_C, ui::EF_SHIFT_DOWN, COMMAND_C, |
| 62 AF_RESERVED | AF_DEBUG}, |
| 63 {TRIGGER_ON_PRESS, ui::VKEY_D, ui::EF_SHIFT_DOWN, COMMAND_D, AF_NONE}, |
| 64 }; |
| 65 AcceleratorManager* accelerator_manager = |
| 66 InputManager::Get()->GetAcceleratorManager(); |
| 67 TestHandler test_handler; |
| 68 accelerator_manager->RegisterAccelerators( |
| 69 data, arraysize(data), &test_handler); |
| 70 |
| 71 aura::test::EventGenerator generator(root_window()); |
| 72 generator.PressKey(ui::VKEY_A, ui::EF_NONE); |
| 73 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 74 |
| 75 // Trigger on press. |
| 76 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 77 EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); |
| 78 generator.ReleaseKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 79 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 80 |
| 81 // Trigger on release. |
| 82 generator.PressKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
| 83 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 84 generator.ReleaseKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
| 85 EXPECT_EQ(COMMAND_B, test_handler.GetFiredCommandIdAndReset()); |
| 86 |
| 87 // Disable command. |
| 88 test_handler.set_enabled(false); |
| 89 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 90 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 91 test_handler.set_enabled(true); |
| 92 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 93 EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); |
| 94 |
| 95 // Debug accelerators. |
| 96 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
| 97 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 98 |
| 99 accelerator_manager->EnableDebugAccelerators(); |
| 100 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
| 101 EXPECT_EQ(COMMAND_C, test_handler.GetFiredCommandIdAndReset()); |
| 102 |
| 103 // Non reserved accelerator won't be handled unless there is |
| 104 // a view's focus manager. |
| 105 // TODO(oshima): Support view's focus manager. Investigate we can implement |
| 106 // the non reserved behavior without view's focus manager. |
| 107 generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN); |
| 108 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 109 } |
| 110 |
| 111 } // namespace athena |
OLD | NEW |