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

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

Issue 2919583002: chromeos: Move InputMethodUtil into //ui/base/ime/chromeos (Closed)
Patch Set: Created 3 years, 6 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/input_method/input_method_util.h"
6
7 #include <stddef.h>
8
9 #include <memory>
10 #include <string>
11
12 #include "base/bind.h"
13 #include "base/macros.h"
14 #include "base/strings/utf_string_conversions.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "ui/base/ime/chromeos/extension_ime_util.h"
17 #include "ui/base/ime/chromeos/fake_input_method_delegate.h"
18 #include "ui/base/ime/chromeos/input_method_manager.h"
19 #include "ui/base/ime/chromeos/input_method_whitelist.h"
20 #include "ui/base/l10n/l10n_util.h"
21
22 using base::ASCIIToUTF16;
23
24 namespace chromeos {
25
26 namespace input_method {
27
28 namespace {
29
30 const char pinyin_ime_id[] = "zh-t-i0-pinyin";
31 const char zhuyin_ime_id[] = "zh-hant-t-i0-und";
32
33 class TestableInputMethodUtil : public InputMethodUtil {
34 public:
35 explicit TestableInputMethodUtil(
36 InputMethodDelegate* delegate,
37 std::unique_ptr<InputMethodDescriptors> methods)
38 : InputMethodUtil(delegate) {
39 ResetInputMethods(*methods);
40 }
41 // Change access rights.
42 using InputMethodUtil::GetInputMethodIdsFromLanguageCodeInternal;
43 using InputMethodUtil::GetKeyboardLayoutName;
44 };
45
46 } // namespace
47
48 class InputMethodUtilTest : public testing::Test {
49 public:
50 InputMethodUtilTest()
51 : util_(&delegate_, whitelist_.GetSupportedInputMethods()) {
52 delegate_.set_get_localized_string_callback(
53 base::Bind(&l10n_util::GetStringUTF16));
54 delegate_.set_get_display_language_name_callback(
55 base::Bind(&InputMethodUtilTest::GetDisplayLanguageName));
56 }
57
58 void SetUp() override {
59 InputMethodDescriptors input_methods;
60
61 std::vector<std::string> layouts;
62 std::vector<std::string> languages;
63 layouts.push_back("us");
64 languages.push_back("zh-CN");
65
66 InputMethodDescriptor pinyin_ime(Id(pinyin_ime_id),
67 "Pinyin input for testing",
68 "CN",
69 layouts,
70 languages,
71 false,
72 GURL(""),
73 GURL(""));
74 input_methods.push_back(pinyin_ime);
75
76 languages.clear();
77 languages.push_back("zh-TW");
78 InputMethodDescriptor zhuyin_ime(zhuyin_ime_id,
79 "Zhuyin input for testing",
80 "TW",
81 layouts,
82 languages,
83 false,
84 GURL(""),
85 GURL(""));
86 input_methods.push_back(zhuyin_ime);
87
88 util_.InitXkbInputMethodsForTesting(*whitelist_.GetSupportedInputMethods());
89 util_.AppendInputMethods(input_methods);
90 }
91
92 std::string Id(const std::string& id) {
93 return extension_ime_util::GetInputMethodIDByEngineID(id);
94 }
95
96 InputMethodDescriptor GetDesc(const std::string& id,
97 const std::string& raw_layout,
98 const std::string& language_code,
99 const std::string& indicator) {
100 std::vector<std::string> layouts;
101 layouts.push_back(raw_layout);
102 std::vector<std::string> languages;
103 languages.push_back(language_code);
104 return InputMethodDescriptor(Id(id),
105 "", // Description.
106 indicator, // Short name used for indicator.
107 layouts,
108 languages,
109 true,
110 GURL(), // options page url
111 GURL()); // input view page url
112 }
113
114 static base::string16 GetDisplayLanguageName(
115 const std::string& language_code) {
116 return l10n_util::GetDisplayNameForLocale(language_code, "en", true);
117 }
118
119 FakeInputMethodDelegate delegate_;
120 InputMethodWhitelist whitelist_;
121 TestableInputMethodUtil util_;
122 };
123
124 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) {
125 // Test invalid cases. Two-letter language code should be returned.
126 {
127 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", "");
128 // Upper-case string of the unknown language code, "xx", should be returned.
129 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc));
130 }
131
132 // Test special cases.
133 {
134 InputMethodDescriptor desc =
135 GetDesc("xkb:us:dvorak:eng", "us", "en-US", "DV");
136 EXPECT_EQ(ASCIIToUTF16("DV"), util_.GetInputMethodShortName(desc));
137 }
138 {
139 InputMethodDescriptor desc =
140 GetDesc("xkb:us:colemak:eng", "us", "en-US", "CO");
141 EXPECT_EQ(ASCIIToUTF16("CO"), util_.GetInputMethodShortName(desc));
142 }
143 {
144 InputMethodDescriptor desc =
145 GetDesc("xkb:us:altgr-intl:eng", "us", "en-US", "EXTD");
146 EXPECT_EQ(ASCIIToUTF16("EXTD"), util_.GetInputMethodShortName(desc));
147 }
148 {
149 InputMethodDescriptor desc =
150 GetDesc("xkb:us:intl:eng", "us", "en-US", "INTL");
151 EXPECT_EQ(ASCIIToUTF16("INTL"), util_.GetInputMethodShortName(desc));
152 }
153 {
154 InputMethodDescriptor desc =
155 GetDesc("xkb:de:neo:ger", "de(neo)", "de", "NEO");
156 EXPECT_EQ(ASCIIToUTF16("NEO"), util_.GetInputMethodShortName(desc));
157 }
158 {
159 InputMethodDescriptor desc =
160 GetDesc("xkb:es:cat:cat", "es(cat)", "ca", "CAS");
161 EXPECT_EQ(ASCIIToUTF16("CAS"), util_.GetInputMethodShortName(desc));
162 }
163 {
164 InputMethodDescriptor desc =
165 GetDesc(pinyin_ime_id, "us", "zh-CN", "\xe6\x8b\xbc");
166 EXPECT_EQ(base::UTF8ToUTF16("\xe6\x8b\xbc"),
167 util_.GetInputMethodShortName(desc));
168 }
169 {
170 InputMethodDescriptor desc =
171 GetDesc(zhuyin_ime_id, "us", "zh-TW", "\xE6\xB3\xA8");
172 EXPECT_EQ(base::UTF8ToUTF16("\xE6\xB3\xA8"),
173 util_.GetInputMethodShortName(desc));
174 }
175 }
176
177 TEST_F(InputMethodUtilTest, GetInputMethodMediumNameTest) {
178 {
179 // input methods with medium name equal to short name
180 const char* const input_method_id[] = {
181 "xkb:us:altgr-intl:eng", "xkb:us:dvorak:eng", "xkb:us:intl:eng",
182 "xkb:us:colemak:eng", "xkb:de:neo:ger", "xkb:es:cat:cat",
183 "xkb:gb:dvorak:eng",
184 };
185 const int len = arraysize(input_method_id);
186 for (int i = 0; i < len; ++i) {
187 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", "");
188 base::string16 medium_name = util_.GetInputMethodMediumName(desc);
189 base::string16 short_name = util_.GetInputMethodShortName(desc);
190 EXPECT_EQ(medium_name, short_name);
191 }
192 }
193 {
194 // input methods with medium name not equal to short name
195 const char* const input_method_id[] = {
196 pinyin_ime_id, zhuyin_ime_id,
197 };
198 const int len = arraysize(input_method_id);
199 for (int i = 0; i < len; ++i) {
200 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", "");
201 base::string16 medium_name = util_.GetInputMethodMediumName(desc);
202 base::string16 short_name = util_.GetInputMethodShortName(desc);
203 EXPECT_NE(medium_name, short_name);
204 }
205 }
206 }
207
208 TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) {
209 // For most languages input method or keyboard layout name is returned.
210 // See below for exceptions.
211 {
212 InputMethodDescriptor desc = GetDesc("xkb:jp::jpn", "jp", "ja", "");
213 EXPECT_EQ(ASCIIToUTF16("Japanese"),
214 util_.GetInputMethodLongName(desc));
215 }
216 {
217 InputMethodDescriptor desc =
218 GetDesc("xkb:us:dvorak:eng", "us(dvorak)", "en-US", "");
219 EXPECT_EQ(ASCIIToUTF16("US Dvorak"),
220 util_.GetInputMethodLongName(desc));
221 }
222 {
223 InputMethodDescriptor desc =
224 GetDesc("xkb:gb:dvorak:eng", "gb(dvorak)", "en-US", "");
225 EXPECT_EQ(ASCIIToUTF16("UK Dvorak"),
226 util_.GetInputMethodLongName(desc));
227 }
228
229 // For Dutch, French, German and Hindi,
230 // "language - keyboard layout" pair is returned.
231 {
232 InputMethodDescriptor desc = GetDesc("xkb:be::nld", "be", "nl", "");
233 EXPECT_EQ(ASCIIToUTF16("Dutch - Belgian"),
234 util_.GetInputMethodLongName(desc));
235 }
236 {
237 InputMethodDescriptor desc = GetDesc("xkb:fr::fra", "fr", "fr", "");
238 EXPECT_EQ(ASCIIToUTF16("French - French"),
239 util_.GetInputMethodLongName(desc));
240 }
241 {
242 InputMethodDescriptor desc = GetDesc("xkb:be::fra", "be", "fr", "");
243 EXPECT_EQ(ASCIIToUTF16("French - Belgian"),
244 util_.GetInputMethodLongName(desc));
245 }
246 {
247 InputMethodDescriptor desc = GetDesc("xkb:de::ger", "de", "de", "");
248 EXPECT_EQ(ASCIIToUTF16("German - German"),
249 util_.GetInputMethodLongName(desc));
250 }
251 {
252 InputMethodDescriptor desc = GetDesc("xkb:be::ger", "be", "de", "");
253 EXPECT_EQ(ASCIIToUTF16("German - Belgian"),
254 util_.GetInputMethodLongName(desc));
255 }
256
257 {
258 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", "");
259 // You can safely ignore the "Resouce ID is not found for: invalid-id"
260 // error.
261 EXPECT_EQ(ASCIIToUTF16("invalid-id"),
262 util_.GetInputMethodLongName(desc));
263 }
264 }
265
266 TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) {
267 EXPECT_TRUE(util_.IsValidInputMethodId(Id("xkb:us:colemak:eng")));
268 EXPECT_TRUE(util_.IsValidInputMethodId(Id(pinyin_ime_id)));
269 EXPECT_FALSE(util_.IsValidInputMethodId("unsupported-input-method"));
270 }
271
272 TEST_F(InputMethodUtilTest, TestIsKeyboardLayout) {
273 EXPECT_TRUE(InputMethodUtil::IsKeyboardLayout("xkb:us::eng"));
274 EXPECT_FALSE(InputMethodUtil::IsKeyboardLayout(Id(pinyin_ime_id)));
275 }
276
277 TEST_F(InputMethodUtilTest, TestGetKeyboardLayoutName) {
278 // Unsupported case.
279 EXPECT_EQ("", util_.GetKeyboardLayoutName("UNSUPPORTED_ID"));
280
281 // Supported cases (samples).
282 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id(pinyin_ime_id)));
283 EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa")));
284 EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat")));
285 EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng")));
286 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng")));
287 EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng")));
288 EXPECT_EQ("us(colemak)",
289 util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng")));
290 EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger")));
291 }
292
293 TEST_F(InputMethodUtilTest, TestGetInputMethodDisplayNameFromId) {
294 EXPECT_EQ("US",
295 util_.GetInputMethodDisplayNameFromId("xkb:us::eng"));
296 EXPECT_EQ("", util_.GetInputMethodDisplayNameFromId("nonexistent"));
297 }
298
299 TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) {
300 EXPECT_EQ(NULL, util_.GetInputMethodDescriptorFromId("non_existent"));
301
302 const InputMethodDescriptor* descriptor =
303 util_.GetInputMethodDescriptorFromId(Id(pinyin_ime_id));
304 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
305 EXPECT_EQ(Id(pinyin_ime_id), descriptor->id());
306 EXPECT_EQ("us", descriptor->GetPreferredKeyboardLayout());
307 // This used to be "zh" but now we have "zh-CN" in input_methods.h,
308 // hence this should be zh-CN now.
309 ASSERT_TRUE(!descriptor->language_codes().empty());
310 EXPECT_EQ("zh-CN", descriptor->language_codes().at(0));
311 }
312
313 TEST_F(InputMethodUtilTest, TestGetInputMethodIdsForLanguageCode) {
314 std::multimap<std::string, std::string> language_code_to_ids_map;
315 language_code_to_ids_map.insert(std::make_pair("ja", pinyin_ime_id));
316 language_code_to_ids_map.insert(std::make_pair("ja", pinyin_ime_id));
317 language_code_to_ids_map.insert(std::make_pair("ja", "xkb:jp:jpn"));
318 language_code_to_ids_map.insert(std::make_pair("fr", "xkb:fr:fra"));
319
320 std::vector<std::string> result;
321 EXPECT_TRUE(util_.GetInputMethodIdsFromLanguageCodeInternal(
322 language_code_to_ids_map, "ja", kAllInputMethods, &result));
323 EXPECT_EQ(3U, result.size());
324 EXPECT_TRUE(util_.GetInputMethodIdsFromLanguageCodeInternal(
325 language_code_to_ids_map, "ja", kKeyboardLayoutsOnly, &result));
326 ASSERT_EQ(1U, result.size());
327 EXPECT_EQ("xkb:jp:jpn", result[0]);
328
329 EXPECT_TRUE(util_.GetInputMethodIdsFromLanguageCodeInternal(
330 language_code_to_ids_map, "fr", kAllInputMethods, &result));
331 ASSERT_EQ(1U, result.size());
332 EXPECT_EQ("xkb:fr:fra", result[0]);
333 EXPECT_TRUE(util_.GetInputMethodIdsFromLanguageCodeInternal(
334 language_code_to_ids_map, "fr", kKeyboardLayoutsOnly, &result));
335 ASSERT_EQ(1U, result.size());
336 EXPECT_EQ("xkb:fr:fra", result[0]);
337
338 EXPECT_FALSE(util_.GetInputMethodIdsFromLanguageCodeInternal(
339 language_code_to_ids_map, "invalid_lang", kAllInputMethods, &result));
340 EXPECT_FALSE(util_.GetInputMethodIdsFromLanguageCodeInternal(
341 language_code_to_ids_map, "invalid_lang", kKeyboardLayoutsOnly, &result));
342 }
343
344 // US keyboard + English US UI = US keyboard only.
345 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_EnUs) {
346 const InputMethodDescriptor* descriptor =
347 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
348 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
349 std::vector<std::string> input_method_ids;
350 util_.GetFirstLoginInputMethodIds("en-US", *descriptor, &input_method_ids);
351 ASSERT_EQ(1U, input_method_ids.size());
352 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
353 }
354
355 // US keyboard + Chinese UI = US keyboard + Pinyin IME.
356 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Zh) {
357 const InputMethodDescriptor* descriptor =
358 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
359 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
360 std::vector<std::string> input_method_ids;
361 util_.GetFirstLoginInputMethodIds("zh-CN", *descriptor, &input_method_ids);
362 ASSERT_EQ(2U, input_method_ids.size());
363 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
364 EXPECT_EQ(Id(pinyin_ime_id), input_method_ids[1]); // Pinyin for US keybaord.
365 }
366
367 // US keyboard + Russian UI = US keyboard + Russsian keyboard
368 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Ru) {
369 const InputMethodDescriptor* descriptor =
370 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
371 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
372 std::vector<std::string> input_method_ids;
373 util_.GetFirstLoginInputMethodIds("ru", *descriptor, &input_method_ids);
374 ASSERT_EQ(2U, input_method_ids.size());
375 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
376 EXPECT_EQ(Id("xkb:ru::rus"), input_method_ids[1]); // Russian keyboard.
377 }
378
379 // US keyboard + Traditional Chinese = US keyboard + chewing.
380 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_ZhTw) {
381 const InputMethodDescriptor* descriptor =
382 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
383 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
384 std::vector<std::string> input_method_ids;
385 util_.GetFirstLoginInputMethodIds("zh-TW", *descriptor, &input_method_ids);
386 ASSERT_EQ(2U, input_method_ids.size());
387 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
388 EXPECT_EQ(Id(zhuyin_ime_id), input_method_ids[1]); // Chewing.
389 }
390
391 // US keyboard + Thai = US keyboard + kesmanee.
392 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Th) {
393 const InputMethodDescriptor* descriptor =
394 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
395 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
396 std::vector<std::string> input_method_ids;
397 util_.GetFirstLoginInputMethodIds("th", *descriptor, &input_method_ids);
398 ASSERT_EQ(2U, input_method_ids.size());
399 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
400 EXPECT_EQ(Id("vkd_th"), input_method_ids[1]); // Kesmanee.
401 }
402
403 // US keyboard + Vietnamese = US keyboard + TCVN6064.
404 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Vi) {
405 const InputMethodDescriptor* descriptor =
406 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
407 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
408 std::vector<std::string> input_method_ids;
409 util_.GetFirstLoginInputMethodIds("vi", *descriptor, &input_method_ids);
410 ASSERT_EQ(2U, input_method_ids.size());
411 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
412 EXPECT_EQ(Id("vkd_vi_tcvn"), input_method_ids[1]); // TCVN6064.
413 }
414
415 // US keyboard + Japanese = US keyboard + mozc(us).
416 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_Jp) {
417 const InputMethodDescriptor* descriptor =
418 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
419 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
420 std::vector<std::string> input_method_ids;
421 util_.GetFirstLoginInputMethodIds("ja", *descriptor, &input_method_ids);
422 ASSERT_EQ(2U, input_method_ids.size());
423 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
424 EXPECT_EQ(Id("nacl_mozc_us"), input_method_ids[1]);
425 }
426
427 // JP keyboard + Japanese = JP keyboard + mozc(jp).
428 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Jp_And_Jp) {
429 const InputMethodDescriptor* descriptor =
430 util_.GetInputMethodDescriptorFromId(Id("xkb:jp::jpn")); // JP keyboard.
431 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
432 std::vector<std::string> input_method_ids;
433 util_.GetFirstLoginInputMethodIds("ja", *descriptor, &input_method_ids);
434 ASSERT_EQ(2U, input_method_ids.size());
435 EXPECT_EQ(Id("xkb:jp::jpn"), input_method_ids[0]);
436 EXPECT_EQ(Id("nacl_mozc_jp"), input_method_ids[1]);
437 }
438
439 // US keyboard + Hebrew = US keyboard + Hebrew keyboard.
440 TEST_F(InputMethodUtilTest, TestGetFirstLoginInputMethodIds_Us_And_He) {
441 const InputMethodDescriptor* descriptor =
442 util_.GetInputMethodDescriptorFromId(Id("xkb:us::eng")); // US keyboard.
443 ASSERT_TRUE(NULL != descriptor); // ASSERT_NE doesn't compile.
444 std::vector<std::string> input_method_ids;
445 util_.GetFirstLoginInputMethodIds("he", *descriptor, &input_method_ids);
446 ASSERT_EQ(2U, input_method_ids.size());
447 EXPECT_EQ(Id("xkb:us::eng"), input_method_ids[0]);
448 EXPECT_EQ(Id("xkb:il::heb"), input_method_ids[1]);
449 }
450
451 TEST_F(InputMethodUtilTest, TestGetLanguageCodesFromInputMethodIds) {
452 std::vector<std::string> input_method_ids;
453 input_method_ids.push_back(Id("xkb:us::eng")); // English US.
454 input_method_ids.push_back(Id("xkb:us:dvorak:eng")); // English US Dvorak.
455 input_method_ids.push_back(Id(pinyin_ime_id)); // Pinyin
456 input_method_ids.push_back(Id("xkb:fr::fra")); // French France.
457 std::vector<std::string> language_codes;
458 util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes);
459 ASSERT_EQ(3U, language_codes.size());
460 EXPECT_EQ("en", language_codes[0]);
461 EXPECT_EQ("zh-CN", language_codes[1]);
462 EXPECT_EQ("fr", language_codes[2]);
463 }
464
465 // Test all supported descriptors to detect a typo in input_methods.txt.
466 TEST_F(InputMethodUtilTest, TestIBusInputMethodText) {
467 const std::map<std::string, InputMethodDescriptor>& id_to_descriptor =
468 util_.GetIdToDesciptorMapForTesting();
469 for (std::map<std::string, InputMethodDescriptor>::const_iterator it =
470 id_to_descriptor.begin(); it != id_to_descriptor.end(); ++it) {
471 const std::string language_code = it->second.language_codes().at(0);
472 const base::string16 display_name =
473 l10n_util::GetDisplayNameForLocale(language_code, "en", false);
474 // Only two formats, like "fr" (lower case) and "en-US" (lower-upper), are
475 // allowed. See the text file for details.
476 EXPECT_TRUE(language_code == "fil" || language_code.length() == 2 ||
477 (language_code.length() == 5 && language_code[2] == '-'))
478 << "Invalid language code " << language_code;
479 EXPECT_TRUE(l10n_util::IsValidLocaleSyntax(language_code))
480 << "Invalid language code " << language_code;
481 EXPECT_FALSE(display_name.empty())
482 << "Invalid language code " << language_code;
483 // On error, GetDisplayNameForLocale() returns the |language_code| as-is.
484 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name))
485 << "Invalid language code " << language_code;
486 }
487 }
488
489 // Test the input method ID migration.
490 TEST_F(InputMethodUtilTest, TestInputMethodIDMigration) {
491 const char* const migration_cases[][2] = {
492 {"ime:zh:pinyin", "zh-t-i0-pinyin"},
493 {"ime:zh-t:zhuyin", "zh-hant-t-i0-und"},
494 {"ime:zh-t:quick", "zh-hant-t-i0-cangjie-1987-x-m0-simplified"},
495 {"ime:jp:mozc_us", "nacl_mozc_us"},
496 {"ime:ko:hangul", "ko-t-i0-und"},
497 {"m17n:deva_phone", "vkd_deva_phone"},
498 {"m17n:ar", "vkd_ar"},
499 {"t13n:hi", "hi-t-i0-und"},
500 {"unknown", "unknown"},
501 };
502 std::vector<std::string> input_method_ids;
503 for (size_t i = 0; i < arraysize(migration_cases); ++i)
504 input_method_ids.push_back(migration_cases[i][0]);
505 // Duplicated hangul_2set.
506 input_method_ids.push_back("ime:ko:hangul_2set");
507
508 util_.MigrateInputMethods(&input_method_ids);
509
510 EXPECT_EQ(arraysize(migration_cases), input_method_ids.size());
511 for (size_t i = 0; i < arraysize(migration_cases); ++i) {
512 EXPECT_EQ(
513 extension_ime_util::GetInputMethodIDByEngineID(migration_cases[i][1]),
514 input_method_ids[i]);
515 }
516 }
517
518 // Test getting hardware input method IDs.
519 TEST_F(InputMethodUtilTest, TestHardwareInputMethodIDs) {
520 util_.SetHardwareKeyboardLayoutForTesting("xkb:ru::rus");
521 std::vector<std::string> input_method_ids = util_.GetHardwareInputMethodIds();
522 std::vector<std::string> login_input_method_ids =
523 util_.GetHardwareLoginInputMethodIds();
524
525 EXPECT_EQ(2U, input_method_ids.size());
526 EXPECT_EQ(1U, login_input_method_ids.size());
527
528 EXPECT_EQ("xkb:us::eng", extension_ime_util::GetComponentIDByInputMethodID(
529 input_method_ids[0]));
530 EXPECT_EQ("xkb:ru::rus", extension_ime_util::GetComponentIDByInputMethodID(
531 input_method_ids[1]));
532 EXPECT_EQ("xkb:us::eng", extension_ime_util::GetComponentIDByInputMethodID(
533 login_input_method_ids[0]));
534 }
535
536 } // namespace input_method
537 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698