OLD | NEW |
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_util.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "chromeos/ime/extension_ime_util.h" | 12 #include "chromeos/ime/extension_ime_util.h" |
13 #include "chromeos/ime/fake_input_method_delegate.h" | 13 #include "chromeos/ime/fake_input_method_delegate.h" |
14 #include "chromeos/ime/input_method_manager.h" | 14 #include "chromeos/ime/input_method_manager.h" |
15 #include "chromeos/ime/input_method_whitelist.h" | 15 #include "chromeos/ime/input_method_whitelist.h" |
16 #include "grit/generated_resources.h" | 16 #include "grit/generated_resources.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "ui/base/l10n/l10n_util.h" | 18 #include "ui/base/l10n/l10n_util.h" |
19 | 19 |
20 using base::ASCIIToUTF16; | 20 using base::ASCIIToUTF16; |
21 | 21 |
22 namespace chromeos { | 22 namespace chromeos { |
23 | 23 |
24 extern const char* kExtensionImePrefix; | 24 extern const char* kExtensionImePrefix; |
25 | 25 |
26 namespace input_method { | 26 namespace input_method { |
27 | 27 |
28 namespace { | 28 namespace { |
29 | 29 |
30 const char pinyin_ime_id[] = | 30 const char pinyin_ime_id[] = "zh-t-i0-pinyin"; |
31 "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-t-i0-pinyin"; | 31 const char zhuyin_ime_id[] = "zh-hant-t-i0-und"; |
32 const char zhuyin_ime_id[] = | |
33 "_comp_ime_gjaehgfemfahhmlgpdfknkhdnemmolopzh-hant-t-i0-und"; | |
34 const char kKeyboardExtId[] = | |
35 #if defined(OFFICIAL_BUILD) | |
36 "habcdindjejkmepknlhkkloncjcpcnbf"; | |
37 #else | |
38 "jhffeifommiaekmbkkjlpmilogcfdohp"; | |
39 #endif | |
40 | 32 |
41 class TestableInputMethodUtil : public InputMethodUtil { | 33 class TestableInputMethodUtil : public InputMethodUtil { |
42 public: | 34 public: |
43 explicit TestableInputMethodUtil(InputMethodDelegate* delegate, | 35 explicit TestableInputMethodUtil(InputMethodDelegate* delegate, |
44 scoped_ptr<InputMethodDescriptors> methods) | 36 scoped_ptr<InputMethodDescriptors> methods) |
45 : InputMethodUtil(delegate, methods.Pass()) { | 37 : InputMethodUtil(delegate, methods.Pass()) { |
46 } | 38 } |
47 // Change access rights. | 39 // Change access rights. |
48 using InputMethodUtil::GetInputMethodIdsFromLanguageCodeInternal; | 40 using InputMethodUtil::GetInputMethodIdsFromLanguageCodeInternal; |
49 using InputMethodUtil::GetKeyboardLayoutName; | 41 using InputMethodUtil::GetKeyboardLayoutName; |
(...skipping 14 matching lines...) Expand all Loading... |
64 } | 56 } |
65 | 57 |
66 virtual void SetUp() OVERRIDE { | 58 virtual void SetUp() OVERRIDE { |
67 InputMethodDescriptors input_methods; | 59 InputMethodDescriptors input_methods; |
68 | 60 |
69 std::vector<std::string> layouts; | 61 std::vector<std::string> layouts; |
70 std::vector<std::string> languages; | 62 std::vector<std::string> languages; |
71 layouts.push_back("us"); | 63 layouts.push_back("us"); |
72 languages.push_back("zh-CN"); | 64 languages.push_back("zh-CN"); |
73 | 65 |
74 InputMethodDescriptor pinyin_ime(pinyin_ime_id, | 66 InputMethodDescriptor pinyin_ime(Id(pinyin_ime_id), |
75 "Pinyin input for testing", | 67 "Pinyin input for testing", |
76 "CN", | 68 "CN", |
77 layouts, | 69 layouts, |
78 languages, | 70 languages, |
79 false, | 71 false, |
80 GURL(""), | 72 GURL(""), |
81 GURL("")); | 73 GURL("")); |
82 input_methods.push_back(pinyin_ime); | 74 input_methods.push_back(pinyin_ime); |
83 | 75 |
84 languages.clear(); | 76 languages.clear(); |
85 languages.push_back("zh-TW"); | 77 languages.push_back("zh-TW"); |
86 InputMethodDescriptor zhuyin_ime(zhuyin_ime_id, | 78 InputMethodDescriptor zhuyin_ime(zhuyin_ime_id, |
87 "Zhuyin input for testing", | 79 "Zhuyin input for testing", |
88 "TW", | 80 "TW", |
89 layouts, | 81 layouts, |
90 languages, | 82 languages, |
91 false, | 83 false, |
92 GURL(""), | 84 GURL(""), |
93 GURL("")); | 85 GURL("")); |
94 input_methods.push_back(zhuyin_ime); | 86 input_methods.push_back(zhuyin_ime); |
95 | 87 |
96 util_.InitXkbInputMethodsForTesting(); | 88 util_.InitXkbInputMethodsForTesting(); |
97 util_.AppendInputMethods(input_methods); | 89 util_.AppendInputMethods(input_methods); |
98 } | 90 } |
99 | 91 |
100 std::string Id(const std::string& id) { | 92 std::string Id(const std::string& id) { |
101 return extension_ime_util::GetInputMethodIDByKeyboardLayout(id); | 93 return extension_ime_util::GetInputMethodIDByEngineID(id); |
102 } | 94 } |
103 | 95 |
104 InputMethodDescriptor GetDesc(const std::string& id, | 96 InputMethodDescriptor GetDesc(const std::string& id, |
105 const std::string& raw_layout, | 97 const std::string& raw_layout, |
106 const std::string& language_code, | 98 const std::string& language_code, |
107 const std::string& indicator) { | 99 const std::string& indicator) { |
108 std::vector<std::string> layouts; | 100 std::vector<std::string> layouts; |
109 layouts.push_back(raw_layout); | 101 layouts.push_back(raw_layout); |
110 std::vector<std::string> languages; | 102 std::vector<std::string> languages; |
111 languages.push_back(language_code); | 103 languages.push_back(language_code); |
(...skipping 12 matching lines...) Expand all Loading... |
124 } | 116 } |
125 | 117 |
126 FakeInputMethodDelegate delegate_; | 118 FakeInputMethodDelegate delegate_; |
127 InputMethodWhitelist whitelist_; | 119 InputMethodWhitelist whitelist_; |
128 TestableInputMethodUtil util_; | 120 TestableInputMethodUtil util_; |
129 }; | 121 }; |
130 | 122 |
131 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { | 123 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { |
132 // Test normal cases. Two-letter language code should be returned. | 124 // Test normal cases. Two-letter language code should be returned. |
133 { | 125 { |
134 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", // input method id | 126 InputMethodDescriptor desc = GetDesc("vkd_fa", // input method id |
135 "us", // keyboard layout name | 127 "us", // keyboard layout name |
136 "fa", // language name | 128 "fa", // language name |
137 ""); // indicator | 129 ""); // indicator |
138 EXPECT_EQ(ASCIIToUTF16("FA"), util_.GetInputMethodShortName(desc)); | 130 EXPECT_EQ(ASCIIToUTF16("FA"), util_.GetInputMethodShortName(desc)); |
139 } | 131 } |
140 { | 132 { |
141 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko", ""); | 133 InputMethodDescriptor desc = GetDesc("hangul_2set", "us", "ko", ""); |
142 EXPECT_EQ(base::UTF8ToUTF16("\xed\x95\x9c"), | 134 EXPECT_EQ(base::UTF8ToUTF16("\xed\x95\x9c"), |
143 util_.GetInputMethodShortName(desc)); | 135 util_.GetInputMethodShortName(desc)); |
144 } | 136 } |
145 { | 137 { |
146 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); | 138 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); |
147 // Upper-case string of the unknown language code, "xx", should be returned. | 139 // Upper-case string of the unknown language code, "xx", should be returned. |
148 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); | 140 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); |
149 } | 141 } |
150 | 142 |
151 // Test special cases. | 143 // Test special cases. |
(...skipping 27 matching lines...) Expand all Loading... |
179 GetDesc("xkb:es:cat:cat", "es(cat)", "ca", "CAS"); | 171 GetDesc("xkb:es:cat:cat", "es(cat)", "ca", "CAS"); |
180 EXPECT_EQ(ASCIIToUTF16("CAS"), util_.GetInputMethodShortName(desc)); | 172 EXPECT_EQ(ASCIIToUTF16("CAS"), util_.GetInputMethodShortName(desc)); |
181 } | 173 } |
182 { | 174 { |
183 InputMethodDescriptor desc = | 175 InputMethodDescriptor desc = |
184 GetDesc(pinyin_ime_id, "us", "zh-CN", ""); | 176 GetDesc(pinyin_ime_id, "us", "zh-CN", ""); |
185 EXPECT_EQ(base::UTF8ToUTF16("\xe6\x8b\xbc"), | 177 EXPECT_EQ(base::UTF8ToUTF16("\xe6\x8b\xbc"), |
186 util_.GetInputMethodShortName(desc)); | 178 util_.GetInputMethodShortName(desc)); |
187 } | 179 } |
188 { | 180 { |
189 InputMethodDescriptor desc = | 181 InputMethodDescriptor desc = GetDesc(zhuyin_ime_id, "us", "zh-TW", ""); |
190 GetDesc(zhuyin_ime_id, "us", "zh-TW", ""); | |
191 EXPECT_EQ(base::UTF8ToUTF16("\xE6\xB3\xA8"), | 182 EXPECT_EQ(base::UTF8ToUTF16("\xE6\xB3\xA8"), |
192 util_.GetInputMethodShortName(desc)); | 183 util_.GetInputMethodShortName(desc)); |
193 } | 184 } |
194 } | 185 } |
195 | 186 |
196 TEST_F(InputMethodUtilTest, GetInputMethodMediumNameTest) { | 187 TEST_F(InputMethodUtilTest, GetInputMethodMediumNameTest) { |
197 { | 188 { |
198 // input methods with medium name equal to short name | 189 // input methods with medium name equal to short name |
199 const char * input_method_id[] = { | 190 const char * input_method_id[] = { |
200 "xkb:us:altgr-intl:eng", | 191 "xkb:us:altgr-intl:eng", |
201 "xkb:us:dvorak:eng", | 192 "xkb:us:dvorak:eng", |
202 "xkb:us:intl:eng", | 193 "xkb:us:intl:eng", |
203 "xkb:us:colemak:eng", | 194 "xkb:us:colemak:eng", |
204 "xkb:de:neo:ger", | 195 "xkb:de:neo:ger", |
205 "xkb:es:cat:cat", | 196 "xkb:es:cat:cat", |
206 "xkb:gb:dvorak:eng", | 197 "xkb:gb:dvorak:eng", |
207 }; | 198 }; |
208 const int len = ARRAYSIZE_UNSAFE(input_method_id); | 199 const int len = ARRAYSIZE_UNSAFE(input_method_id); |
209 for (int i=0; i<len; ++i) { | 200 for (int i=0; i<len; ++i) { |
210 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); | 201 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); |
211 base::string16 medium_name = util_.GetInputMethodMediumName(desc); | 202 base::string16 medium_name = util_.GetInputMethodMediumName(desc); |
212 base::string16 short_name = util_.GetInputMethodShortName(desc); | 203 base::string16 short_name = util_.GetInputMethodShortName(desc); |
213 EXPECT_EQ(medium_name,short_name); | 204 EXPECT_EQ(medium_name,short_name); |
214 } | 205 } |
215 } | 206 } |
216 { | 207 { |
217 // input methods with medium name not equal to short name | 208 // input methods with medium name not equal to short name |
218 const char * input_method_id[] = { | 209 const char * input_method_id[] = { |
219 "m17n:zh:cangjie", | |
220 "m17n:zh:quick", | |
221 pinyin_ime_id, | 210 pinyin_ime_id, |
222 zhuyin_ime_id, | 211 zhuyin_ime_id, |
223 "mozc-hangul", | |
224 pinyin_ime_id, | |
225 pinyin_ime_id, | |
226 }; | 212 }; |
227 const int len = ARRAYSIZE_UNSAFE(input_method_id); | 213 const int len = ARRAYSIZE_UNSAFE(input_method_id); |
228 for (int i=0; i<len; ++i) { | 214 for (int i=0; i<len; ++i) { |
229 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); | 215 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); |
230 base::string16 medium_name = util_.GetInputMethodMediumName(desc); | 216 base::string16 medium_name = util_.GetInputMethodMediumName(desc); |
231 base::string16 short_name = util_.GetInputMethodShortName(desc); | 217 base::string16 short_name = util_.GetInputMethodShortName(desc); |
232 EXPECT_NE(medium_name,short_name); | 218 EXPECT_NE(medium_name,short_name); |
233 } | 219 } |
234 } | 220 } |
235 } | 221 } |
236 | 222 |
237 TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) { | 223 TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) { |
238 // For most languages input method or keyboard layout name is returned. | 224 // For most languages input method or keyboard layout name is returned. |
239 // See below for exceptions. | 225 // See below for exceptions. |
240 { | 226 { |
241 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", "us", "fa", ""); | |
242 EXPECT_EQ(ASCIIToUTF16("Persian input method (ISIRI 2901 layout)"), | |
243 util_.GetInputMethodLongName(desc)); | |
244 } | |
245 { | |
246 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko", ""); | |
247 EXPECT_EQ(ASCIIToUTF16("Korean input method"), | |
248 util_.GetInputMethodLongName(desc)); | |
249 } | |
250 { | |
251 InputMethodDescriptor desc = GetDesc("m17n:vi:tcvn", "us", "vi", ""); | |
252 EXPECT_EQ(ASCIIToUTF16("Vietnamese input method (TCVN6064)"), | |
253 util_.GetInputMethodLongName(desc)); | |
254 } | |
255 { | |
256 InputMethodDescriptor desc = GetDesc("xkb:jp::jpn", "jp", "ja", ""); | 227 InputMethodDescriptor desc = GetDesc("xkb:jp::jpn", "jp", "ja", ""); |
257 EXPECT_EQ(ASCIIToUTF16("Japanese"), | 228 EXPECT_EQ(ASCIIToUTF16("Japanese"), |
258 util_.GetInputMethodLongName(desc)); | 229 util_.GetInputMethodLongName(desc)); |
259 } | 230 } |
260 { | 231 { |
261 InputMethodDescriptor desc = | 232 InputMethodDescriptor desc = |
262 GetDesc("xkb:us:dvorak:eng", "us(dvorak)", "en-US", ""); | 233 GetDesc("xkb:us:dvorak:eng", "us(dvorak)", "en-US", ""); |
263 EXPECT_EQ(ASCIIToUTF16("US Dvorak"), | 234 EXPECT_EQ(ASCIIToUTF16("US Dvorak"), |
264 util_.GetInputMethodLongName(desc)); | 235 util_.GetInputMethodLongName(desc)); |
265 } | 236 } |
266 { | 237 { |
267 InputMethodDescriptor desc = | 238 InputMethodDescriptor desc = |
268 GetDesc("xkb:gb:dvorak:eng", "gb(dvorak)", "en-US", ""); | 239 GetDesc("xkb:gb:dvorak:eng", "gb(dvorak)", "en-US", ""); |
269 EXPECT_EQ(ASCIIToUTF16("UK Dvorak"), | 240 EXPECT_EQ(ASCIIToUTF16("UK Dvorak"), |
270 util_.GetInputMethodLongName(desc)); | 241 util_.GetInputMethodLongName(desc)); |
271 } | 242 } |
272 | 243 |
273 // For Arabic, Dutch, French, German and Hindi, | 244 // For Dutch, French, German and Hindi, |
274 // "language - keyboard layout" pair is returned. | 245 // "language - keyboard layout" pair is returned. |
275 { | 246 { |
276 InputMethodDescriptor desc = GetDesc("m17n:ar:kbd", "us", "ar", ""); | |
277 EXPECT_EQ(ASCIIToUTF16("Arabic - Standard input method"), | |
278 util_.GetInputMethodLongName(desc)); | |
279 } | |
280 { | |
281 InputMethodDescriptor desc = GetDesc("xkb:be::nld", "be", "nl", ""); | 247 InputMethodDescriptor desc = GetDesc("xkb:be::nld", "be", "nl", ""); |
282 EXPECT_EQ(ASCIIToUTF16("Dutch - Belgian"), | 248 EXPECT_EQ(ASCIIToUTF16("Dutch - Belgian"), |
283 util_.GetInputMethodLongName(desc)); | 249 util_.GetInputMethodLongName(desc)); |
284 } | 250 } |
285 { | 251 { |
286 InputMethodDescriptor desc = GetDesc("xkb:fr::fra", "fr", "fr", ""); | 252 InputMethodDescriptor desc = GetDesc("xkb:fr::fra", "fr", "fr", ""); |
287 EXPECT_EQ(ASCIIToUTF16("French - French"), | 253 EXPECT_EQ(ASCIIToUTF16("French - French"), |
288 util_.GetInputMethodLongName(desc)); | 254 util_.GetInputMethodLongName(desc)); |
289 } | 255 } |
290 { | 256 { |
291 InputMethodDescriptor desc = GetDesc("xkb:be::fra", "be", "fr", ""); | 257 InputMethodDescriptor desc = GetDesc("xkb:be::fra", "be", "fr", ""); |
292 EXPECT_EQ(ASCIIToUTF16("French - Belgian"), | 258 EXPECT_EQ(ASCIIToUTF16("French - Belgian"), |
293 util_.GetInputMethodLongName(desc)); | 259 util_.GetInputMethodLongName(desc)); |
294 } | 260 } |
295 { | 261 { |
296 InputMethodDescriptor desc = GetDesc("xkb:de::ger", "de", "de", ""); | 262 InputMethodDescriptor desc = GetDesc("xkb:de::ger", "de", "de", ""); |
297 EXPECT_EQ(ASCIIToUTF16("German - German"), | 263 EXPECT_EQ(ASCIIToUTF16("German - German"), |
298 util_.GetInputMethodLongName(desc)); | 264 util_.GetInputMethodLongName(desc)); |
299 } | 265 } |
300 { | 266 { |
301 InputMethodDescriptor desc = GetDesc("xkb:be::ger", "be", "de", ""); | 267 InputMethodDescriptor desc = GetDesc("xkb:be::ger", "be", "de", ""); |
302 EXPECT_EQ(ASCIIToUTF16("German - Belgian"), | 268 EXPECT_EQ(ASCIIToUTF16("German - Belgian"), |
303 util_.GetInputMethodLongName(desc)); | 269 util_.GetInputMethodLongName(desc)); |
304 } | 270 } |
305 { | |
306 InputMethodDescriptor desc = GetDesc("m17n:hi:itrans", "us", "hi", ""); | |
307 EXPECT_EQ(ASCIIToUTF16("Hindi - Standard input method"), | |
308 util_.GetInputMethodLongName(desc)); | |
309 } | |
310 | 271 |
311 { | 272 { |
312 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); | 273 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); |
313 // You can safely ignore the "Resouce ID is not found for: invalid-id" | 274 // You can safely ignore the "Resouce ID is not found for: invalid-id" |
314 // error. | 275 // error. |
315 EXPECT_EQ(ASCIIToUTF16("invalid-id"), | 276 EXPECT_EQ(ASCIIToUTF16("invalid-id"), |
316 util_.GetInputMethodLongName(desc)); | 277 util_.GetInputMethodLongName(desc)); |
317 } | 278 } |
318 } | 279 } |
319 | 280 |
320 TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) { | 281 TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) { |
321 EXPECT_TRUE(util_.IsValidInputMethodId(Id("xkb:us:colemak:eng"))); | 282 EXPECT_TRUE(util_.IsValidInputMethodId(Id("xkb:us:colemak:eng"))); |
322 EXPECT_TRUE(util_.IsValidInputMethodId(pinyin_ime_id)); | 283 EXPECT_TRUE(util_.IsValidInputMethodId(Id(pinyin_ime_id))); |
323 EXPECT_FALSE(util_.IsValidInputMethodId("unsupported-input-method")); | 284 EXPECT_FALSE(util_.IsValidInputMethodId("unsupported-input-method")); |
324 } | 285 } |
325 | 286 |
326 TEST_F(InputMethodUtilTest, TestIsKeyboardLayout) { | 287 TEST_F(InputMethodUtilTest, TestIsKeyboardLayout) { |
327 EXPECT_TRUE(InputMethodUtil::IsKeyboardLayout("xkb:us::eng")); | 288 EXPECT_TRUE(InputMethodUtil::IsKeyboardLayout("xkb:us::eng")); |
328 EXPECT_FALSE(InputMethodUtil::IsKeyboardLayout(pinyin_ime_id)); | 289 EXPECT_FALSE(InputMethodUtil::IsKeyboardLayout(Id(pinyin_ime_id))); |
329 } | 290 } |
330 | 291 |
331 TEST_F(InputMethodUtilTest, TestGetKeyboardLayoutName) { | 292 TEST_F(InputMethodUtilTest, TestGetKeyboardLayoutName) { |
332 // Unsupported case. | 293 // Unsupported case. |
333 EXPECT_EQ("", util_.GetKeyboardLayoutName("UNSUPPORTED_ID")); | 294 EXPECT_EQ("", util_.GetKeyboardLayoutName("UNSUPPORTED_ID")); |
334 | 295 |
335 // Supported cases (samples). | 296 // Supported cases (samples). |
336 EXPECT_EQ("us", util_.GetKeyboardLayoutName(pinyin_ime_id)); | 297 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id(pinyin_ime_id))); |
337 EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa"))); | 298 EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa"))); |
338 EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat"))); | 299 EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat"))); |
339 EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng"))); | 300 EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng"))); |
340 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng"))); | 301 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng"))); |
341 EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng"))); | 302 EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng"))); |
342 EXPECT_EQ("us(colemak)", | 303 EXPECT_EQ("us(colemak)", |
343 util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng"))); | 304 util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng"))); |
344 EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger"))); | 305 EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger"))); |
345 } | 306 } |
346 | 307 |
347 TEST_F(InputMethodUtilTest, TestGetLanguageCodeFromInputMethodId) { | 308 TEST_F(InputMethodUtilTest, TestGetLanguageCodeFromInputMethodId) { |
348 // Make sure that the -CN is added properly. | 309 // Make sure that the -CN is added properly. |
349 EXPECT_EQ("zh-CN", util_.GetLanguageCodeFromInputMethodId(pinyin_ime_id)); | 310 EXPECT_EQ("zh-CN", util_.GetLanguageCodeFromInputMethodId(Id(pinyin_ime_id))); |
350 } | 311 } |
351 | 312 |
352 TEST_F(InputMethodUtilTest, TestGetInputMethodDisplayNameFromId) { | 313 TEST_F(InputMethodUtilTest, TestGetInputMethodDisplayNameFromId) { |
353 EXPECT_EQ("US", | 314 EXPECT_EQ("US", |
354 util_.GetInputMethodDisplayNameFromId("xkb:us::eng")); | 315 util_.GetInputMethodDisplayNameFromId("xkb:us::eng")); |
355 EXPECT_EQ("", util_.GetInputMethodDisplayNameFromId("nonexistent")); | 316 EXPECT_EQ("", util_.GetInputMethodDisplayNameFromId("nonexistent")); |
356 } | 317 } |
357 | 318 |
358 TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { | 319 TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { |
359 EXPECT_EQ(NULL, util_.GetInputMethodDescriptorFromId("non_existent")); | 320 EXPECT_EQ(NULL, util_.GetInputMethodDescriptorFromId("non_existent")); |
360 | 321 |
361 const InputMethodDescriptor* descriptor = | 322 const InputMethodDescriptor* descriptor = |
362 util_.GetInputMethodDescriptorFromId(pinyin_ime_id); | 323 util_.GetInputMethodDescriptorFromId(Id(pinyin_ime_id)); |
363 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 324 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
364 EXPECT_EQ(pinyin_ime_id, descriptor->id()); | 325 EXPECT_EQ(Id(pinyin_ime_id), descriptor->id()); |
365 EXPECT_EQ("us", descriptor->GetPreferredKeyboardLayout()); | 326 EXPECT_EQ("us", descriptor->GetPreferredKeyboardLayout()); |
366 // This used to be "zh" but now we have "zh-CN" in input_methods.h, | 327 // This used to be "zh" but now we have "zh-CN" in input_methods.h, |
367 // hence this should be zh-CN now. | 328 // hence this should be zh-CN now. |
368 ASSERT_TRUE(!descriptor->language_codes().empty()); | 329 ASSERT_TRUE(!descriptor->language_codes().empty()); |
369 EXPECT_EQ("zh-CN", descriptor->language_codes().at(0)); | 330 EXPECT_EQ("zh-CN", descriptor->language_codes().at(0)); |
370 } | 331 } |
371 | 332 |
372 TEST_F(InputMethodUtilTest, TestGetInputMethodIdsForLanguageCode) { | 333 TEST_F(InputMethodUtilTest, TestGetInputMethodIdsForLanguageCode) { |
373 std::multimap<std::string, std::string> language_code_to_ids_map; | 334 std::multimap<std::string, std::string> language_code_to_ids_map; |
374 language_code_to_ids_map.insert(std::make_pair("ja", pinyin_ime_id)); | 335 language_code_to_ids_map.insert(std::make_pair("ja", pinyin_ime_id)); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 | 374 |
414 // US keyboard + Chinese UI = US keyboard + Pinyin IME. | 375 // US keyboard + Chinese UI = US keyboard + Pinyin IME. |
415 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Zh) { | 376 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Zh) { |
416 const InputMethodDescriptor* descriptor = | 377 const InputMethodDescriptor* descriptor = |
417 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. | 378 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. |
418 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 379 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
419 std::vector<std::string> input_method_ids; | 380 std::vector<std::string> input_method_ids; |
420 util_.GetFirstLoginInputMethodIds("zh-CN", *descriptor, &input_method_ids); | 381 util_.GetFirstLoginInputMethodIds("zh-CN", *descriptor, &input_method_ids); |
421 ASSERT_EQ(2U, input_method_ids.size()); | 382 ASSERT_EQ(2U, input_method_ids.size()); |
422 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); | 383 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); |
423 EXPECT_EQ(pinyin_ime_id, input_method_ids[1]); // Pinyin for US keybaord. | 384 EXPECT_EQ(Id(pinyin_ime_id), input_method_ids[1]); // Pinyin for US keybaord. |
424 } | 385 } |
425 | 386 |
426 // US keyboard + Russian UI = US keyboard + Russsian keyboard | 387 // US keyboard + Russian UI = US keyboard + Russsian keyboard |
427 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Ru) { | 388 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Ru) { |
428 const InputMethodDescriptor* descriptor = | 389 const InputMethodDescriptor* descriptor = |
429 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. | 390 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. |
430 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 391 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
431 std::vector<std::string> input_method_ids; | 392 std::vector<std::string> input_method_ids; |
432 util_.GetFirstLoginInputMethodIds("ru", *descriptor, &input_method_ids); | 393 util_.GetFirstLoginInputMethodIds("ru", *descriptor, &input_method_ids); |
433 ASSERT_EQ(2U, input_method_ids.size()); | 394 ASSERT_EQ(2U, input_method_ids.size()); |
434 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); | 395 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); |
435 EXPECT_EQ(Id("xkb:ru::rus"), input_method_ids[1]); // Russian keyboard. | 396 EXPECT_EQ(Id("xkb:ru::rus"), input_method_ids[1]); // Russian keyboard. |
436 } | 397 } |
437 | 398 |
438 // US keyboard + Traditional Chinese = US keyboard + chewing. | 399 // US keyboard + Traditional Chinese = US keyboard + chewing. |
439 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_ZhTw) { | 400 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_ZhTw) { |
440 const InputMethodDescriptor* descriptor = | 401 const InputMethodDescriptor* descriptor = |
441 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. | 402 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. |
442 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 403 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
443 std::vector<std::string> input_method_ids; | 404 std::vector<std::string> input_method_ids; |
444 util_.GetFirstLoginInputMethodIds("zh-TW", *descriptor, &input_method_ids); | 405 util_.GetFirstLoginInputMethodIds("zh-TW", *descriptor, &input_method_ids); |
445 ASSERT_EQ(2U, input_method_ids.size()); | 406 ASSERT_EQ(2U, input_method_ids.size()); |
446 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); | 407 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); |
447 EXPECT_EQ(zhuyin_ime_id, input_method_ids[1]); // Chewing. | 408 EXPECT_EQ(Id(zhuyin_ime_id), input_method_ids[1]); // Chewing. |
448 } | 409 } |
449 | 410 |
450 // US keyboard + Thai = US keyboard + kesmanee. | 411 // US keyboard + Thai = US keyboard + kesmanee. |
451 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Th) { | 412 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Th) { |
452 const InputMethodDescriptor* descriptor = | 413 const InputMethodDescriptor* descriptor = |
453 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. | 414 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. |
454 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 415 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
455 std::vector<std::string> input_method_ids; | 416 std::vector<std::string> input_method_ids; |
456 util_.GetFirstLoginInputMethodIds("th", *descriptor, &input_method_ids); | 417 util_.GetFirstLoginInputMethodIds("th", *descriptor, &input_method_ids); |
457 ASSERT_EQ(2U, input_method_ids.size()); | 418 ASSERT_EQ(2U, input_method_ids.size()); |
458 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); | 419 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); |
459 EXPECT_EQ(std::string("_comp_ime_") + kKeyboardExtId + "vkd_th", | 420 EXPECT_EQ(Id("vkd_th"), input_method_ids[1]); // Kesmanee. |
460 input_method_ids[1]); // Kesmanee. | |
461 } | 421 } |
462 | 422 |
463 // US keyboard + Vietnamese = US keyboard + TCVN6064. | 423 // US keyboard + Vietnamese = US keyboard + TCVN6064. |
464 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Vi) { | 424 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Vi) { |
465 const InputMethodDescriptor* descriptor = | 425 const InputMethodDescriptor* descriptor = |
466 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. | 426 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard. |
467 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. | 427 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile. |
468 std::vector<std::string> input_method_ids; | 428 std::vector<std::string> input_method_ids; |
469 util_.GetFirstLoginInputMethodIds("vi", *descriptor, &input_method_ids); | 429 util_.GetFirstLoginInputMethodIds("vi", *descriptor, &input_method_ids); |
470 ASSERT_EQ(2U, input_method_ids.size()); | 430 ASSERT_EQ(2U, input_method_ids.size()); |
471 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); | 431 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]); |
472 EXPECT_EQ(std::string("_comp_ime_") + kKeyboardExtId + "vkd_vi_tcvn", | 432 EXPECT_EQ(Id("vkd_vi_tcvn"), input_method_ids[1]); // TCVN6064. |
473 input_method_ids[1]); // TCVN6064. | |
474 } | 433 } |
475 | 434 |
476 TEST_F(InputMethodUtilTest, TestGetLanguageCodesFromInputMethodIds) { | 435 TEST_F(InputMethodUtilTest, TestGetLanguageCodesFromInputMethodIds) { |
477 std::vector<std::string> input_method_ids; | 436 std::vector<std::string> input_method_ids; |
478 input_method_ids.push_back(Id("xkb:us::eng")); // English US. | 437 input_method_ids.push_back(Id("xkb:us::eng")); // English US. |
479 input_method_ids.push_back(Id("xkb:us:dvorak:eng")); // English US Dvorak. | 438 input_method_ids.push_back(Id("xkb:us:dvorak:eng")); // English US Dvorak. |
480 input_method_ids.push_back(pinyin_ime_id); // Pinyin | 439 input_method_ids.push_back(Id(pinyin_ime_id)); // Pinyin |
481 input_method_ids.push_back(Id("xkb:fr::fra")); // French France. | 440 input_method_ids.push_back(Id("xkb:fr::fra")); // French France. |
482 std::vector<std::string> language_codes; | 441 std::vector<std::string> language_codes; |
483 util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes); | 442 util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes); |
484 ASSERT_EQ(3U, language_codes.size()); | 443 ASSERT_EQ(3U, language_codes.size()); |
485 EXPECT_EQ("en", language_codes[0]); | 444 EXPECT_EQ("en", language_codes[0]); |
486 EXPECT_EQ("zh-CN", language_codes[1]); | 445 EXPECT_EQ("zh-CN", language_codes[1]); |
487 EXPECT_EQ("fr", language_codes[2]); | 446 EXPECT_EQ("fr", language_codes[2]); |
488 } | 447 } |
489 | 448 |
490 // Test all supported descriptors to detect a typo in input_methods.txt. | 449 // Test all supported descriptors to detect a typo in input_methods.txt. |
(...skipping 13 matching lines...) Expand all Loading... |
504 EXPECT_FALSE(display_name.empty()) | 463 EXPECT_FALSE(display_name.empty()) |
505 << "Invalid language code " << language_code; | 464 << "Invalid language code " << language_code; |
506 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. | 465 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. |
507 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) | 466 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) |
508 << "Invalid language code " << language_code; | 467 << "Invalid language code " << language_code; |
509 } | 468 } |
510 } | 469 } |
511 | 470 |
512 } // namespace input_method | 471 } // namespace input_method |
513 } // namespace chromeos | 472 } // namespace chromeos |
OLD | NEW |