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 { return true; } |
| 32 virtual bool OnAcceleratorFired(int command_id, |
| 33 const ui::Accelerator& accelerator) OVERRIDE { |
| 34 fired_command_id_ = command_id; |
| 35 return true; |
| 36 } |
| 37 |
| 38 int fired_command_id_; |
| 39 bool enabled_; |
| 40 |
| 41 DISALLOW_COPY_AND_ASSIGN(TestHandler); |
| 42 }; |
| 43 |
| 44 } // namespace athena |
| 45 |
| 46 typedef test::AthenaTestBase InputManagerTest; |
| 47 |
| 48 TEST_F(InputManagerTest, Basic) { |
| 49 enum TestCommandId { |
| 50 COMMAND_A = 1, |
| 51 COMMAND_B = 2, |
| 52 COMMAND_C = 2, |
| 53 COMMAND_D = 2, |
| 54 }; |
| 55 const AcceleratorData data[] = { |
| 56 {TRIGGER_ON_PRESS, ui::VKEY_A, ui::EF_SHIFT_DOWN, COMMAND_A, AF_RESERVED}, |
| 57 {TRIGGER_ON_RELEASE, ui::VKEY_B, ui::EF_SHIFT_DOWN, COMMAND_B, |
| 58 AF_RESERVED}, |
| 59 {TRIGGER_ON_PRESS, ui::VKEY_C, ui::EF_SHIFT_DOWN, COMMAND_C, |
| 60 AF_RESERVED | AF_DEBUG}, |
| 61 {TRIGGER_ON_PRESS, ui::VKEY_D, ui::EF_SHIFT_DOWN, COMMAND_D, AF_NONE}, |
| 62 }; |
| 63 AcceleratorManager* accelerator_manager = |
| 64 InputManager::Get()->GetAcceleratorManager(); |
| 65 TestHandler test_handler; |
| 66 accelerator_manager->RegisterAccelerators( |
| 67 data, arraysize(data), &test_handler); |
| 68 |
| 69 aura::test::EventGenerator generator(root_window()); |
| 70 generator.PressKey(ui::VKEY_A, ui::EF_NONE); |
| 71 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 72 |
| 73 // Trigger on press. |
| 74 generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 75 EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); |
| 76 generator.ReleaseKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
| 77 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 78 |
| 79 // Trigger on release. |
| 80 generator.PressKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
| 81 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 82 generator.ReleaseKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
| 83 EXPECT_EQ(COMMAND_B, test_handler.GetFiredCommandIdAndReset()); |
| 84 |
| 85 // Debug accelerators. |
| 86 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
| 87 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 88 |
| 89 accelerator_manager->EnableDebugAccelerators(); |
| 90 generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
| 91 EXPECT_EQ(COMMAND_C, test_handler.GetFiredCommandIdAndReset()); |
| 92 |
| 93 // Non reserved accelerator won't be handled unless there is |
| 94 // a view's focus manager. |
| 95 // TODO(oshima): Support view's focus manager. Investigate we can implement |
| 96 // the non reserved behavior without view's focus manager. |
| 97 generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN); |
| 98 EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
| 99 } |
| 100 |
| 101 } // namespace athena |
OLD | NEW |