| 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
|
|
|