Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: ui/base/ime/input_method_base_unittest.cc

Issue 48393003: Add InputMethodObserver support into InputMethodBase (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix -Werror=sign-compare Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/base/ime/input_method_base.cc ('k') | ui/base/ime/input_method_ibus.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/base/ime/input_method_base.h" 5 #include "ui/base/ime/input_method_base.h"
6 6
7 #include "base/scoped_observer.h" 7 #include "base/scoped_observer.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/base/ime/dummy_text_input_client.h" 9 #include "ui/base/ime/dummy_text_input_client.h"
10 #include "ui/base/ime/input_method_observer.h" 10 #include "ui/base/ime/input_method_observer.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 TextInputClient* previous_client_; 103 TextInputClient* previous_client_;
104 TextInputClient* next_client_; 104 TextInputClient* next_client_;
105 bool call_expected_; 105 bool call_expected_;
106 bool on_will_change_focused_client_called_; 106 bool on_will_change_focused_client_called_;
107 bool on_did_change_focused_client_called_; 107 bool on_did_change_focused_client_called_;
108 bool on_text_input_state_changed_; 108 bool on_text_input_state_changed_;
109 109
110 DISALLOW_COPY_AND_ASSIGN(ClientChangeVerifier); 110 DISALLOW_COPY_AND_ASSIGN(ClientChangeVerifier);
111 }; 111 };
112 112
113 class MockInputMethodBase : public InputMethodBase { 113 class SimpleMockInputMethodBase : public InputMethodBase {
114 public: 114 public:
115 // Note: this class does not take the ownership of |verifier|. 115 SimpleMockInputMethodBase() {
116 explicit MockInputMethodBase(ClientChangeVerifier* verifier)
117 : verifier_(verifier) {
118 } 116 }
119 virtual ~MockInputMethodBase() { 117 virtual ~SimpleMockInputMethodBase() {
120 } 118 }
121 119
122 private: 120 private:
123 // Overriden from InputMethod. 121 // Overriden from InputMethod.
124 virtual bool OnUntranslatedIMEMessage( 122 virtual bool OnUntranslatedIMEMessage(
125 const base::NativeEvent& event, 123 const base::NativeEvent& event,
126 InputMethod::NativeEventResult* result) OVERRIDE { 124 InputMethod::NativeEventResult* result) OVERRIDE {
127 return false; 125 return false;
128 } 126 }
129 virtual bool DispatchKeyEvent(const base::NativeEvent&) OVERRIDE { 127 virtual bool DispatchKeyEvent(const base::NativeEvent&) OVERRIDE {
130 return false; 128 return false;
131 } 129 }
132 virtual bool DispatchFabricatedKeyEvent(const ui::KeyEvent&) OVERRIDE { 130 virtual bool DispatchFabricatedKeyEvent(const ui::KeyEvent&) OVERRIDE {
133 return false; 131 return false;
134 } 132 }
135 virtual void OnCaretBoundsChanged(const TextInputClient* clien) OVERRIDE { 133 virtual void CancelComposition(const TextInputClient* client) OVERRIDE {
136 } 134 }
137 virtual void CancelComposition(const TextInputClient* clien) OVERRIDE { 135 virtual std::string GetInputLocale() OVERRIDE{
138 }
139 virtual void OnInputLocaleChanged() OVERRIDE {
140 }
141 virtual std::string GetInputLocale() OVERRIDE {
142 return ""; 136 return "";
143 } 137 }
144 virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE { 138 virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE {
145 return base::i18n::UNKNOWN_DIRECTION; 139 return base::i18n::UNKNOWN_DIRECTION;
146 } 140 }
147 virtual bool IsActive() OVERRIDE { 141 virtual bool IsActive() OVERRIDE {
148 return false; 142 return false;
149 } 143 }
150 virtual bool IsCandidatePopupOpen() const OVERRIDE { 144 virtual bool IsCandidatePopupOpen() const OVERRIDE {
151 return false; 145 return false;
152 } 146 }
147 DISALLOW_COPY_AND_ASSIGN(SimpleMockInputMethodBase);
148 };
153 149
150 class MockInputMethodBase : public SimpleMockInputMethodBase {
151 public:
152 // Note: this class does not take the ownership of |verifier|.
153 explicit MockInputMethodBase(ClientChangeVerifier* verifier)
154 : verifier_(verifier) {
155 }
156 virtual ~MockInputMethodBase() {
157 }
158
159 private:
154 // Overriden from InputMethodBase. 160 // Overriden from InputMethodBase.
155 virtual void OnWillChangeFocusedClient(TextInputClient* focused_before, 161 virtual void OnWillChangeFocusedClient(TextInputClient* focused_before,
156 TextInputClient* focused) OVERRIDE { 162 TextInputClient* focused) OVERRIDE {
157 verifier_->OnWillChangeFocusedClient(focused_before, focused); 163 verifier_->OnWillChangeFocusedClient(focused_before, focused);
158 } 164 }
159 165
160 virtual void OnDidChangeFocusedClient(TextInputClient* focused_before, 166 virtual void OnDidChangeFocusedClient(TextInputClient* focused_before,
161 TextInputClient* focused) OVERRIDE { 167 TextInputClient* focused) OVERRIDE {
162 verifier_->OnDidChangeFocusedClient(focused_before, focused); 168 verifier_->OnDidChangeFocusedClient(focused_before, focused);
163 } 169 }
164 170
165 ClientChangeVerifier* verifier_; 171 ClientChangeVerifier* verifier_;
166 DISALLOW_COPY_AND_ASSIGN(MockInputMethodBase); 172 DISALLOW_COPY_AND_ASSIGN(MockInputMethodBase);
167 }; 173 };
168 174
169 class MockInputMethodObserver : public InputMethodObserver { 175 class SimpleMockInputMethodObserver : public InputMethodObserver {
176 public:
177 SimpleMockInputMethodObserver()
178 : on_caret_bounds_changed_(0),
179 on_input_locale_changed_(0) {
180 }
181 virtual ~SimpleMockInputMethodObserver() {
182 }
183 void Reset() {
184 on_caret_bounds_changed_ = 0;
185 on_input_locale_changed_ = 0;
186 }
187 size_t on_caret_bounds_changed() const {
188 return on_caret_bounds_changed_;
189 }
190 size_t on_input_locale_changed() const {
191 return on_input_locale_changed_;
192 }
193
194 private:
195 // Overriden from InputMethodObserver.
196 virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE{
197 }
198 virtual void OnFocus() OVERRIDE{
199 }
200 virtual void OnBlur() OVERRIDE{
201 }
202 virtual void OnUntranslatedIMEMessage(
203 const base::NativeEvent& event) OVERRIDE{
204 }
205 virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE{
206 ++on_caret_bounds_changed_;
207 }
208 virtual void OnInputLocaleChanged() OVERRIDE{
209 ++on_input_locale_changed_;
210 }
211 virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE{
212 }
213 virtual void OnInputMethodDestroyed(const InputMethod* client) OVERRIDE{
214 }
215
216 size_t on_caret_bounds_changed_;
217 size_t on_input_locale_changed_;
218 DISALLOW_COPY_AND_ASSIGN(SimpleMockInputMethodObserver);
219 };
220
221 class MockInputMethodObserver : public SimpleMockInputMethodObserver {
170 public: 222 public:
171 // Note: this class does not take the ownership of |verifier|. 223 // Note: this class does not take the ownership of |verifier|.
172 explicit MockInputMethodObserver(ClientChangeVerifier* verifier) 224 explicit MockInputMethodObserver(ClientChangeVerifier* verifier)
173 : verifier_(verifier) { 225 : verifier_(verifier) {
174 } 226 }
175 virtual ~MockInputMethodObserver() { 227 virtual ~MockInputMethodObserver() {
176 } 228 }
177 229
178 private: 230 private:
179 virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE { 231 // Overriden from SimpleMockInputMethodObserver.
180 } 232 virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE{
181 virtual void OnFocus() OVERRIDE {
182 }
183 virtual void OnBlur() OVERRIDE {
184 }
185 virtual void OnUntranslatedIMEMessage(
186 const base::NativeEvent& event) OVERRIDE {
187 }
188 virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE {
189 }
190 virtual void OnInputLocaleChanged() OVERRIDE {
191 }
192 virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE {
193 verifier_->OnTextInputStateChanged(client); 233 verifier_->OnTextInputStateChanged(client);
194 } 234 }
195 virtual void OnInputMethodDestroyed(const InputMethod* client) OVERRIDE {
196 }
197 235
198 ClientChangeVerifier* verifier_; 236 ClientChangeVerifier* verifier_;
199 DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver); 237 DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver);
200 }; 238 };
201 239
202 typedef ScopedObserver<InputMethod, InputMethodObserver> 240 typedef ScopedObserver<InputMethod, InputMethodObserver>
203 InputMethodScopedObserver; 241 InputMethodScopedObserver;
204 242
205 TEST(InputMethodBaseTest, SetFocusedTextInputClient) { 243 TEST(InputMethodBaseTest, SetFocusedTextInputClient) {
206 DummyTextInputClient text_input_client_1st; 244 DummyTextInputClient text_input_client_1st;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 SCOPED_TRACE("DetachTextInputClient must be supported for sticky client"); 423 SCOPED_TRACE("DetachTextInputClient must be supported for sticky client");
386 424
387 ASSERT_EQ(&sticky_client, input_method.GetTextInputClient()); 425 ASSERT_EQ(&sticky_client, input_method.GetTextInputClient());
388 verifier.ExpectClientChange(&sticky_client, NULL); 426 verifier.ExpectClientChange(&sticky_client, NULL);
389 input_method.DetachTextInputClient(&sticky_client); 427 input_method.DetachTextInputClient(&sticky_client);
390 EXPECT_EQ(NULL, input_method.GetTextInputClient()); 428 EXPECT_EQ(NULL, input_method.GetTextInputClient());
391 verifier.Verify(); 429 verifier.Verify();
392 } 430 }
393 } 431 }
394 432
433 TEST(InputMethodBaseTest, OnCaretBoundsChanged) {
434 DummyTextInputClient text_input_client;
435 DummyTextInputClient text_input_client_the_other;
436
437 SimpleMockInputMethodBase input_method;
438 SimpleMockInputMethodObserver input_method_observer;
439 InputMethodScopedObserver scoped_observer(&input_method_observer);
440 scoped_observer.Add(&input_method);
441
442 // Assume that the top-level-widget gains focus.
443 input_method.OnFocus();
444
445 {
446 SCOPED_TRACE("OnCaretBoundsChanged callback must not be fired when no text "
447 "input client is focused");
448 ASSERT_EQ(NULL, input_method.GetTextInputClient());
449
450 input_method_observer.Reset();
451 input_method.OnCaretBoundsChanged(&text_input_client);
452 EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
453 input_method.OnCaretBoundsChanged(NULL);
454 EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
455 }
456
457 {
458 SCOPED_TRACE("OnCaretBoundsChanged callback must be fired when and only "
459 "the event is notified from the focused text input client");
460
461 input_method.SetFocusedTextInputClient(&text_input_client);
462 ASSERT_EQ(&text_input_client, input_method.GetTextInputClient());
463
464 // Must fire the event
465 input_method_observer.Reset();
466 input_method.OnCaretBoundsChanged(&text_input_client);
467 EXPECT_EQ(1u, input_method_observer.on_caret_bounds_changed());
468
469 // Must not fire the event
470 input_method_observer.Reset();
471 input_method.OnCaretBoundsChanged(NULL);
472 EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
473
474 // Must not fire the event
475 input_method_observer.Reset();
476 input_method.OnCaretBoundsChanged(&text_input_client_the_other);
477 EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
478 }
479 }
480
481 TEST(InputMethodBaseTest, OnInputLocaleChanged) {
482 DummyTextInputClient text_input_client;
483
484 SimpleMockInputMethodBase input_method;
485 SimpleMockInputMethodObserver input_method_observer;
486 InputMethodScopedObserver scoped_observer(&input_method_observer);
487 scoped_observer.Add(&input_method);
488
489 // Assume that the top-level-widget gains focus.
490 input_method.OnFocus();
491
492 {
493 SCOPED_TRACE("OnInputLocaleChanged callback can be fired even when no text "
494 "input client is focused");
495 ASSERT_EQ(NULL, input_method.GetTextInputClient());
496
497 input_method_observer.Reset();
498 input_method.OnInputLocaleChanged();
499 EXPECT_EQ(1u, input_method_observer.on_input_locale_changed());
500
501 input_method.SetFocusedTextInputClient(&text_input_client);
502 input_method_observer.Reset();
503 input_method.OnInputLocaleChanged();
504 EXPECT_EQ(1u, input_method_observer.on_input_locale_changed());
505 }
506 }
507
395 } // namespace 508 } // namespace
396 } // namespace ui 509 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/ime/input_method_base.cc ('k') | ui/base/ime/input_method_ibus.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698