Index: athena/input/accelerator_manager_unittest.cc |
diff --git a/athena/input/accelerator_manager_unittest.cc b/athena/input/accelerator_manager_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3eed449f806c01d4415796f30ee78e2c47bd1d65 |
--- /dev/null |
+++ b/athena/input/accelerator_manager_unittest.cc |
@@ -0,0 +1,111 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "athena/input/public/accelerator_manager.h" |
+ |
+#include "athena/input/public/input_manager.h" |
+#include "athena/test/athena_test_base.h" |
+#include "ui/aura/test/event_generator.h" |
+ |
+namespace athena { |
+namespace { |
+ |
+const int kInvalidCommandId = -1; |
+ |
+class TestHandler : public AcceleratorHandler { |
+ public: |
+ TestHandler() : fired_command_id_(kInvalidCommandId), enabled_(true) {} |
+ virtual ~TestHandler() {} |
+ |
+ void set_enabled(bool enabled) { enabled_ = enabled; } |
+ |
+ int GetFiredCommandIdAndReset() { |
+ int fired = fired_command_id_; |
+ fired_command_id_ = kInvalidCommandId; |
+ return fired; |
+ } |
+ |
+ private: |
+ // AcceleratorHandler: |
+ virtual bool IsCommandEnabled(int command_id) const OVERRIDE { |
+ return enabled_; |
+ } |
+ virtual bool OnAcceleratorFired(int command_id, |
+ const ui::Accelerator& accelerator) OVERRIDE { |
+ fired_command_id_ = command_id; |
+ return true; |
+ } |
+ |
+ int fired_command_id_; |
+ bool enabled_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestHandler); |
+}; |
+ |
+} // namespace athena |
+ |
+typedef test::AthenaTestBase InputManagerTest; |
+ |
+TEST_F(InputManagerTest, Basic) { |
+ enum TestCommandId { |
+ COMMAND_A = 1, |
+ COMMAND_B = 2, |
+ COMMAND_C = 2, |
+ COMMAND_D = 2, |
+ }; |
+ const AcceleratorData data[] = { |
+ {TRIGGER_ON_PRESS, ui::VKEY_A, ui::EF_SHIFT_DOWN, COMMAND_A, AF_RESERVED}, |
+ {TRIGGER_ON_RELEASE, ui::VKEY_B, ui::EF_SHIFT_DOWN, COMMAND_B, |
+ AF_RESERVED}, |
+ {TRIGGER_ON_PRESS, ui::VKEY_C, ui::EF_SHIFT_DOWN, COMMAND_C, |
+ AF_RESERVED | AF_DEBUG}, |
+ {TRIGGER_ON_PRESS, ui::VKEY_D, ui::EF_SHIFT_DOWN, COMMAND_D, AF_NONE}, |
+ }; |
+ AcceleratorManager* accelerator_manager = |
+ InputManager::Get()->GetAcceleratorManager(); |
+ TestHandler test_handler; |
+ accelerator_manager->RegisterAccelerators( |
+ data, arraysize(data), &test_handler); |
+ |
+ aura::test::EventGenerator generator(root_window()); |
+ generator.PressKey(ui::VKEY_A, ui::EF_NONE); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ // Trigger on press. |
+ generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); |
+ generator.ReleaseKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ // Trigger on release. |
+ generator.PressKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+ generator.ReleaseKey(ui::VKEY_B, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(COMMAND_B, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ // Disable command. |
+ test_handler.set_enabled(false); |
+ generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+ test_handler.set_enabled(true); |
+ generator.PressKey(ui::VKEY_A, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(COMMAND_A, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ // Debug accelerators. |
+ generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ accelerator_manager->EnableDebugAccelerators(); |
+ generator.PressKey(ui::VKEY_C, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(COMMAND_C, test_handler.GetFiredCommandIdAndReset()); |
+ |
+ // Non reserved accelerator won't be handled unless there is |
+ // a view's focus manager. |
+ // TODO(oshima): Support view's focus manager. Investigate we can implement |
+ // the non reserved behavior without view's focus manager. |
+ generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN); |
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset()); |
+} |
+ |
+} // namespace athena |