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

Unified Diff: ui/aura_shell/shell_accelerator_controller_unittest.cc

Issue 8689003: Register global accelerators and add placeholders for handling them. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 1 month 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
« no previous file with comments | « ui/aura_shell/shell_accelerator_controller.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura_shell/shell_accelerator_controller_unittest.cc
diff --git a/ui/aura_shell/shell_accelerator_controller_unittest.cc b/ui/aura_shell/shell_accelerator_controller_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..39e1c6486045eaf07d07bb42a8dc6f985242abfb
--- /dev/null
+++ b/ui/aura_shell/shell_accelerator_controller_unittest.cc
@@ -0,0 +1,171 @@
+// Copyright (c) 2011 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 "ui/aura_shell/shell.h"
+#include "ui/aura_shell/shell_accelerator_controller.h"
+#include "ui/aura_shell/test/aura_shell_test_base.h"
+
+namespace aura_shell {
+namespace test {
+
+namespace {
+class TestTarget : public ui::AcceleratorTarget {
+ public:
+ TestTarget() : accelerator_pressed_(false) {};
+ virtual ~TestTarget() {};
+
+ bool accelerator_pressed() const {
+ return accelerator_pressed_;
+ }
+
+ void set_accelerator_pressed(bool accelerator_pressed) {
+ accelerator_pressed_ = accelerator_pressed;
+ }
+
+ // Overridden from ui::AcceleratorTarget:
+ virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
+
+ private:
+ bool accelerator_pressed_;
+};
+
+bool TestTarget::AcceleratorPressed(const ui::Accelerator& accelerator) {
+ set_accelerator_pressed(true);
+ return true;
+}
+
+} // namespace
+
+class ShellAcceleratorControllerTest : public AuraShellTestBase {
+ public:
+ ShellAcceleratorControllerTest() {};
+ virtual ~ShellAcceleratorControllerTest() {};
+
+ static ShellAcceleratorController* GetController();
+
+ // testing::Test:
+ // virtual void SetUp() OVERRIDE;
+ // virtual void TearDown() OVERRIDE;
+};
+
+ShellAcceleratorController* ShellAcceleratorControllerTest::GetController() {
+ return Shell::GetInstance()->accelerator_controller();
+}
+
+// void ShellAcceleratorControllerTest::SetUp() {
+// AuraShellTestBase::SetUp();
+// }
+
+// void ShellAcceleratorControllerTest::TearDown() {
+// AuraShellTestBase::TearDown();
+// }
+
+TEST_F(ShellAcceleratorControllerTest, Register) {
+ const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
+ TestTarget target;
+ GetController()->Register(accelerator_a, &target);
+
+ // The registered accelerator is processed.
+ EXPECT_TRUE(GetController()->Process(accelerator_a));
+ EXPECT_TRUE(target.accelerator_pressed());
+}
+
+TEST_F(ShellAcceleratorControllerTest, RegisterMultipleTarget) {
+ const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
+ TestTarget target1;
+ GetController()->Register(accelerator_a, &target1);
+ TestTarget target2;
+ GetController()->Register(accelerator_a, &target2);
+
+ // If multiple targets are registered with the same accelerator, the target
+ // registered later processes the accelerator.
+ EXPECT_TRUE(GetController()->Process(accelerator_a));
+ EXPECT_FALSE(target1.accelerator_pressed());
+ EXPECT_TRUE(target2.accelerator_pressed());
+}
+
+TEST_F(ShellAcceleratorControllerTest, Unregister) {
+ const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
+ TestTarget target;
+ GetController()->Register(accelerator_a, &target);
+ const ui::Accelerator accelerator_b(ui::VKEY_B, false, false, false);
+ GetController()->Register(accelerator_b, &target);
+
+ // Unregistering a different accelerator does not affect the other
+ // accelerator.
+ GetController()->Unregister(accelerator_b, &target);
+ EXPECT_TRUE(GetController()->Process(accelerator_a));
+ EXPECT_TRUE(target.accelerator_pressed());
+
+ // The unregistered accelerator is no longer processed.
+ target.set_accelerator_pressed(false);
+ GetController()->Unregister(accelerator_a, &target);
+ EXPECT_FALSE(GetController()->Process(accelerator_a));
+ EXPECT_FALSE(target.accelerator_pressed());
+}
+
+TEST_F(ShellAcceleratorControllerTest, UnregisterAll) {
+ const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
+ TestTarget target1;
+ GetController()->Register(accelerator_a, &target1);
+ const ui::Accelerator accelerator_b(ui::VKEY_B, false, false, false);
+ GetController()->Register(accelerator_b, &target1);
+ const ui::Accelerator accelerator_c(ui::VKEY_C, false, false, false);
+ TestTarget target2;
+ GetController()->Register(accelerator_c, &target2);
+ GetController()->UnregisterAll(&target1);
+
+ // All the accelerators registered for |target1| are no longer processed.
+ EXPECT_FALSE(GetController()->Process(accelerator_a));
+ EXPECT_FALSE(GetController()->Process(accelerator_b));
+ EXPECT_FALSE(target1.accelerator_pressed());
+
+ // UnregisterAll with a different target does not affect the other target.
+ EXPECT_TRUE(GetController()->Process(accelerator_c));
+ EXPECT_TRUE(target2.accelerator_pressed());
+}
+
+TEST_F(ShellAcceleratorControllerTest, Process) {
+ const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
+ TestTarget target1;
+ GetController()->Register(accelerator_a, &target1);
+
+ // The registered accelerator is processed.
+ EXPECT_TRUE(GetController()->Process(accelerator_a));
+ EXPECT_TRUE(target1.accelerator_pressed());
+
+ // The non-registered accelerator is not processed.
+ const ui::Accelerator accelerator_b(ui::VKEY_B, false, false, false);
+ EXPECT_FALSE(GetController()->Process(accelerator_b));
+}
+
+TEST_F(ShellAcceleratorControllerTest, GlobalAccelerators) {
+ // TODO(mazda): Uncomment the followings once they are implemented.
+ // CycleBackward
+ // EXPECT_TRUE(GetController()->Process(
+ // ui::Accelerator(ui::VKEY_TAB, true, false, true)));
+ // CycleForwrard
+ // EXPECT_TRUE(GetController()->Process(
+ // ui::Accelerator(ui::VKEY_TAB, false, false, true)));
+ // TakeScreenshot
+ // EXPECT_TRUE(GetController()->Process(
+ // ui::Accelerator(ui::VKEY_F5, false, true, false)));
+ // EXPECT_TRUE(GetController()->Process(
+ // ui::Accelerator(ui::VKEY_PRINT, false, false, false)));
+#if !defined(NDEBUG)
+ // TODO(mazda): Callig RotateScreen in unit test causes a crash because of
+ // "pure virtual method called" for some reasons. Need to investigate.
+ // RotateScreen
+ // EXPECT_TRUE(GetController()->Process(
+ // ui::Accelerator(ui::VKEY_HOME, false, true, false)));
+#if !defined(OS_LINUX)
+ // ToggleDesktopFullScreen (not implemented yet on Linux)
+ EXPECT_TRUE(GetController()->Process(
+ ui::Accelerator(ui::VKEY_F11, false, true, false)));
+#endif
+#endif
+}
+
+} // namespace test
+} // namespace aura_shell
« no previous file with comments | « ui/aura_shell/shell_accelerator_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698