| Index: ui/base/ime/input_method_auralinux_unittest.cc
|
| diff --git a/ui/base/ime/input_method_auralinux_unittest.cc b/ui/base/ime/input_method_auralinux_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3efc467dfcd74cae7547841624573c10b96ab3ca
|
| --- /dev/null
|
| +++ b/ui/base/ime/input_method_auralinux_unittest.cc
|
| @@ -0,0 +1,722 @@
|
| +// Copyright 2015 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/base/ime/input_method_auralinux.h"
|
| +
|
| +#include "base/memory/singleton.h"
|
| +#include "base/strings/string_split.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/base/ime/dummy_text_input_client.h"
|
| +#include "ui/base/ime/input_method_delegate.h"
|
| +#include "ui/base/ime/input_method_initializer.h"
|
| +#include "ui/base/ime/linux/fake_input_method_context.h"
|
| +#include "ui/base/ime/linux/linux_input_method_context_factory.h"
|
| +#include "ui/events/event.h"
|
| +
|
| +namespace ui {
|
| +namespace {
|
| +
|
| +const base::char16 kActionCommit = L'C';
|
| +const base::char16 kActionCompositionStart = L'S';
|
| +const base::char16 kActionCompositionUpdate = L'U';
|
| +const base::char16 kActionCompositionEnd = L'E';
|
| +
|
| +class TestResult {
|
| + public:
|
| + static TestResult* GetInstance() { return Singleton<TestResult>::get(); }
|
| +
|
| + void RecordAction(const base::string16& action) {
|
| + recorded_actions_.push_back(action);
|
| + }
|
| +
|
| + void ExpectAction(const std::string& action) {
|
| + expected_actions_.push_back(base::ASCIIToUTF16(action));
|
| + }
|
| +
|
| + void Verify() {
|
| + size_t len = recorded_actions_.size();
|
| + size_t len_exp = expected_actions_.size();
|
| + EXPECT_EQ(len_exp, len);
|
| + for (size_t i = 0; i < len; i++)
|
| + EXPECT_EQ(expected_actions_[i], recorded_actions_[i]);
|
| + recorded_actions_.clear();
|
| + expected_actions_.clear();
|
| + }
|
| +
|
| + private:
|
| + std::vector<base::string16> recorded_actions_;
|
| + std::vector<base::string16> expected_actions_;
|
| +};
|
| +
|
| +class LinuxInputMethodContextForTesting : public LinuxInputMethodContext {
|
| + public:
|
| + LinuxInputMethodContextForTesting(LinuxInputMethodContextDelegate* delegate,
|
| + bool is_simple)
|
| + : delegate_(delegate),
|
| + is_simple_(is_simple),
|
| + is_sync_mode_(false),
|
| + eat_key_(false),
|
| + focused_(false) {}
|
| +
|
| + void SetSyncMode(bool is_sync_mode) { is_sync_mode_ = is_sync_mode; }
|
| + void SetEatKey(bool eat_key) { eat_key_ = eat_key; }
|
| +
|
| + void AddCommitAction(const std::string& text) {
|
| + actions_.push_back(base::ASCIIToUTF16("C:" + text));
|
| + }
|
| +
|
| + void AddCompositionUpdateAction(const std::string& text) {
|
| + actions_.push_back(base::ASCIIToUTF16("U:" + text));
|
| + }
|
| +
|
| + void AddCompositionStartAction() {
|
| + actions_.push_back(base::ASCIIToUTF16("S"));
|
| + }
|
| +
|
| + void AddCompositionEndAction() {
|
| + actions_.push_back(base::ASCIIToUTF16("E"));
|
| + }
|
| +
|
| + protected:
|
| + bool DispatchKeyEvent(const ui::KeyEvent& key_event) override {
|
| + if (!is_sync_mode_) {
|
| + actions_.clear();
|
| + return eat_key_;
|
| + }
|
| +
|
| + for (const auto& action : actions_) {
|
| + std::vector<base::string16> parts;
|
| + base::SplitString(action, L':', &parts);
|
| + base::char16 id = parts[0][0];
|
| + base::string16 param;
|
| + if (parts.size() > 1)
|
| + param = parts[1];
|
| + if (id == kActionCommit) {
|
| + delegate_->OnCommit(param);
|
| + } else if (id == kActionCompositionStart) {
|
| + delegate_->OnPreeditStart();
|
| + } else if (id == kActionCompositionUpdate) {
|
| + CompositionText comp;
|
| + comp.text = param;
|
| + delegate_->OnPreeditChanged(comp);
|
| + } else if (id == kActionCompositionEnd) {
|
| + delegate_->OnPreeditEnd();
|
| + }
|
| + }
|
| +
|
| + actions_.clear();
|
| + return eat_key_;
|
| + }
|
| +
|
| + void Reset() override {}
|
| +
|
| + void Focus() override { focused_ = true; }
|
| +
|
| + void Blur() override { focused_ = false; }
|
| +
|
| + void SetCursorLocation(const gfx::Rect& rect) override {
|
| + cursor_position_ = rect;
|
| + }
|
| +
|
| + private:
|
| + LinuxInputMethodContextDelegate* delegate_;
|
| + std::vector<base::string16> actions_;
|
| + bool is_simple_;
|
| + bool is_sync_mode_;
|
| + bool eat_key_;
|
| + bool focused_;
|
| + gfx::Rect cursor_position_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(LinuxInputMethodContextForTesting);
|
| +};
|
| +
|
| +class LinuxInputMethodContextFactoryForTesting
|
| + : public LinuxInputMethodContextFactory {
|
| + public:
|
| + LinuxInputMethodContextFactoryForTesting(){};
|
| +
|
| + scoped_ptr<LinuxInputMethodContext> CreateInputMethodContext(
|
| + LinuxInputMethodContextDelegate* delegate,
|
| + bool is_simple) const override {
|
| + return scoped_ptr<ui::LinuxInputMethodContext>(
|
| + new LinuxInputMethodContextForTesting(delegate, is_simple));
|
| + };
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(LinuxInputMethodContextFactoryForTesting);
|
| +};
|
| +
|
| +class InputMethodDelegateForTesting : public internal::InputMethodDelegate {
|
| + public:
|
| + InputMethodDelegateForTesting(){};
|
| + ~InputMethodDelegateForTesting() override{};
|
| +
|
| + bool DispatchKeyEventPostIME(const ui::KeyEvent& key_event) override {
|
| + std::string action;
|
| + switch (key_event.type()) {
|
| + case ET_KEY_PRESSED:
|
| + action = "keydown:";
|
| + break;
|
| + case ET_KEY_RELEASED:
|
| + action = "keyup:";
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + std::stringstream ss;
|
| + ss << key_event.key_code();
|
| + action += std::string(ss.str());
|
| + TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16(action));
|
| + return false;
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(InputMethodDelegateForTesting);
|
| +};
|
| +
|
| +class TextInputClientForTesting : public DummyTextInputClient {
|
| + public:
|
| + explicit TextInputClientForTesting(TextInputType text_input_type)
|
| + : DummyTextInputClient(text_input_type){};
|
| +
|
| + base::string16 composition_text;
|
| +
|
| + protected:
|
| + void SetCompositionText(const CompositionText& composition) override {
|
| + composition_text = composition.text;
|
| + TestResult::GetInstance()->RecordAction(
|
| + base::ASCIIToUTF16("compositionstart"));
|
| + TestResult::GetInstance()->RecordAction(
|
| + base::ASCIIToUTF16("compositionupdate:") + composition.text);
|
| + }
|
| +
|
| + bool HasCompositionText() const override { return !composition_text.empty(); }
|
| +
|
| + void ConfirmCompositionText() override {
|
| + TestResult::GetInstance()->RecordAction(
|
| + base::ASCIIToUTF16("compositionend"));
|
| + TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("textinput:") +
|
| + composition_text);
|
| + composition_text.clear();
|
| + }
|
| +
|
| + void ClearCompositionText() override {
|
| + TestResult::GetInstance()->RecordAction(
|
| + base::ASCIIToUTF16("compositionend"));
|
| + composition_text.clear();
|
| + }
|
| +
|
| + void InsertText(const base::string16& text) override {
|
| + if (HasCompositionText()) {
|
| + TestResult::GetInstance()->RecordAction(
|
| + base::ASCIIToUTF16("compositionend"));
|
| + }
|
| + TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("textinput:") +
|
| + text);
|
| + composition_text.clear();
|
| + }
|
| +
|
| + void InsertChar(base::char16 ch, int flags) override {
|
| + std::stringstream ss;
|
| + ss << ch;
|
| + TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("keypress:") +
|
| + base::ASCIIToUTF16(ss.str()));
|
| + }
|
| +};
|
| +
|
| +class InputMethodAuraLinuxTest : public testing::Test {
|
| + protected:
|
| + InputMethodAuraLinuxTest()
|
| + : factory_(NULL),
|
| + input_method_auralinux_(NULL),
|
| + delegate_(NULL),
|
| + context_(NULL),
|
| + context_simple_(NULL) {
|
| + factory_ = new LinuxInputMethodContextFactoryForTesting();
|
| + LinuxInputMethodContextFactory::SetInstance(factory_);
|
| + test_result_ = TestResult::GetInstance();
|
| + }
|
| + ~InputMethodAuraLinuxTest() override {
|
| + delete factory_;
|
| + factory_ = NULL;
|
| + test_result_ = NULL;
|
| + }
|
| +
|
| + void SetUp() override {
|
| + delegate_ = new InputMethodDelegateForTesting();
|
| + input_method_auralinux_ = new InputMethodAuraLinux(delegate_);
|
| + input_method_auralinux_->OnFocus();
|
| + context_ = static_cast<LinuxInputMethodContextForTesting*>(
|
| + input_method_auralinux_->GetContextForTesting(false));
|
| + context_simple_ = static_cast<LinuxInputMethodContextForTesting*>(
|
| + input_method_auralinux_->GetContextForTesting(true));
|
| + }
|
| +
|
| + void TearDown() override {
|
| + context_->SetSyncMode(false);
|
| + context_->SetEatKey(false);
|
| +
|
| + context_simple_->SetSyncMode(false);
|
| + context_simple_->SetEatKey(false);
|
| +
|
| + context_ = NULL;
|
| + context_simple_ = NULL;
|
| +
|
| + delete input_method_auralinux_;
|
| + input_method_auralinux_ = NULL;
|
| + delete delegate_;
|
| + delegate_ = NULL;
|
| + }
|
| +
|
| + LinuxInputMethodContextFactoryForTesting* factory_;
|
| + InputMethodAuraLinux* input_method_auralinux_;
|
| + InputMethodDelegateForTesting* delegate_;
|
| + LinuxInputMethodContextForTesting* context_;
|
| + LinuxInputMethodContextForTesting* context_simple_;
|
| + TestResult* test_result_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinuxTest);
|
| +};
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, BasicSyncModeTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCommitAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:97");
|
| + test_result_->Verify();
|
| +
|
| + input_method_auralinux_->DetachTextInputClient(client.get());
|
| + client.reset(new TextInputClientForTesting(TEXT_INPUT_TYPE_PASSWORD));
|
| + context_simple_->SetSyncMode(true);
|
| + context_simple_->SetEatKey(false);
|
| +
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:97");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, BasicAsyncModeTest) {
|
| + context_->SetSyncMode(false);
|
| + context_->SetEatKey(true);
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| + input_method_auralinux_->OnCommit(base::ASCIIToUTF16("a"));
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("textinput:a");
|
| + test_result_->Verify();
|
| +
|
| + input_method_auralinux_->DetachTextInputClient(client.get());
|
| + client.reset(new TextInputClientForTesting(TEXT_INPUT_TYPE_PASSWORD));
|
| + context_simple_->SetSyncMode(false);
|
| + context_simple_->SetEatKey(false);
|
| +
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:97");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, IBusUSTest) {
|
| + context_->SetSyncMode(false);
|
| + context_->SetEatKey(true);
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + // IBus mutes the key down.
|
| + test_result_->Verify();
|
| +
|
| + // IBus simulates a faked key down and handle it in sync mode.
|
| + context_->SetSyncMode(true);
|
| + context_->AddCommitAction("a");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:97");
|
| + test_result_->Verify();
|
| +
|
| + // IBus does NOT handle the key up.
|
| + context_->SetEatKey(false);
|
| + input_method_auralinux_->DispatchKeyEvent(
|
| + KeyEvent(ET_KEY_RELEASED, VKEY_A, 0));
|
| +
|
| + test_result_->ExpectAction("keyup:65");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, IBusPinyinTest) {
|
| + context_->SetSyncMode(false);
|
| + context_->SetEatKey(true);
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + // IBus issues a standalone set_composition action.
|
| + input_method_auralinux_->OnPreeditStart();
|
| + CompositionText comp;
|
| + comp.text = base::ASCIIToUTF16("a");
|
| + input_method_auralinux_->OnPreeditChanged(comp);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + // IBus issues a commit text with composition after muting the space key down.
|
| + input_method_auralinux_->DispatchKeyEvent(
|
| + KeyEvent(ET_KEY_PRESSED, VKEY_SPACE, 0));
|
| +
|
| + input_method_auralinux_->OnPreeditEnd();
|
| + input_method_auralinux_->OnCommit(base::ASCIIToUTF16("A"));
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("textinput:A");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +// crbug.com/463491
|
| +TEST_F(InputMethodAuraLinuxTest, DeadKeyTest) {
|
| + context_simple_->SetSyncMode(true);
|
| + context_simple_->SetEatKey(true);
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_NONE));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent dead_key(ET_KEY_PRESSED, VKEY_OEM_7, 0);
|
| + dead_key.set_character(L'\'');
|
| + input_method_auralinux_->DispatchKeyEvent(dead_key);
|
| +
|
| + // The single quote key is muted.
|
| + test_result_->ExpectAction("keydown:222");
|
| + test_result_->Verify();
|
| +
|
| + context_simple_->AddCommitAction("X");
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + // The following A key generates the accent key: รก.
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:88");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, MultiCommitsTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCommitAction("a");
|
| + context_->AddCommitAction("b");
|
| + context_->AddCommitAction("c");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("textinput:abc");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, MixedCompositionAndCommitTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCommitAction("a");
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("b");
|
| + context_->AddCommitAction("c");
|
| + context_->AddCompositionUpdateAction("d");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("textinput:ac");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:d");
|
| + test_result_->Verify();
|
| +
|
| + context_->AddCommitAction("e");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("textinput:e");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, CompositionEndWithoutCommitTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->AddCompositionEndAction();
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, CompositionEndWithEmptyCommitTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->AddCompositionEndAction();
|
| + context_->AddCommitAction("");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, CompositionEndWithCommitTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->AddCompositionEndAction();
|
| + context_->AddCommitAction("b");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + // Verifies single char commit under composition mode will call InsertText
|
| + // intead of InsertChar.
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("textinput:b");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, CompositionUpdateWithCommitTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("a");
|
| + context_->AddCommitAction("b");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("textinput:b");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, MixedAsyncAndSyncTest) {
|
| + context_->SetSyncMode(false);
|
| + context_->SetEatKey(true);
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| + CompositionText comp;
|
| + comp.text = base::ASCIIToUTF16("a");
|
| + input_method_auralinux_->OnPreeditChanged(comp);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->SetSyncMode(true);
|
| + context_->AddCompositionEndAction();
|
| + context_->AddCommitAction("b");
|
| +
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("textinput:b");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, MixedSyncAndAsyncTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionStartAction();
|
| + context_->AddCompositionUpdateAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'a');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->SetSyncMode(false);
|
| +
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| + input_method_auralinux_->OnCommit(base::ASCIIToUTF16("b"));
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("textinput:b");
|
| + test_result_->Verify();
|
| +
|
| + context_->SetSyncMode(true);
|
| + context_->AddCommitAction("c");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:99");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +TEST_F(InputMethodAuraLinuxTest, ReleaseKeyTest) {
|
| + context_->SetSyncMode(true);
|
| + context_->SetEatKey(true);
|
| + context_->AddCompositionUpdateAction("a");
|
| +
|
| + scoped_ptr<TextInputClientForTesting> client(
|
| + new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
|
| + input_method_auralinux_->SetFocusedTextInputClient(client.get());
|
| + input_method_auralinux_->OnTextInputTypeChanged(client.get());
|
| +
|
| + KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
|
| + key.set_character(L'A');
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("keydown:229");
|
| + test_result_->ExpectAction("compositionstart");
|
| + test_result_->ExpectAction("compositionupdate:a");
|
| + test_result_->Verify();
|
| +
|
| + context_->SetEatKey(false);
|
| + context_->AddCommitAction("b");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("compositionend");
|
| + test_result_->ExpectAction("textinput:b");
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:65");
|
| + test_result_->Verify();
|
| +
|
| + context_->AddCommitAction("c");
|
| + input_method_auralinux_->DispatchKeyEvent(key);
|
| +
|
| + test_result_->ExpectAction("textinput:c");
|
| + test_result_->ExpectAction("keydown:65");
|
| + test_result_->ExpectAction("keypress:65");
|
| + test_result_->Verify();
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace ui
|
|
|