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 |