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

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc

Issue 119133003: Make InputMethodEngine manage its descriptor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 months 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/input_method/input_method_manager_impl.h" 5 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "chrome/browser/chromeos/input_method/input_method_engine_interface.h"
16 #include "chrome/browser/chromeos/input_method/mock_candidate_window_controller. h" 17 #include "chrome/browser/chromeos/input_method/mock_candidate_window_controller. h"
18 #include "chrome/browser/chromeos/input_method/mock_input_method_engine.h"
17 #include "chromeos/ime/extension_ime_util.h" 19 #include "chromeos/ime/extension_ime_util.h"
18 #include "chromeos/ime/fake_input_method_delegate.h" 20 #include "chromeos/ime/fake_input_method_delegate.h"
19 #include "chromeos/ime/mock_component_extension_ime_manager_delegate.h" 21 #include "chromeos/ime/mock_component_extension_ime_manager_delegate.h"
20 #include "chromeos/ime/mock_xkeyboard.h" 22 #include "chromeos/ime/mock_xkeyboard.h"
21 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
22 #include "ui/base/accelerators/accelerator.h" 24 #include "ui/base/accelerators/accelerator.h"
23 #include "ui/base/ime/chromeos/mock_ime_engine_handler.h" 25 #include "ui/base/ime/chromeos/mock_ime_engine_handler.h"
24 #include "ui/events/keycodes/keyboard_codes.h" 26 #include "ui/events/keycodes/keyboard_codes.h"
25 27
26 namespace chromeos { 28 namespace chromeos {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 virtual void CandidateWindowClosed(InputMethodManager* manager) OVERRIDE { 200 virtual void CandidateWindowClosed(InputMethodManager* manager) OVERRIDE {
199 ++candidate_window_closed_count_; 201 ++candidate_window_closed_count_;
200 } 202 }
201 203
202 int candidate_window_opened_count_; 204 int candidate_window_opened_count_;
203 int candidate_window_closed_count_; 205 int candidate_window_closed_count_;
204 206
205 private: 207 private:
206 DISALLOW_COPY_AND_ASSIGN(TestCandidateWindowObserver); 208 DISALLOW_COPY_AND_ASSIGN(TestCandidateWindowObserver);
207 }; 209 };
208
209 } // namespace 210 } // namespace
210 211
211 TEST_F(InputMethodManagerImplTest, TestGetXKeyboard) { 212 TEST_F(InputMethodManagerImplTest, TestGetXKeyboard) {
212 EXPECT_TRUE(manager_->GetXKeyboard()); 213 EXPECT_TRUE(manager_->GetXKeyboard());
213 EXPECT_EQ(xkeyboard_, manager_->GetXKeyboard()); 214 EXPECT_EQ(xkeyboard_, manager_->GetXKeyboard());
214 } 215 }
215 216
216 TEST_F(InputMethodManagerImplTest, TestCandidateWindowObserver) { 217 TEST_F(InputMethodManagerImplTest, TestCandidateWindowObserver) {
217 TestCandidateWindowObserver observer; 218 TestCandidateWindowObserver observer;
218 candidate_window_controller_->NotifyCandidateWindowOpened(); // nop 219 candidate_window_controller_->NotifyCandidateWindowOpened(); // nop
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 EXPECT_EQ(1, observer.input_method_changed_count_); 905 EXPECT_EQ(1, observer.input_method_changed_count_);
905 EXPECT_EQ(ids[0], 906 EXPECT_EQ(ids[0],
906 manager_->GetCurrentInputMethod().id()); 907 manager_->GetCurrentInputMethod().id());
907 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_); 908 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_);
908 909
909 // Add two Extension IMEs. 910 // Add two Extension IMEs.
910 std::vector<std::string> layouts; 911 std::vector<std::string> layouts;
911 layouts.push_back("us"); 912 layouts.push_back("us");
912 std::vector<std::string> languages; 913 std::vector<std::string> languages;
913 languages.push_back("en-US"); 914 languages.push_back("en-US");
915
914 const std::string ext1_id = 916 const std::string ext1_id =
915 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"); 917 extension_ime_util::GetInputMethodID("deadbeef", "engine_id");
916 manager_->AddInputMethodExtension( 918 const InputMethodDescriptor descriptor1(ext1_id,
917 ext1_id, 919 "deadbeef input method",
918 "deadbeef input method", 920 layouts,
919 layouts, 921 languages,
920 languages, 922 false, // is_login_keyboard
921 GURL(), 923 GURL(),
922 GURL(), 924 GURL());
923 NULL); 925 MockInputMethodEngine engine(descriptor1);
924 IBusBridge::Get()->SetEngineHandler(ext1_id, mock_engine_handler_.get()); 926 manager_->AddInputMethodExtension(ext1_id, &engine);
925 927
926 // Extension IMEs are not enabled by default. 928 // Extension IMEs are not enabled by default.
927 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 929 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
928 930
929 std::vector<std::string> extension_ime_ids; 931 std::vector<std::string> extension_ime_ids;
930 extension_ime_ids.push_back( 932 extension_ime_ids.push_back(ext1_id);
931 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"));
932 manager_->SetEnabledExtensionImes(&extension_ime_ids); 933 manager_->SetEnabledExtensionImes(&extension_ime_ids);
933 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 934 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
934 935
935 { 936 {
936 scoped_ptr<InputMethodDescriptors> methods( 937 scoped_ptr<InputMethodDescriptors> methods(
937 manager_->GetActiveInputMethods()); 938 manager_->GetActiveInputMethods());
938 ASSERT_EQ(2U, methods->size()); 939 ASSERT_EQ(2U, methods->size());
939 EXPECT_EQ(extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), 940 // Ext IMEs should be at the end of the list.
940 // Ext IMEs should be at the end of the list. 941 EXPECT_EQ(ext1_id, methods->at(1).id());
941 methods->at(1).id());
942 } 942 }
943
943 const std::string ext2_id = 944 const std::string ext2_id =
944 extension_ime_util::GetInputMethodID("cafebabe", "engine_id"); 945 extension_ime_util::GetInputMethodID("cafebabe", "engine_id");
945 manager_->AddInputMethodExtension( 946 const InputMethodDescriptor descriptor2(ext2_id,
946 ext2_id, 947 "cafebabe input method",
947 "cafebabe input method", 948 layouts,
948 layouts, 949 languages,
949 languages, 950 false, // is_login_keyboard
950 GURL(), 951 GURL(),
951 GURL(), 952 GURL());
952 NULL); 953 MockInputMethodEngine engine2(descriptor2);
953 IBusBridge::Get()->SetEngineHandler(ext2_id, mock_engine_handler_.get()); 954 manager_->AddInputMethodExtension(ext2_id, &engine2);
954 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 955 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
955 956
956 extension_ime_ids.push_back( 957 extension_ime_ids.push_back(ext2_id);
957 extension_ime_util::GetInputMethodID("cafebabe", "engine_id"));
958 manager_->SetEnabledExtensionImes(&extension_ime_ids); 958 manager_->SetEnabledExtensionImes(&extension_ime_ids);
959 EXPECT_EQ(3U, manager_->GetNumActiveInputMethods()); 959 EXPECT_EQ(3U, manager_->GetNumActiveInputMethods());
960 { 960 {
961 scoped_ptr<InputMethodDescriptors> methods( 961 scoped_ptr<InputMethodDescriptors> methods(
962 manager_->GetActiveInputMethods()); 962 manager_->GetActiveInputMethods());
963 ASSERT_EQ(3U, methods->size()); 963 ASSERT_EQ(3U, methods->size());
964 EXPECT_EQ(extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), 964 // Ext IMEs should be at the end of the list.
965 // Ext IMEs should be at the end of the list. 965 EXPECT_EQ(ext1_id, methods->at(1).id());
966 methods->at(1).id()); 966 EXPECT_EQ(ext2_id, methods->at(2).id());
967 } 967 }
968 968
969 // Remove them. 969 // Remove them.
970 manager_->RemoveInputMethodExtension( 970 manager_->RemoveInputMethodExtension(ext1_id);
971 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"));
972 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 971 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
973 manager_->RemoveInputMethodExtension( 972 manager_->RemoveInputMethodExtension(ext2_id);
974 extension_ime_util::GetInputMethodID("cafebabe", "engine_id"));
975 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 973 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
976 } 974 }
977 975
978 TEST_F(InputMethodManagerImplTest, TestAddExtensionInputThenLockScreen) { 976 TEST_F(InputMethodManagerImplTest, TestAddExtensionInputThenLockScreen) {
979 TestObserver observer; 977 TestObserver observer;
980 InitComponentExtension(); 978 InitComponentExtension();
981 manager_->AddObserver(&observer); 979 manager_->AddObserver(&observer);
982 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN); 980 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN);
983 std::vector<std::string> ids; 981 std::vector<std::string> ids;
984 ids.push_back("xkb:us::eng"); 982 ids.push_back("xkb:us::eng");
985 EXPECT_TRUE(manager_->EnableInputMethods(ids)); 983 EXPECT_TRUE(manager_->EnableInputMethods(ids));
986 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 984 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
987 EXPECT_EQ(1, observer.input_method_changed_count_); 985 EXPECT_EQ(1, observer.input_method_changed_count_);
988 EXPECT_EQ(ids[0], manager_->GetCurrentInputMethod().id()); 986 EXPECT_EQ(ids[0], manager_->GetCurrentInputMethod().id());
989 EXPECT_EQ("us", xkeyboard_->last_layout_); 987 EXPECT_EQ("us", xkeyboard_->last_layout_);
990 988
991 // Add an Extension IME. 989 // Add an Extension IME.
992 std::vector<std::string> layouts; 990 std::vector<std::string> layouts;
993 layouts.push_back("us(dvorak)"); 991 layouts.push_back("us(dvorak)");
994 std::vector<std::string> languages; 992 std::vector<std::string> languages;
995 languages.push_back("en-US"); 993 languages.push_back("en-US");
994
996 const std::string ext_id = 995 const std::string ext_id =
997 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"); 996 extension_ime_util::GetInputMethodID("deadbeef", "engine_id");
998 manager_->AddInputMethodExtension( 997 const InputMethodDescriptor descriptor(ext_id,
999 ext_id, 998 "deadbeef input method",
1000 "deadbeef input method", 999 layouts,
1001 layouts, 1000 languages,
1002 languages, 1001 false, // is_login_keyboard
1003 GURL(), 1002 GURL(),
1004 GURL(), 1003 GURL());
1005 NULL); 1004 MockInputMethodEngine engine(descriptor);
1006 IBusBridge::Get()->SetEngineHandler(ext_id, mock_engine_handler_.get()); 1005 manager_->AddInputMethodExtension(ext_id, &engine);
1007 1006
1008 // Extension IME is not enabled by default. 1007 // Extension IME is not enabled by default.
1009 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 1008 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
1010 EXPECT_EQ(1, observer.input_method_changed_count_); 1009 EXPECT_EQ(1, observer.input_method_changed_count_);
1011 1010
1012 std::vector<std::string> extension_ime_ids; 1011 std::vector<std::string> extension_ime_ids;
1013 extension_ime_ids.push_back( 1012 extension_ime_ids.push_back(ext_id);
1014 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"));
1015 manager_->SetEnabledExtensionImes(&extension_ime_ids); 1013 manager_->SetEnabledExtensionImes(&extension_ime_ids);
1016 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1014 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1017 1015
1018 // Switch to the IME. 1016 // Switch to the IME.
1019 manager_->SwitchToNextInputMethod(); 1017 manager_->SwitchToNextInputMethod();
1020 EXPECT_EQ(3, observer.input_method_changed_count_); 1018 EXPECT_EQ(3, observer.input_method_changed_count_);
1021 EXPECT_EQ(extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), 1019 EXPECT_EQ(ext_id, manager_->GetCurrentInputMethod().id());
1022 manager_->GetCurrentInputMethod().id());
1023 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_); 1020 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_);
1024 1021
1025 // Lock the screen. This is for crosbug.com/27049. 1022 // Lock the screen. This is for crosbug.com/27049.
1026 manager_->SetState(InputMethodManager::STATE_LOCK_SCREEN); 1023 manager_->SetState(InputMethodManager::STATE_LOCK_SCREEN);
1027 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); // Qwerty. No Ext. IME 1024 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); // Qwerty. No Ext. IME
1028 EXPECT_EQ("xkb:us::eng", 1025 EXPECT_EQ("xkb:us::eng",
1029 manager_->GetCurrentInputMethod().id()); 1026 manager_->GetCurrentInputMethod().id());
1030 EXPECT_EQ("us", xkeyboard_->last_layout_); 1027 EXPECT_EQ("us", xkeyboard_->last_layout_);
1031 1028
1032 // Unlock the screen. 1029 // Unlock the screen.
1033 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN); 1030 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN);
1034 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1031 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1035 EXPECT_EQ(extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), 1032 EXPECT_EQ(ext_id, manager_->GetCurrentInputMethod().id());
1036 manager_->GetCurrentInputMethod().id());
1037 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_); 1033 EXPECT_EQ("us(dvorak)", xkeyboard_->last_layout_);
1038 { 1034 {
1039 // This is for crosbug.com/27052. 1035 // This is for crosbug.com/27052.
1040 scoped_ptr<InputMethodDescriptors> methods( 1036 scoped_ptr<InputMethodDescriptors> methods(
1041 manager_->GetActiveInputMethods()); 1037 manager_->GetActiveInputMethods());
1042 ASSERT_EQ(2U, methods->size()); 1038 ASSERT_EQ(2U, methods->size());
1043 EXPECT_EQ(extension_ime_util::GetInputMethodID("deadbeef", "engine_id"), 1039 // Ext. IMEs should be at the end of the list.
1044 // Ext. IMEs should be at the end of the list. 1040 EXPECT_EQ(ext_id, methods->at(1).id());
1045 methods->at(1).id());
1046 } 1041 }
1047 manager_->RemoveObserver(&observer); 1042 manager_->RemoveObserver(&observer);
1048 } 1043 }
1049 1044
1050 TEST_F(InputMethodManagerImplTest, 1045 TEST_F(InputMethodManagerImplTest,
1051 ChangeInputMethodBeforeComponentExtensionInitialization_OneIME) { 1046 ChangeInputMethodBeforeComponentExtensionInitialization_OneIME) {
1052 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN); 1047 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN);
1053 std::vector<std::string> ids; 1048 std::vector<std::string> ids;
1054 ids.push_back(kNaclMozcUsId); 1049 ids.push_back(kNaclMozcUsId);
1055 EXPECT_TRUE(manager_->EnableInputMethods(ids)); 1050 EXPECT_TRUE(manager_->EnableInputMethods(ids));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 ids.push_back(ext_id2); 1136 ids.push_back(ext_id2);
1142 EXPECT_TRUE(manager_->EnableInputMethods(ids)); 1137 EXPECT_TRUE(manager_->EnableInputMethods(ids));
1143 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1138 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1144 EXPECT_EQ(ext_id1, manager_->GetCurrentInputMethod().id()); 1139 EXPECT_EQ(ext_id1, manager_->GetCurrentInputMethod().id());
1145 manager_->ChangeInputMethod(ext_id2); 1140 manager_->ChangeInputMethod(ext_id2);
1146 EXPECT_EQ(ext_id2, manager_->GetCurrentInputMethod().id()); 1141 EXPECT_EQ(ext_id2, manager_->GetCurrentInputMethod().id());
1147 } 1142 }
1148 1143
1149 } // namespace input_method 1144 } // namespace input_method
1150 } // namespace chromeos 1145 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698