| OLD | NEW | 
|---|
| 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/remote_input_method_win.h" | 5 #include "ui/base/ime/remote_input_method_win.h" | 
| 6 | 6 | 
| 7 #include <InputScope.h> | 7 #include <InputScope.h> | 
| 8 | 8 | 
| 9 #include <vector> | 9 #include <vector> | 
| 10 | 10 | 
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 185   bool cancel_composition_called_; | 185   bool cancel_composition_called_; | 
| 186   bool text_input_client_updated_called_; | 186   bool text_input_client_updated_called_; | 
| 187   std::vector<int32> input_scopes_; | 187   std::vector<int32> input_scopes_; | 
| 188   std::vector<gfx::Rect> composition_character_bounds_; | 188   std::vector<gfx::Rect> composition_character_bounds_; | 
| 189   DISALLOW_COPY_AND_ASSIGN(MockRemoteInputMethodDelegateWin); | 189   DISALLOW_COPY_AND_ASSIGN(MockRemoteInputMethodDelegateWin); | 
| 190 }; | 190 }; | 
| 191 | 191 | 
| 192 class MockInputMethodObserver : public InputMethodObserver { | 192 class MockInputMethodObserver : public InputMethodObserver { | 
| 193  public: | 193  public: | 
| 194   MockInputMethodObserver() | 194   MockInputMethodObserver() | 
| 195     : on_text_input_type_changed_(0), | 195     : on_text_input_state_changed_(0), | 
| 196       on_caret_bounds_changed_(0), |  | 
| 197       on_text_input_state_changed_(0), |  | 
| 198       on_input_method_destroyed_changed_(0) { | 196       on_input_method_destroyed_changed_(0) { | 
| 199   } | 197   } | 
| 200   virtual ~MockInputMethodObserver() { | 198   virtual ~MockInputMethodObserver() { | 
| 201   } | 199   } | 
| 202   void Reset() { | 200   void Reset() { | 
| 203     on_text_input_type_changed_ = 0; |  | 
| 204     on_caret_bounds_changed_ = 0; |  | 
| 205     on_text_input_state_changed_ = 0; | 201     on_text_input_state_changed_ = 0; | 
| 206     on_input_method_destroyed_changed_ = 0; | 202     on_input_method_destroyed_changed_ = 0; | 
| 207   } | 203   } | 
| 208   size_t on_text_input_type_changed() const { |  | 
| 209     return on_text_input_type_changed_; |  | 
| 210   } |  | 
| 211   size_t on_caret_bounds_changed() const { |  | 
| 212     return on_caret_bounds_changed_; |  | 
| 213   } |  | 
| 214   size_t on_text_input_state_changed() const { | 204   size_t on_text_input_state_changed() const { | 
| 215     return on_text_input_state_changed_; | 205     return on_text_input_state_changed_; | 
| 216   } | 206   } | 
| 217   size_t on_input_method_destroyed_changed() const { | 207   size_t on_input_method_destroyed_changed() const { | 
| 218     return on_input_method_destroyed_changed_; | 208     return on_input_method_destroyed_changed_; | 
| 219   } | 209   } | 
| 220 | 210 | 
| 221  private: | 211  private: | 
| 222   // Overriden from InputMethodObserver. | 212   // Overriden from InputMethodObserver. | 
| 223   virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE { | 213   virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE { | 
| 224     ++on_text_input_type_changed_; |  | 
| 225   } | 214   } | 
| 226   virtual void OnFocus() OVERRIDE { | 215   virtual void OnFocus() OVERRIDE { | 
| 227   } | 216   } | 
| 228   virtual void OnBlur() OVERRIDE { | 217   virtual void OnBlur() OVERRIDE { | 
| 229   } | 218   } | 
| 230   virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE { | 219   virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE { | 
| 231     ++on_caret_bounds_changed_; |  | 
| 232   } | 220   } | 
| 233   virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE { | 221   virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE { | 
| 234     ++on_text_input_state_changed_; | 222     ++on_text_input_state_changed_; | 
| 235   } | 223   } | 
| 236   virtual void OnInputMethodDestroyed(const InputMethod* client) OVERRIDE { | 224   virtual void OnInputMethodDestroyed(const InputMethod* client) OVERRIDE { | 
| 237     ++on_input_method_destroyed_changed_; | 225     ++on_input_method_destroyed_changed_; | 
| 238   } | 226   } | 
| 239 | 227 | 
| 240   size_t on_text_input_type_changed_; |  | 
| 241   size_t on_caret_bounds_changed_; |  | 
| 242   size_t on_text_input_state_changed_; | 228   size_t on_text_input_state_changed_; | 
| 243   size_t on_input_method_destroyed_changed_; | 229   size_t on_input_method_destroyed_changed_; | 
| 244   DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver); | 230   DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver); | 
| 245 }; | 231 }; | 
| 246 | 232 | 
| 247 typedef ScopedObserver<InputMethod, InputMethodObserver> | 233 typedef ScopedObserver<InputMethod, InputMethodObserver> | 
| 248     InputMethodScopedObserver; | 234     InputMethodScopedObserver; | 
| 249 | 235 | 
| 250 TEST(RemoteInputMethodWinTest, RemoteInputMethodPrivateWin) { | 236 TEST(RemoteInputMethodWinTest, RemoteInputMethodPrivateWin) { | 
| 251   InputMethod* other_ptr = static_cast<InputMethod*>(NULL) + 1; | 237   InputMethod* other_ptr = static_cast<InputMethod*>(NULL) + 1; | 
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 760   ASSERT_EQ(&text_input_client_the_other, input_method->GetTextInputClient()); | 746   ASSERT_EQ(&text_input_client_the_other, input_method->GetTextInputClient()); | 
| 761   EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed()); | 747   EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed()); | 
| 762   input_method_observer.Reset(); | 748   input_method_observer.Reset(); | 
| 763 | 749 | 
| 764   input_method->DetachTextInputClient(&text_input_client_the_other); | 750   input_method->DetachTextInputClient(&text_input_client_the_other); | 
| 765   ASSERT_TRUE(input_method->GetTextInputClient() == NULL); | 751   ASSERT_TRUE(input_method->GetTextInputClient() == NULL); | 
| 766   EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed()); | 752   EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed()); | 
| 767   input_method_observer.Reset(); | 753   input_method_observer.Reset(); | 
| 768 } | 754 } | 
| 769 | 755 | 
| 770 TEST(RemoteInputMethodWinTest, OnCaretBoundsChanged_Observer) { |  | 
| 771   DummyTextInputClient text_input_client; |  | 
| 772   DummyTextInputClient text_input_client_the_other; |  | 
| 773 |  | 
| 774   MockInputMethodObserver input_method_observer; |  | 
| 775   MockInputMethodDelegate delegate_; |  | 
| 776   scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); |  | 
| 777   InputMethodScopedObserver scoped_observer(&input_method_observer); |  | 
| 778   scoped_observer.Add(input_method.get()); |  | 
| 779 |  | 
| 780   { |  | 
| 781     SCOPED_TRACE("OnCaretBoundsChanged callback must not be fired when no text " |  | 
| 782                  "input client is focused"); |  | 
| 783     ASSERT_EQ(NULL, input_method->GetTextInputClient()); |  | 
| 784 |  | 
| 785     input_method_observer.Reset(); |  | 
| 786     input_method->OnCaretBoundsChanged(&text_input_client); |  | 
| 787     EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed()); |  | 
| 788     input_method->OnCaretBoundsChanged(NULL); |  | 
| 789     EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed()); |  | 
| 790   } |  | 
| 791 |  | 
| 792   { |  | 
| 793     SCOPED_TRACE("OnCaretBoundsChanged callback must be fired when and only " |  | 
| 794                  "the event is notified from the focused text input client"); |  | 
| 795 |  | 
| 796     input_method->SetFocusedTextInputClient(&text_input_client); |  | 
| 797     ASSERT_EQ(&text_input_client, input_method->GetTextInputClient()); |  | 
| 798 |  | 
| 799     // Must fire the event |  | 
| 800     input_method_observer.Reset(); |  | 
| 801     input_method->OnCaretBoundsChanged(&text_input_client); |  | 
| 802     EXPECT_EQ(1u, input_method_observer.on_caret_bounds_changed()); |  | 
| 803 |  | 
| 804     // Must not fire the event |  | 
| 805     input_method_observer.Reset(); |  | 
| 806     input_method->OnCaretBoundsChanged(NULL); |  | 
| 807     EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed()); |  | 
| 808 |  | 
| 809     // Must not fire the event |  | 
| 810     input_method_observer.Reset(); |  | 
| 811     input_method->OnCaretBoundsChanged(&text_input_client_the_other); |  | 
| 812     EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed()); |  | 
| 813   } |  | 
| 814 } |  | 
| 815 |  | 
| 816 TEST(RemoteInputMethodWinTest, OnInputMethodDestroyed_Observer) { | 756 TEST(RemoteInputMethodWinTest, OnInputMethodDestroyed_Observer) { | 
| 817   DummyTextInputClient text_input_client; | 757   DummyTextInputClient text_input_client; | 
| 818   DummyTextInputClient text_input_client_the_other; | 758   DummyTextInputClient text_input_client_the_other; | 
| 819 | 759 | 
| 820   MockInputMethodObserver input_method_observer; | 760   MockInputMethodObserver input_method_observer; | 
| 821   InputMethodScopedObserver scoped_observer(&input_method_observer); | 761   InputMethodScopedObserver scoped_observer(&input_method_observer); | 
| 822 | 762 | 
| 823   MockInputMethodDelegate delegate_; | 763   MockInputMethodDelegate delegate_; | 
| 824   scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); | 764   scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); | 
| 825   input_method->AddObserver(&input_method_observer); | 765   input_method->AddObserver(&input_method_observer); | 
| 826 | 766 | 
| 827   EXPECT_EQ(0u, input_method_observer.on_input_method_destroyed_changed()); | 767   EXPECT_EQ(0u, input_method_observer.on_input_method_destroyed_changed()); | 
| 828   input_method.reset(); | 768   input_method.reset(); | 
| 829   EXPECT_EQ(1u, input_method_observer.on_input_method_destroyed_changed()); | 769   EXPECT_EQ(1u, input_method_observer.on_input_method_destroyed_changed()); | 
| 830 } | 770 } | 
| 831 | 771 | 
| 832 }  // namespace | 772 }  // namespace | 
| 833 }  // namespace ui | 773 }  // namespace ui | 
| OLD | NEW | 
|---|