| Index: ash/accelerators/accelerator_controller_unittest.cc
|
| diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc
|
| index b5f304aea7e75730aa0943fdad8904459e07da35..06d733ea64377d26d956b7245f253f205fbf0a2a 100644
|
| --- a/ash/accelerators/accelerator_controller_unittest.cc
|
| +++ b/ash/accelerators/accelerator_controller_unittest.cc
|
| @@ -6,6 +6,7 @@
|
| #include "ash/brightness_control_delegate.h"
|
| #include "ash/caps_lock_delegate.h"
|
| #include "ash/ime/event.h"
|
| +#include "ash/ime_control_delegate.h"
|
| #include "ash/screenshot_delegate.h"
|
| #include "ash/shell.h"
|
| #include "ash/shell_window_ids.h"
|
| @@ -51,6 +52,16 @@ class TestTarget : public ui::AcceleratorTarget {
|
| DISALLOW_COPY_AND_ASSIGN(TestTarget);
|
| };
|
|
|
| +class PostImeAccelerator : public ui::Accelerator {
|
| + public:
|
| + PostImeAccelerator(ui::KeyboardCode keycode,
|
| + bool shift_pressed, bool ctrl_pressed, bool alt_pressed)
|
| + : ui::Accelerator(keycode, shift_pressed, ctrl_pressed, alt_pressed) {
|
| + set_type(ui::ET_TRANSLATED_KEY_PRESS);
|
| + }
|
| +};
|
| +typedef ui::Accelerator PreImeAccelerator;
|
| +
|
| class DummyScreenshotDelegate : public ScreenshotDelegate {
|
| public:
|
| DummyScreenshotDelegate()
|
| @@ -198,6 +209,53 @@ class DummyBrightnessControlDelegate : public BrightnessControlDelegate {
|
| DISALLOW_COPY_AND_ASSIGN(DummyBrightnessControlDelegate);
|
| };
|
|
|
| +class DummyImeControlDelegate : public ImeControlDelegate {
|
| + public:
|
| + explicit DummyImeControlDelegate(bool consume)
|
| + : consume_(consume),
|
| + handle_next_ime_count_(0),
|
| + handle_previous_ime_count_(0),
|
| + handle_switch_ime_count_(0) {
|
| + }
|
| + virtual ~DummyImeControlDelegate() {}
|
| +
|
| + virtual bool HandleNextIme() OVERRIDE {
|
| + ++handle_next_ime_count_;
|
| + return consume_;
|
| + }
|
| + virtual bool HandlePreviousIme() OVERRIDE {
|
| + ++handle_previous_ime_count_;
|
| + return consume_;
|
| + }
|
| + virtual bool HandleSwitchIme(const ui::Accelerator& accelerator) OVERRIDE {
|
| + ++handle_switch_ime_count_;
|
| + last_accelerator_ = accelerator;
|
| + return consume_;
|
| + }
|
| +
|
| + int handle_next_ime_count() const {
|
| + return handle_next_ime_count_;
|
| + }
|
| + int handle_previous_ime_count() const {
|
| + return handle_previous_ime_count_;
|
| + }
|
| + int handle_switch_ime_count() const {
|
| + return handle_switch_ime_count_;
|
| + }
|
| + const ui::Accelerator& last_accelerator() const {
|
| + return last_accelerator_;
|
| + }
|
| +
|
| + private:
|
| + const bool consume_;
|
| + int handle_next_ime_count_;
|
| + int handle_previous_ime_count_;
|
| + int handle_switch_ime_count_;
|
| + ui::Accelerator last_accelerator_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DummyImeControlDelegate);
|
| +};
|
| +
|
| bool TestTarget::AcceleratorPressed(const ui::Accelerator& accelerator) {
|
| ++accelerator_pressed_count_;
|
| return true;
|
| @@ -302,7 +360,7 @@ TEST_F(AcceleratorControllerTest, Process) {
|
|
|
| #if defined(OS_WIN) || defined(USE_X11)
|
| TEST_F(AcceleratorControllerTest, ProcessOnce) {
|
| - const ui::Accelerator accelerator_a(ui::VKEY_A, false, false, false);
|
| + PostImeAccelerator accelerator_a(ui::VKEY_A, false, false, false);
|
| TestTarget target;
|
| GetController()->Register(accelerator_a, &target);
|
|
|
| @@ -345,51 +403,51 @@ TEST_F(AcceleratorControllerTest, ProcessOnce) {
|
| TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| // CycleBackward
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, true, false, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, true, false, false)));
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_TAB, true, false, true)));
|
| + PostImeAccelerator(ui::VKEY_TAB, true, false, true)));
|
| // CycleForward
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, false, false, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, false, false, false)));
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_TAB, false, false, true)));
|
| + PostImeAccelerator(ui::VKEY_TAB, false, false, true)));
|
| // Take screenshot / partial screenshot
|
| // True should always be returned regardless of the existence of the delegate.
|
| {
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, false, true, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, false, true, false)));
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_PRINT, false, false, false)));
|
| + PostImeAccelerator(ui::VKEY_PRINT, false, false, false)));
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, true, true, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, true, true, false)));
|
| DummyScreenshotDelegate* delegate = new DummyScreenshotDelegate;
|
| GetController()->SetScreenshotDelegate(
|
| scoped_ptr<ScreenshotDelegate>(delegate).Pass());
|
| EXPECT_EQ(0, delegate->handle_take_screenshot_count());
|
| EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, false, true, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, false, true, false)));
|
| EXPECT_EQ(1, delegate->handle_take_screenshot_count());
|
| EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_PRINT, false, false, false)));
|
| + PostImeAccelerator(ui::VKEY_PRINT, false, false, false)));
|
| EXPECT_EQ(2, delegate->handle_take_screenshot_count());
|
| EXPECT_EQ(0, delegate->handle_take_partial_screenshot_count());
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F5, true, true, false)));
|
| + PostImeAccelerator(ui::VKEY_F5, true, true, false)));
|
| EXPECT_EQ(2, delegate->handle_take_screenshot_count());
|
| EXPECT_EQ(1, delegate->handle_take_partial_screenshot_count());
|
| }
|
| // ToggleCapsLock
|
| {
|
| EXPECT_FALSE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
|
| + PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
|
| DummyCapsLockDelegate* delegate = new DummyCapsLockDelegate(false);
|
| GetController()->SetCapsLockDelegate(
|
| scoped_ptr<CapsLockDelegate>(delegate).Pass());
|
| EXPECT_EQ(0, delegate->handle_caps_lock_count());
|
| EXPECT_FALSE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
|
| + PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
|
| EXPECT_EQ(1, delegate->handle_caps_lock_count());
|
| }
|
| {
|
| @@ -398,13 +456,13 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| scoped_ptr<CapsLockDelegate>(delegate).Pass());
|
| EXPECT_EQ(0, delegate->handle_caps_lock_count());
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_LWIN, true, false, false)));
|
| + PostImeAccelerator(ui::VKEY_LWIN, true, false, false)));
|
| EXPECT_EQ(1, delegate->handle_caps_lock_count());
|
| }
|
| // Volume
|
| - const ui::Accelerator f8(ui::VKEY_F8, false, false, false);
|
| - const ui::Accelerator f9(ui::VKEY_F9, false, false, false);
|
| - const ui::Accelerator f10(ui::VKEY_F10, false, false, false);
|
| + const PostImeAccelerator f8(ui::VKEY_F8, false, false, false);
|
| + const PostImeAccelerator f9(ui::VKEY_F9, false, false, false);
|
| + const PostImeAccelerator f10(ui::VKEY_F10, false, false, false);
|
| {
|
| EXPECT_FALSE(GetController()->Process(f8));
|
| EXPECT_FALSE(GetController()->Process(f9));
|
| @@ -443,9 +501,11 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| EXPECT_EQ(1, delegate->handle_volume_up_count());
|
| EXPECT_EQ(f10, delegate->last_accelerator());
|
| }
|
| - const ui::Accelerator volume_mute(ui::VKEY_VOLUME_MUTE, false, false, false);
|
| - const ui::Accelerator volume_down(ui::VKEY_VOLUME_DOWN, false, false, false);
|
| - const ui::Accelerator volume_up(ui::VKEY_VOLUME_UP, false, false, false);
|
| + const PostImeAccelerator volume_mute(
|
| + ui::VKEY_VOLUME_MUTE, false, false, false);
|
| + const PostImeAccelerator volume_down(
|
| + ui::VKEY_VOLUME_DOWN, false, false, false);
|
| + const PostImeAccelerator volume_up(ui::VKEY_VOLUME_UP, false, false, false);
|
| {
|
| DummyVolumeControlDelegate* delegate =
|
| new DummyVolumeControlDelegate(false);
|
| @@ -482,8 +542,8 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| EXPECT_EQ(volume_up, delegate->last_accelerator());
|
| }
|
| // Brightness
|
| - const ui::Accelerator f6(ui::VKEY_F6, false, false, false);
|
| - const ui::Accelerator f7(ui::VKEY_F7, false, false, false);
|
| + const PostImeAccelerator f6(ui::VKEY_F6, false, false, false);
|
| + const PostImeAccelerator f7(ui::VKEY_F7, false, false, false);
|
| {
|
| EXPECT_FALSE(GetController()->Process(f6));
|
| EXPECT_FALSE(GetController()->Process(f7));
|
| @@ -516,9 +576,9 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| }
|
| #if defined(OS_CHROMEOS)
|
| // ui::VKEY_BRIGHTNESS_DOWN/UP are not defined on Windows.
|
| - const ui::Accelerator brightness_down(
|
| + const PostImeAccelerator brightness_down(
|
| ui::VKEY_BRIGHTNESS_DOWN, false, false, false);
|
| - const ui::Accelerator brightness_up(
|
| + const PostImeAccelerator brightness_up(
|
| ui::VKEY_BRIGHTNESS_UP, false, false, false);
|
| {
|
| DummyBrightnessControlDelegate* delegate =
|
| @@ -552,26 +612,113 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) {
|
| #if !defined(NDEBUG)
|
| // RotateScreen
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_HOME, false, true, false)));
|
| + PostImeAccelerator(ui::VKEY_HOME, false, true, false)));
|
| // ToggleCompactWindowMode
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_A, false, true, true)));
|
| + PostImeAccelerator(ui::VKEY_A, false, true, true)));
|
| #if !defined(OS_LINUX)
|
| // ToggleDesktopFullScreen (not implemented yet on Linux)
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_F11, false, true, false)));
|
| + PostImeAccelerator(ui::VKEY_F11, false, true, false)));
|
| #endif
|
|
|
| // Exit
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_Q, true, true ,false)));
|
| + PostImeAccelerator(ui::VKEY_Q, true, true ,false)));
|
| #endif
|
|
|
| #if defined(OS_CHROMEOS)
|
| EXPECT_TRUE(GetController()->Process(
|
| - ui::Accelerator(ui::VKEY_L, true, true, false)));
|
| + PostImeAccelerator(ui::VKEY_L, true, true, false)));
|
| #endif
|
| }
|
|
|
| +TEST_F(AcceleratorControllerTest, GlobalAcceleratorsPreIme) {
|
| + // Make sure post-IME shortcuts are ignored in the pre-IME phase.
|
| + {
|
| + const PreImeAccelerator f8(ui::VKEY_F8, false, false, false);
|
| + const PostImeAccelerator f8_post(ui::VKEY_F8, false, false, false);
|
| + DummyVolumeControlDelegate* delegate = new DummyVolumeControlDelegate(true);
|
| + GetController()->SetVolumeControlDelegate(
|
| + scoped_ptr<VolumeControlDelegate>(delegate).Pass());
|
| + EXPECT_EQ(0, delegate->handle_volume_mute_count());
|
| + EXPECT_FALSE(GetController()->Process(f8));
|
| + EXPECT_EQ(0, delegate->handle_volume_mute_count());
|
| + EXPECT_TRUE(GetController()->Process(f8_post));
|
| + EXPECT_EQ(1, delegate->handle_volume_mute_count());
|
| + }
|
| +
|
| + // Test IME shortcuts.
|
| + {
|
| + // TODO(yusukes): Add a test for Alt+Shift+Release.
|
| + const ui::Accelerator control_space(ui::VKEY_SPACE, false, true, false);
|
| + const ui::Accelerator convert(ui::VKEY_CONVERT, false, false, false);
|
| + const ui::Accelerator non_convert(ui::VKEY_NONCONVERT, false, false, false);
|
| + const ui::Accelerator wide_half_1(
|
| + ui::VKEY_DBE_SBCSCHAR, false, false, false);
|
| + const ui::Accelerator wide_half_2(
|
| + ui::VKEY_DBE_DBCSCHAR, false, false, false);
|
| + const ui::Accelerator hangul(ui::VKEY_HANGUL, false, false, false);
|
| + const ui::Accelerator shift_space(ui::VKEY_SPACE, true, false, false);
|
| + EXPECT_FALSE(GetController()->Process(control_space));
|
| + EXPECT_FALSE(GetController()->Process(convert));
|
| + EXPECT_FALSE(GetController()->Process(non_convert));
|
| + EXPECT_FALSE(GetController()->Process(wide_half_1));
|
| + EXPECT_FALSE(GetController()->Process(wide_half_2));
|
| + EXPECT_FALSE(GetController()->Process(hangul));
|
| + EXPECT_FALSE(GetController()->Process(shift_space));
|
| + DummyImeControlDelegate* delegate = new DummyImeControlDelegate(true);
|
| + GetController()->SetImeControlDelegate(
|
| + scoped_ptr<ImeControlDelegate>(delegate).Pass());
|
| + EXPECT_EQ(0, delegate->handle_previous_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(control_space));
|
| + EXPECT_EQ(1, delegate->handle_previous_ime_count());
|
| + EXPECT_EQ(0, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(convert));
|
| + EXPECT_EQ(1, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(non_convert));
|
| + EXPECT_EQ(2, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(wide_half_1));
|
| + EXPECT_EQ(3, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(wide_half_2));
|
| + EXPECT_EQ(4, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(hangul));
|
| + EXPECT_EQ(5, delegate->handle_switch_ime_count());
|
| + EXPECT_TRUE(GetController()->Process(shift_space));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| +
|
| + // Make sure pre-IME shortcuts are ignored in the post-IME phase.
|
| + const PostImeAccelerator control_space_post(
|
| + ui::VKEY_SPACE, false, true, false);
|
| + const PostImeAccelerator convert_post(
|
| + ui::VKEY_CONVERT, false, false, false);
|
| + const PostImeAccelerator non_convert_post(
|
| + ui::VKEY_NONCONVERT, false, false, false);
|
| + const PostImeAccelerator wide_half_1_post(
|
| + ui::VKEY_DBE_SBCSCHAR, false, false, false);
|
| + const PostImeAccelerator wide_half_2_post(
|
| + ui::VKEY_DBE_DBCSCHAR, false, false, false);
|
| + const PostImeAccelerator hangul_post(ui::VKEY_HANGUL, false, false, false);
|
| + const PostImeAccelerator shift_space_post(
|
| + ui::VKEY_SPACE, true, false, false);
|
| + EXPECT_EQ(1, delegate->handle_previous_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(control_space_post));
|
| + EXPECT_EQ(1, delegate->handle_previous_ime_count());
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(convert_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(non_convert_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(wide_half_1_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(wide_half_2_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(hangul_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + EXPECT_FALSE(GetController()->Process(shift_space_post));
|
| + EXPECT_EQ(6, delegate->handle_switch_ime_count());
|
| + }
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace ash
|
|
|