Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3320)

Unified Diff: athena/input/accelerator_manager_unittest.cc

Issue 305873002: InputManager/AcceleratorManager for athena (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix auto repeat test Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..cd80e8658d34b171dbcc5873bc33da73c90a51ff
--- /dev/null
+++ b/athena/input/accelerator_manager_unittest.cc
@@ -0,0 +1,120 @@
+// 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,
+ COMMAND_B,
+ COMMAND_C,
+ COMMAND_D,
+ COMMAND_E,
+ };
+ 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_RESERVED | AF_NON_AUTO_REPEATABLE},
+ {TRIGGER_ON_PRESS, ui::VKEY_E, ui::EF_SHIFT_DOWN, COMMAND_E, 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 auto repeatable
+ generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN);
+ EXPECT_EQ(COMMAND_D, test_handler.GetFiredCommandIdAndReset());
+ generator.PressKey(ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_IS_REPEAT);
+ EXPECT_EQ(kInvalidCommandId, 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_E, ui::EF_SHIFT_DOWN);
+ EXPECT_EQ(kInvalidCommandId, test_handler.GetFiredCommandIdAndReset());
+}
+
+} // namespace athena

Powered by Google App Engine
This is Rietveld 408576698