Chromium Code Reviews| Index: chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
| diff --git a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
| index 31de3d9a49e674b43f0fa9f2e0df6f25b13b2c6e..4dd8efb025e884fe09ac270e9952824d430b426b 100644 |
| --- a/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
| +++ b/chrome/browser/ui/views/ime/input_ime_apitest_nonchromeos.cc |
| @@ -2,13 +2,18 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/extensions/extension_apitest.h" |
| +#include "chrome/browser/ui/input_method/input_method_engine.h" |
| #include "chrome/browser/ui/views/frame/browser_view.h" |
| #include "chrome/common/chrome_switches.h" |
| +#include "extensions/test/extension_test_message_listener.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_tree_host.h" |
| #include "ui/base/ime/dummy_text_input_client.h" |
| +#include "ui/base/ime/ime_bridge.h" |
| #include "ui/base/ime/input_method.h" |
| +#include "ui/base/ime/mock_ime_input_context_handler.h" |
| namespace extensions { |
| @@ -16,29 +21,80 @@ class InputImeApiTest : public ExtensionApiTest { |
| public: |
| InputImeApiTest() {} |
| + // extensions::ExtensionApiTest |
| + void SetUpOnMainThread() override; |
| + |
| protected: |
| void SetUpCommandLine(base::CommandLine* command_line) override { |
| ExtensionApiTest::SetUpCommandLine(command_line); |
| command_line->AppendSwitch(switches::kEnableInputImeAPI); |
| } |
| + ui::InputMethod* input_method; |
| + |
| private: |
| DISALLOW_COPY_AND_ASSIGN(InputImeApiTest); |
| }; |
| +void InputImeApiTest::SetUpOnMainThread() { |
| + BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
| + input_method = browser_view->GetNativeWindow()->GetHost()->GetInputMethod(); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(InputImeApiTest, CreateWindowTest) { |
| // Manipulates the focused text input client because the follow cursor |
| // window requires the text input focus. |
| - BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); |
| - ui::InputMethod* input_method = |
| - browser_view->GetNativeWindow()->GetHost()->GetInputMethod(); |
| scoped_ptr<ui::DummyTextInputClient> client( |
| new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT)); |
| input_method->SetFocusedTextInputClient(client.get()); |
| ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
| - |
| input_method->DetachTextInputClient(client.get()); |
| } |
| +IN_PROC_BROWSER_TEST_F(InputImeApiTest, FocusBlurTest) { |
|
Shu Chen
2016/03/11 01:47:25
Please combine all the tests as a single api test.
Azure Wei
2016/03/16 03:07:24
Test for setComposition/onCompositionBoundsChange
|
| + ExtensionTestMessageListener focus_listener("get_focus_event", false); |
| + ExtensionTestMessageListener blur_listener("get_blur_event", false); |
| + scoped_ptr<ui::DummyTextInputClient> client1( |
| + new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT)); |
| + scoped_ptr<ui::DummyTextInputClient> client2( |
| + new ui::DummyTextInputClient(ui::TEXT_INPUT_TYPE_TEXT)); |
| + input_method->SetFocusedTextInputClient(client1.get()); |
| + |
| + ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
| + |
| + ASSERT_TRUE(focus_listener.WaitUntilSatisfied()) << message_; |
| + |
| + // Focus to the second text input client. |
| + input_method->SetFocusedTextInputClient(client2.get()); |
| + ASSERT_TRUE(blur_listener.WaitUntilSatisfied()) << message_; |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(InputImeApiTest, CommitTextAndSetCompositionTest) { |
| + scoped_ptr<ui::MockIMEInputContextHandler> mock_input_context( |
| + new ui::MockIMEInputContextHandler()); |
| + ui::IMEBridge::Get()->SetInputContextHandler(mock_input_context.get()); |
| + |
| + ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
| + |
| + // Test input.ime.commitText API. |
| + ASSERT_EQ(mock_input_context->commit_text_call_count(), 1); |
| + ASSERT_EQ(mock_input_context->last_commit_text(), "test_commit_text"); |
| + |
| + // Test input.ime.setComposition API. |
| + ASSERT_EQ(mock_input_context->update_preedit_text_call_count(), 1); |
| + ui::MockIMEInputContextHandler::UpdateCompositionTextArg set_composition_arg = |
| + mock_input_context->last_update_composition_arg(); |
| + ASSERT_EQ(set_composition_arg.composition_text.text, |
| + base::UTF8ToUTF16("test_composition_text")); |
| + gfx::Range selection(2, 2); |
| + ASSERT_EQ(set_composition_arg.composition_text.selection, selection); |
| + ASSERT_EQ(set_composition_arg.cursor_pos, 2U); |
| + ASSERT_TRUE(set_composition_arg.is_visible); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(InputImeApiTest, CompositionBoundsChangeTest) { |
| + ASSERT_TRUE(RunExtensionTest("input_ime_nonchromeos")) << message_; |
| +} |
| + |
| } // namespace extensions |