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

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

Issue 433163005: Refactoring for InputMethodEngine and InputMethodEventRouter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed browser_tests: ExtensionApiTest.InputImeApiBasic Created 6 years, 4 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 "ash/ime/input_method_menu_item.h" 9 #include "ash/ime/input_method_menu_item.h"
10 #include "ash/ime/input_method_menu_manager.h" 10 #include "ash/ime/input_method_menu_manager.h"
(...skipping 25 matching lines...) Expand all
36 namespace chromeos { 36 namespace chromeos {
37 37
38 namespace input_method { 38 namespace input_method {
39 namespace { 39 namespace {
40 40
41 const char kNaclMozcUsId[] = "nacl_mozc_us"; 41 const char kNaclMozcUsId[] = "nacl_mozc_us";
42 const char kNaclMozcJpId[] = "nacl_mozc_jp"; 42 const char kNaclMozcJpId[] = "nacl_mozc_jp";
43 const char kExt2Engine1Id[] = "ext2_engine1-t-i0-engine_id"; 43 const char kExt2Engine1Id[] = "ext2_engine1-t-i0-engine_id";
44 const char kExt2Engine2Id[] = "ext2_engine2-t-i0-engine_id"; 44 const char kExt2Engine2Id[] = "ext2_engine2-t-i0-engine_id";
45 const char kPinyinImeId[] = "zh-t-i0-pinyin"; 45 const char kPinyinImeId[] = "zh-t-i0-pinyin";
46 const char kExtensionId1[] = "00000000000000000000000000000000";
47 const char kExtensionId2[] = "11111111111111111111111111111111";
46 48
47 // Returns true if |descriptors| contain |target|. 49 // Returns true if |descriptors| contain |target|.
48 bool Contain(const InputMethodDescriptors& descriptors, 50 bool Contain(const InputMethodDescriptors& descriptors,
49 const InputMethodDescriptor& target) { 51 const InputMethodDescriptor& target) {
50 for (size_t i = 0; i < descriptors.size(); ++i) { 52 for (size_t i = 0; i < descriptors.size(); ++i) {
51 if (descriptors[i].id() == target.id()) 53 if (descriptors[i].id() == target.id())
52 return true; 54 return true;
53 } 55 }
54 return false; 56 return false;
55 } 57 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 130
129 delegate_ = new FakeInputMethodDelegate(); 131 delegate_ = new FakeInputMethodDelegate();
130 manager_.reset(new InputMethodManagerImpl( 132 manager_.reset(new InputMethodManagerImpl(
131 scoped_ptr<InputMethodDelegate>(delegate_))); 133 scoped_ptr<InputMethodDelegate>(delegate_)));
132 manager_->GetInputMethodUtil()->UpdateHardwareLayoutCache(); 134 manager_->GetInputMethodUtil()->UpdateHardwareLayoutCache();
133 candidate_window_controller_ = new MockCandidateWindowController; 135 candidate_window_controller_ = new MockCandidateWindowController;
134 manager_->SetCandidateWindowControllerForTesting( 136 manager_->SetCandidateWindowControllerForTesting(
135 candidate_window_controller_); 137 candidate_window_controller_);
136 keyboard_ = new FakeImeKeyboard; 138 keyboard_ = new FakeImeKeyboard;
137 manager_->SetImeKeyboardForTesting(keyboard_); 139 manager_->SetImeKeyboardForTesting(keyboard_);
138 mock_engine_handler_.reset( 140 mock_engine_handler_.reset(new MockInputMethodEngine());
139 new MockInputMethodEngine(InputMethodDescriptor()));
140 IMEBridge::Initialize(); 141 IMEBridge::Initialize();
141 IMEBridge::Get()->SetCurrentEngineHandler(mock_engine_handler_.get()); 142 IMEBridge::Get()->SetCurrentEngineHandler(mock_engine_handler_.get());
142 143
143 menu_manager_ = ash::ime::InputMethodMenuManager::GetInstance(); 144 menu_manager_ = ash::ime::InputMethodMenuManager::GetInstance();
144 145
145 InitImeList(); 146 InitImeList();
146 147
147 BrowserWithTestWindowTest::SetUp(); 148 BrowserWithTestWindowTest::SetUp();
148 } 149 }
149 150
150 virtual void TearDown() OVERRIDE { 151 virtual void TearDown() OVERRIDE {
151 BrowserWithTestWindowTest::TearDown(); 152 BrowserWithTestWindowTest::TearDown();
152 153
153 ui::ShutdownInputMethodForTesting(); 154 ui::ShutdownInputMethodForTesting();
154 155
155 delegate_ = NULL; 156 delegate_ = NULL;
156 candidate_window_controller_ = NULL; 157 candidate_window_controller_ = NULL;
157 keyboard_ = NULL; 158 keyboard_ = NULL;
158 manager_.reset(); 159 manager_.reset();
159 160
160 profile_manager_.reset(); 161 profile_manager_.reset();
161 } 162 }
162 163
163 protected: 164 protected:
164 Profile* GetProfile() { return manager_->GetProfile(); }
165 // Helper function to initialize component extension stuff for testing. 165 // Helper function to initialize component extension stuff for testing.
166 void InitComponentExtension() { 166 void InitComponentExtension() {
167 mock_delegate_ = new MockComponentExtIMEManagerDelegate(); 167 mock_delegate_ = new MockComponentExtIMEManagerDelegate();
168 mock_delegate_->set_ime_list(ime_list_); 168 mock_delegate_->set_ime_list(ime_list_);
169 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate(mock_delegate_); 169 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate(mock_delegate_);
170 170
171 std::vector<std::string> layouts;
172 layouts.push_back("us");
173 std::vector<std::string> languages;
174 languages.push_back("en-US");
175
171 // Note, for production, these SetEngineHandler are called when 176 // Note, for production, these SetEngineHandler are called when
172 // IMEEngineHandlerInterface is initialized via 177 // IMEEngineHandlerInterface is initialized via
173 // InitializeComponentextension. 178 // InitializeComponentextension.
174 manager_->AddInputMethodExtension(GetProfile(), 179 InputMethodDescriptors descriptors;
175 ImeIdFromEngineId(kNaclMozcUsId), 180 manager_->AddInputMethodExtension(ImeIdFromEngineId(kNaclMozcUsId),
181 descriptors,
176 mock_engine_handler_.get()); 182 mock_engine_handler_.get());
177 manager_->AddInputMethodExtension(GetProfile(), 183 manager_->AddInputMethodExtension(ImeIdFromEngineId(kExt2Engine1Id),
178 ImeIdFromEngineId(kNaclMozcJpId), 184 descriptors,
179 mock_engine_handler_.get());
180 manager_->AddInputMethodExtension(GetProfile(),
181 ImeIdFromEngineId(kExt2Engine1Id),
182 mock_engine_handler_.get());
183 manager_->AddInputMethodExtension(GetProfile(),
184 ImeIdFromEngineId(kExt2Engine2Id),
185 mock_engine_handler_.get()); 185 mock_engine_handler_.get());
186 manager_->InitializeComponentExtensionForTesting(delegate.Pass()); 186 manager_->InitializeComponentExtensionForTesting(delegate.Pass());
187 } 187 }
188 188
189 void InitImeList() { 189 void InitImeList() {
190 ime_list_.clear(); 190 ime_list_.clear();
191 191
192 ComponentExtensionIME ext_xkb; 192 ComponentExtensionIME ext_xkb;
193 ext_xkb.id = extension_ime_util::kXkbExtensionId; 193 ext_xkb.id = extension_ime_util::kXkbExtensionId;
194 ext_xkb.description = "ext_xkb_description"; 194 ext_xkb.description = "ext_xkb_description";
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 EXPECT_EQ(ImeIdFromEngineId(ids[0]), manager_->GetCurrentInputMethod().id()); 1118 EXPECT_EQ(ImeIdFromEngineId(ids[0]), manager_->GetCurrentInputMethod().id());
1119 EXPECT_EQ("us(dvorak)", keyboard_->last_layout_); 1119 EXPECT_EQ("us(dvorak)", keyboard_->last_layout_);
1120 1120
1121 // Add two Extension IMEs. 1121 // Add two Extension IMEs.
1122 std::vector<std::string> layouts; 1122 std::vector<std::string> layouts;
1123 layouts.push_back("us"); 1123 layouts.push_back("us");
1124 std::vector<std::string> languages; 1124 std::vector<std::string> languages;
1125 languages.push_back("en-US"); 1125 languages.push_back("en-US");
1126 1126
1127 const std::string ext1_id = 1127 const std::string ext1_id =
1128 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"); 1128 extension_ime_util::GetInputMethodID(kExtensionId1, "engine_id");
1129 const InputMethodDescriptor descriptor1(ext1_id, 1129 const InputMethodDescriptor descriptor1(ext1_id,
1130 "deadbeef input method", 1130 "deadbeef input method",
1131 "DB", 1131 "DB",
1132 layouts, 1132 layouts,
1133 languages, 1133 languages,
1134 false, // is_login_keyboard 1134 false, // is_login_keyboard
1135 GURL(), 1135 GURL(),
1136 GURL()); 1136 GURL());
1137 MockInputMethodEngine engine(descriptor1); 1137 MockInputMethodEngine engine;
1138 manager_->AddInputMethodExtension(GetProfile(), ext1_id, &engine); 1138 InputMethodDescriptors descriptors;
1139 descriptors.push_back(descriptor1);
1140 manager_->AddInputMethodExtension(kExtensionId1, descriptors, &engine);
1139 1141
1140 // Extension IMEs are not enabled by default. 1142 // Extension IMEs are not enabled by default.
1141 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 1143 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
1142 1144
1143 std::vector<std::string> extension_ime_ids; 1145 std::vector<std::string> extension_ime_ids;
1144 extension_ime_ids.push_back(ext1_id); 1146 extension_ime_ids.push_back(ext1_id);
1145 manager_->SetEnabledExtensionImes(&extension_ime_ids); 1147 manager_->SetEnabledExtensionImes(&extension_ime_ids);
1146 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1148 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1147 1149
1148 { 1150 {
1149 scoped_ptr<InputMethodDescriptors> methods( 1151 scoped_ptr<InputMethodDescriptors> methods(
1150 manager_->GetActiveInputMethods()); 1152 manager_->GetActiveInputMethods());
1151 ASSERT_EQ(2U, methods->size()); 1153 ASSERT_EQ(2U, methods->size());
1152 // Ext IMEs should be at the end of the list. 1154 // Ext IMEs should be at the end of the list.
1153 EXPECT_EQ(ext1_id, methods->at(1).id()); 1155 EXPECT_EQ(ext1_id, methods->at(1).id());
1154 } 1156 }
1155 1157
1156 const std::string ext2_id = 1158 const std::string ext2_id =
1157 extension_ime_util::GetInputMethodID("cafebabe", "engine_id"); 1159 extension_ime_util::GetInputMethodID(kExtensionId2, "engine_id");
1158 const InputMethodDescriptor descriptor2(ext2_id, 1160 const InputMethodDescriptor descriptor2(ext2_id,
1159 "cafebabe input method", 1161 "cafebabe input method",
1160 "CB", 1162 "CB",
1161 layouts, 1163 layouts,
1162 languages, 1164 languages,
1163 false, // is_login_keyboard 1165 false, // is_login_keyboard
1164 GURL(), 1166 GURL(),
1165 GURL()); 1167 GURL());
1166 MockInputMethodEngine engine2(descriptor2); 1168 descriptors.clear();
1167 manager_->AddInputMethodExtension(GetProfile(), ext2_id, &engine2); 1169 descriptors.push_back(descriptor2);
1170 MockInputMethodEngine engine2;
1171 manager_->AddInputMethodExtension(kExtensionId2, descriptors, &engine2);
1168 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1172 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1169 1173
1170 extension_ime_ids.push_back(ext2_id); 1174 extension_ime_ids.push_back(ext2_id);
1171 manager_->SetEnabledExtensionImes(&extension_ime_ids); 1175 manager_->SetEnabledExtensionImes(&extension_ime_ids);
1172 EXPECT_EQ(3U, manager_->GetNumActiveInputMethods()); 1176 EXPECT_EQ(3U, manager_->GetNumActiveInputMethods());
1173 { 1177 {
1174 scoped_ptr<InputMethodDescriptors> methods( 1178 scoped_ptr<InputMethodDescriptors> methods(
1175 manager_->GetActiveInputMethods()); 1179 manager_->GetActiveInputMethods());
1176 ASSERT_EQ(3U, methods->size()); 1180 ASSERT_EQ(3U, methods->size());
1177 // Ext IMEs should be at the end of the list. 1181 // Ext IMEs should be at the end of the list.
1178 EXPECT_EQ(ext1_id, methods->at(1).id()); 1182 EXPECT_EQ(ext1_id, methods->at(1).id());
1179 EXPECT_EQ(ext2_id, methods->at(2).id()); 1183 EXPECT_EQ(ext2_id, methods->at(2).id());
1180 } 1184 }
1181 1185
1182 // Remove them. 1186 // Remove them.
1183 manager_->RemoveInputMethodExtension(GetProfile(), ext1_id); 1187 manager_->RemoveInputMethodExtension(kExtensionId1);
1184 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1188 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1185 manager_->RemoveInputMethodExtension(GetProfile(), ext2_id); 1189 manager_->RemoveInputMethodExtension(kExtensionId2);
1186 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 1190 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
1187 } 1191 }
1188 1192
1189 TEST_F(InputMethodManagerImplTest, TestAddExtensionInputThenLockScreen) { 1193 TEST_F(InputMethodManagerImplTest, TestAddExtensionInputThenLockScreen) {
1190 TestObserver observer; 1194 TestObserver observer;
1191 InitComponentExtension(); 1195 InitComponentExtension();
1192 manager_->AddObserver(&observer); 1196 manager_->AddObserver(&observer);
1193 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN); 1197 manager_->SetState(InputMethodManager::STATE_BROWSER_SCREEN);
1194 std::vector<std::string> ids; 1198 std::vector<std::string> ids;
1195 ids.push_back(ImeIdFromEngineId("xkb:us::eng")); 1199 ids.push_back(ImeIdFromEngineId("xkb:us::eng"));
1196 EXPECT_TRUE(manager_->ReplaceEnabledInputMethods(ids)); 1200 EXPECT_TRUE(manager_->ReplaceEnabledInputMethods(ids));
1197 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 1201 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
1198 EXPECT_EQ(1, observer.input_method_changed_count_); 1202 EXPECT_EQ(1, observer.input_method_changed_count_);
1199 EXPECT_EQ(ImeIdFromEngineId(ids[0]), manager_->GetCurrentInputMethod().id()); 1203 EXPECT_EQ(ImeIdFromEngineId(ids[0]), manager_->GetCurrentInputMethod().id());
1200 EXPECT_EQ("us", keyboard_->last_layout_); 1204 EXPECT_EQ("us", keyboard_->last_layout_);
1201 1205
1202 // Add an Extension IME. 1206 // Add an Extension IME.
1203 std::vector<std::string> layouts; 1207 std::vector<std::string> layouts;
1204 layouts.push_back("us(dvorak)"); 1208 layouts.push_back("us(dvorak)");
1205 std::vector<std::string> languages; 1209 std::vector<std::string> languages;
1206 languages.push_back("en-US"); 1210 languages.push_back("en-US");
1207 1211
1208 const std::string ext_id = 1212 const std::string ext_id =
1209 extension_ime_util::GetInputMethodID("deadbeef", "engine_id"); 1213 extension_ime_util::GetInputMethodID(kExtensionId1, "engine_id");
1210 const InputMethodDescriptor descriptor(ext_id, 1214 const InputMethodDescriptor descriptor(ext_id,
1211 "deadbeef input method", 1215 "deadbeef input method",
1212 "DB", 1216 "DB",
1213 layouts, 1217 layouts,
1214 languages, 1218 languages,
1215 false, // is_login_keyboard 1219 false, // is_login_keyboard
1216 GURL(), 1220 GURL(),
1217 GURL()); 1221 GURL());
1218 MockInputMethodEngine engine(descriptor); 1222 MockInputMethodEngine engine;
1219 manager_->AddInputMethodExtension(GetProfile(), ext_id, &engine); 1223 InputMethodDescriptors descriptors;
1224 descriptors.push_back(descriptor);
1225 manager_->AddInputMethodExtension(kExtensionId1, descriptors, &engine);
1220 1226
1221 // Extension IME is not enabled by default. 1227 // Extension IME is not enabled by default.
1222 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods()); 1228 EXPECT_EQ(1U, manager_->GetNumActiveInputMethods());
1223 EXPECT_EQ(1, observer.input_method_changed_count_); 1229 EXPECT_EQ(1, observer.input_method_changed_count_);
1224 1230
1225 std::vector<std::string> extension_ime_ids; 1231 std::vector<std::string> extension_ime_ids;
1226 extension_ime_ids.push_back(ext_id); 1232 extension_ime_ids.push_back(ext_id);
1227 manager_->SetEnabledExtensionImes(&extension_ime_ids); 1233 manager_->SetEnabledExtensionImes(&extension_ime_ids);
1228 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); 1234 EXPECT_EQ(2U, manager_->GetNumActiveInputMethods());
1229 1235
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 ASSERT_EQ(4U, input_method_ids.size()); 1311 ASSERT_EQ(4U, input_method_ids.size());
1306 1312
1307 EXPECT_EQ(ImeIdFromEngineId("xkb:us::eng"), input_method_ids[0]); 1313 EXPECT_EQ(ImeIdFromEngineId("xkb:us::eng"), input_method_ids[0]);
1308 EXPECT_EQ(ImeIdFromEngineId("xkb:fr::fra"), input_method_ids[1]); 1314 EXPECT_EQ(ImeIdFromEngineId("xkb:fr::fra"), input_method_ids[1]);
1309 EXPECT_EQ("_comp_ime_asdf_pinyin", input_method_ids[2]); 1315 EXPECT_EQ("_comp_ime_asdf_pinyin", input_method_ids[2]);
1310 EXPECT_EQ(ImeIdFromEngineId("zh-t-i0-pinyin"), input_method_ids[3]); 1316 EXPECT_EQ(ImeIdFromEngineId("zh-t-i0-pinyin"), input_method_ids[3]);
1311 } 1317 }
1312 1318
1313 } // namespace input_method 1319 } // namespace input_method
1314 } // namespace chromeos 1320 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698