Chromium Code Reviews| Index: ui/keyboard/keyboard_controller_unittest.cc |
| diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc |
| index d79c9ba3d8220008bc148121eb79cacaf014ad4d..455e7f300a90eb912bb6e6a6b93abdcbe217fa30 100644 |
| --- a/ui/keyboard/keyboard_controller_unittest.cc |
| +++ b/ui/keyboard/keyboard_controller_unittest.cc |
| @@ -196,10 +196,18 @@ class KeyboardControllerTest : public testing::Test { |
| KeyboardControllerTest() {} |
| virtual ~KeyboardControllerTest() {} |
| + static void SetUpForTesting() { |
| + static bool initialized = false; |
| + if (!initialized) { |
| + ui::SetUpInputMethodFactoryForTesting(); |
|
Seigo Nonaka
2014/01/09 06:08:43
I think this function can be called multiple times
kevers
2014/01/09 15:29:09
This change is to address 331690.
Actually would
|
| + initialized = true; |
| + } |
| + } |
| + |
| virtual void SetUp() OVERRIDE { |
| aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); |
| aura_test_helper_->SetUp(); |
| - ui::SetUpInputMethodFactoryForTesting(); |
| + SetUpForTesting(); |
| focus_controller_.reset(new TestFocusController(root_window())); |
| proxy_ = new TestKeyboardControllerProxy(); |
| controller_.reset(new KeyboardController(proxy_)); |
| @@ -216,10 +224,17 @@ class KeyboardControllerTest : public testing::Test { |
| void ShowKeyboard() { |
| TestTextInputClient test_text_input_client(ui::TEXT_INPUT_TYPE_TEXT); |
| - controller_->OnTextInputStateChanged(&test_text_input_client); |
| + SetFocus(&test_text_input_client); |
| } |
| protected: |
| + void SetFocus(ui::TextInputClient* client) { |
| + ui::InputMethod* input_method = proxy()->GetInputMethod(); |
| + input_method->SetFocusedTextInputClient(client); |
| + if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) |
| + input_method->ShowImeIfNeeded(); |
| + } |
| + |
| bool WillHideKeyboard() { |
| return controller_->WillHideKeyboard(); |
| } |
| @@ -297,13 +312,11 @@ TEST_F(KeyboardControllerTest, ClickDoesNotFocusKeyboard) { |
| TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
| const gfx::Rect& root_bounds = root_window()->bounds(); |
| - ui::InputMethod* input_method = proxy()->GetInputMethod(); |
| TestTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient input_client_2(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient no_input_client_0(ui::TEXT_INPUT_TYPE_NONE); |
| TestTextInputClient no_input_client_1(ui::TEXT_INPUT_TYPE_NONE); |
| - input_method->SetFocusedTextInputClient(&input_client_0); |
| aura::Window* keyboard_container(controller()->GetContainerWindow()); |
| scoped_ptr<KeyboardContainerObserver> keyboard_container_observer( |
| @@ -311,9 +324,11 @@ TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
| keyboard_container->SetBounds(root_bounds); |
| root_window()->AddChild(keyboard_container); |
| + SetFocus(&input_client_0); |
| + |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| - input_method->SetFocusedTextInputClient(&no_input_client_0); |
| + SetFocus(&no_input_client_0); |
| // Keyboard should not immediately hide itself. It is delayed to avoid layout |
| // flicker when the focus of input field quickly change. |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| @@ -322,28 +337,27 @@ TEST_F(KeyboardControllerTest, VisibilityChangeWithTextInputTypeChange) { |
| base::MessageLoop::current()->Run(); |
| EXPECT_FALSE(keyboard_container->IsVisible()); |
| - input_method->SetFocusedTextInputClient(&input_client_1); |
| + SetFocus(&input_client_1); |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| // Schedule to hide keyboard. |
| - input_method->SetFocusedTextInputClient(&no_input_client_1); |
| + SetFocus(&no_input_client_1); |
| EXPECT_TRUE(WillHideKeyboard()); |
| // Cancel keyboard hide. |
| - input_method->SetFocusedTextInputClient(&input_client_2); |
| + SetFocus(&input_client_2); |
| EXPECT_FALSE(WillHideKeyboard()); |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| } |
| + |
| TEST_F(KeyboardControllerTest, AlwaysVisibleWhenLocked) { |
| const gfx::Rect& root_bounds = root_window()->bounds(); |
| - ui::InputMethod* input_method = proxy()->GetInputMethod(); |
| TestTextInputClient input_client_0(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient input_client_1(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient no_input_client_0(ui::TEXT_INPUT_TYPE_NONE); |
| TestTextInputClient no_input_client_1(ui::TEXT_INPUT_TYPE_NONE); |
| - input_method->SetFocusedTextInputClient(&input_client_0); |
| aura::Window* keyboard_container(controller()->GetContainerWindow()); |
| scoped_ptr<KeyboardContainerObserver> keyboard_container_observer( |
| @@ -351,24 +365,26 @@ TEST_F(KeyboardControllerTest, AlwaysVisibleWhenLocked) { |
| keyboard_container->SetBounds(root_bounds); |
| root_window()->AddChild(keyboard_container); |
| + SetFocus(&input_client_0); |
| + |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| // Lock keyboard. |
| controller()->set_lock_keyboard(true); |
| - input_method->SetFocusedTextInputClient(&no_input_client_0); |
| + SetFocus(&no_input_client_0); |
| // Keyboard should not try to hide itself as it is locked. |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| EXPECT_FALSE(WillHideKeyboard()); |
| - input_method->SetFocusedTextInputClient(&input_client_1); |
| + SetFocus(&input_client_1); |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| // Unlock keyboard. |
| controller()->set_lock_keyboard(false); |
| // Keyboard should hide when focus on no input client. |
| - input_method->SetFocusedTextInputClient(&no_input_client_1); |
| + SetFocus(&no_input_client_1); |
| EXPECT_TRUE(WillHideKeyboard()); |
| // Wait for hide keyboard to finish. |
| @@ -422,18 +438,17 @@ class KeyboardControllerUsabilityTest : public KeyboardControllerTest { |
| TEST_F(KeyboardControllerUsabilityTest, KeyboardAlwaysVisibleInUsabilityTest) { |
| const gfx::Rect& root_bounds = root_window()->bounds(); |
| - ui::InputMethod* input_method = proxy()->GetInputMethod(); |
| TestTextInputClient input_client(ui::TEXT_INPUT_TYPE_TEXT); |
| TestTextInputClient no_input_client(ui::TEXT_INPUT_TYPE_NONE); |
| - input_method->SetFocusedTextInputClient(&input_client); |
| aura::Window* keyboard_container(controller()->GetContainerWindow()); |
| keyboard_container->SetBounds(root_bounds); |
| root_window()->AddChild(keyboard_container); |
| + SetFocus(&input_client); |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| - input_method->SetFocusedTextInputClient(&no_input_client); |
| + SetFocus(&no_input_client); |
| // Keyboard should not hide itself after lost focus. |
| EXPECT_TRUE(keyboard_container->IsVisible()); |
| EXPECT_FALSE(WillHideKeyboard()); |