Index: views/ime/mock_input_method.cc |
diff --git a/views/ime/mock_input_method.cc b/views/ime/mock_input_method.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8864552304f421ed34543f243e8f40cec5ac8220 |
--- /dev/null |
+++ b/views/ime/mock_input_method.cc |
@@ -0,0 +1,154 @@ |
+// Copyright (c) 2011 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 "views/ime/mock_input_method.h" |
+ |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+#include "ui/base/keycodes/keyboard_codes.h" |
+#include "views/events/event.h" |
+#include "views/widget/widget.h" |
+ |
+namespace views { |
+ |
+MockInputMethod::MockInputMethod() |
+ : composition_changed_(false), |
+ focus_changed_(false), |
+ text_input_type_changed_(false), |
+ caret_bounds_changed_(false), |
+ cancel_composition_called_(false), |
+ locale_("en-US"), |
+ direction_(base::i18n::LEFT_TO_RIGHT), |
+ active_(true) { |
+} |
+ |
+MockInputMethod::~MockInputMethod() { |
+} |
+ |
+void MockInputMethod::Init(Widget* widget) { |
+ InputMethodBase::Init(widget); |
+} |
+ |
+void MockInputMethod::DispatchKeyEvent(const KeyEvent& key) { |
+ bool handled = (composition_changed_ || result_text_.length()) && |
+ !IsTextInputTypeNone(); |
+ |
+ ClearStates(); |
+ if (handled) { |
+ KeyEvent mock_key(ui::ET_KEY_PRESSED, ui::VKEY_PROCESSKEY, key.flags()); |
+ DispatchKeyEventPostIME(mock_key); |
+ } else { |
+ DispatchKeyEventPostIME(key); |
+ } |
+ |
+ if (focus_changed_) |
+ return; |
+ |
+ TextInputClient* client = GetTextInputClient(); |
+ if (client) { |
+ if (handled) { |
+ if (result_text_.length()) |
+ client->InsertText(result_text_); |
+ if (composition_changed_) { |
+ if (composition_.text.length()) |
+ client->SetCompositionText(composition_); |
+ else |
+ client->ClearCompositionText(); |
+ } |
+ } else if (key.type() == ui::ET_KEY_PRESSED) { |
+ char16 ch = key.GetCharacter(); |
+ client->InsertChar(ch, key.flags()); |
+ } |
+ } |
+ |
+ ClearResult(); |
+} |
+ |
+void MockInputMethod::OnTextInputTypeChanged(View* view) { |
+ DCHECK(IsViewFocused(view)); |
+ text_input_type_changed_ = true; |
+} |
+ |
+void MockInputMethod::OnCaretBoundsChanged(View* view) { |
+ DCHECK(IsViewFocused(view)); |
+ caret_bounds_changed_ = true; |
+} |
+ |
+void MockInputMethod::CancelComposition(View* view) { |
+ DCHECK(IsViewFocused(view)); |
+ cancel_composition_called_ = true; |
+ ClearResult(); |
+} |
+ |
+std::string MockInputMethod::GetInputLocale() { |
+ return locale_; |
+} |
+ |
+base::i18n::TextDirection MockInputMethod::GetInputTextDirection() { |
+ return direction_; |
+} |
+ |
+bool MockInputMethod::IsActive() { |
+ return active_; |
+} |
+ |
+void MockInputMethod::FocusedViewWillChange() { |
+ TextInputClient* client = GetTextInputClient(); |
+ if (client && client->HasCompositionText()) |
+ client->ConfirmCompositionText(); |
+ focus_changed_ = true; |
+ ClearResult(); |
+} |
+ |
+void MockInputMethod::Clear() { |
+ ClearStates(); |
+ ClearResult(); |
+} |
+ |
+void MockInputMethod::SetCompositionTextForNextKey( |
+ const ui::CompositionText& composition) { |
+ composition_changed_ = true; |
+ composition_ = composition; |
+} |
+ |
+void MockInputMethod::SetResultTextForNextKey(const string16& result) { |
+ result_text_ = result; |
+} |
+ |
+void MockInputMethod::SetInputLocale(const std::string& locale) { |
+ if (locale_ != locale) { |
+ locale_ = locale; |
+ OnInputMethodChanged(); |
+ } |
+} |
+ |
+void MockInputMethod::SetInputTextDirection( |
+ base::i18n::TextDirection direction) { |
+ if (direction_ != direction) { |
+ direction_ = direction; |
+ OnInputMethodChanged(); |
+ } |
+} |
+ |
+void MockInputMethod::SetActive(bool active) { |
+ if (active_ != active) { |
+ active_ = active; |
+ OnInputMethodChanged(); |
+ } |
+} |
+ |
+void MockInputMethod::ClearStates() { |
+ focus_changed_ = false; |
+ text_input_type_changed_ = false; |
+ caret_bounds_changed_ = false; |
+ cancel_composition_called_ = false; |
+} |
+ |
+void MockInputMethod::ClearResult() { |
+ composition_.Clear(); |
+ composition_changed_ = false; |
+ result_text_.clear(); |
+} |
+ |
+} // namespace views |