| 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" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 | 32 |
| 33 class TestableInputMethodUtil : public InputMethodUtil { | 33 class TestableInputMethodUtil : public InputMethodUtil { |
| 34 public: | 34 public: |
| 35 explicit TestableInputMethodUtil(InputMethodDelegate* delegate, | 35 explicit TestableInputMethodUtil(InputMethodDelegate* delegate, |
| 36 scoped_ptr<InputMethodDescriptors> methods) | 36 scoped_ptr<InputMethodDescriptors> methods) |
| 37 : InputMethodUtil(delegate, methods.Pass()) { | 37 : InputMethodUtil(delegate, methods.Pass()) { |
| 38 } | 38 } |
| 39 // Change access rights. | 39 // Change access rights. |
| 40 using InputMethodUtil::GetInputMethodIdsFromLanguageCodeInternal; | 40 using InputMethodUtil::GetInputMethodIdsFromLanguageCodeInternal; |
| 41 using InputMethodUtil::GetKeyboardLayoutName; | 41 using InputMethodUtil::GetKeyboardLayoutName; |
| 42 using InputMethodUtil::ReloadInternalMaps; | |
| 43 using InputMethodUtil::supported_input_methods_; | |
| 44 }; | 42 }; |
| 45 | 43 |
| 46 } // namespace | 44 } // namespace |
| 47 | 45 |
| 48 class InputMethodUtilTest : public testing::Test { | 46 class InputMethodUtilTest : public testing::Test { |
| 49 public: | 47 public: |
| 50 InputMethodUtilTest() | 48 InputMethodUtilTest() |
| 51 : util_(&delegate_, whitelist_.GetSupportedInputMethods()) { | 49 : util_(&delegate_, whitelist_.GetSupportedInputMethods()) { |
| 52 delegate_.set_get_localized_string_callback( | 50 delegate_.set_get_localized_string_callback( |
| 53 base::Bind(&l10n_util::GetStringUTF16)); | 51 base::Bind(&l10n_util::GetStringUTF16)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 static base::string16 GetDisplayLanguageName(const std::string& language_code)
{ | 112 static base::string16 GetDisplayLanguageName(const std::string& language_code)
{ |
| 115 return l10n_util::GetDisplayNameForLocale(language_code, "en", true); | 113 return l10n_util::GetDisplayNameForLocale(language_code, "en", true); |
| 116 } | 114 } |
| 117 | 115 |
| 118 FakeInputMethodDelegate delegate_; | 116 FakeInputMethodDelegate delegate_; |
| 119 InputMethodWhitelist whitelist_; | 117 InputMethodWhitelist whitelist_; |
| 120 TestableInputMethodUtil util_; | 118 TestableInputMethodUtil util_; |
| 121 }; | 119 }; |
| 122 | 120 |
| 123 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { | 121 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { |
| 124 // Test normal cases. Two-letter language code should be returned. | 122 // Test invalid cases. Two-letter language code should be returned. |
| 125 { | |
| 126 InputMethodDescriptor desc = GetDesc("vkd_fa", // input method id | |
| 127 "us", // keyboard layout name | |
| 128 "fa", // language name | |
| 129 ""); // indicator | |
| 130 EXPECT_EQ(ASCIIToUTF16("FA"), util_.GetInputMethodShortName(desc)); | |
| 131 } | |
| 132 { | |
| 133 InputMethodDescriptor desc = GetDesc("hangul_2set", "us", "ko", ""); | |
| 134 EXPECT_EQ(base::UTF8ToUTF16("\xed\x95\x9c"), | |
| 135 util_.GetInputMethodShortName(desc)); | |
| 136 } | |
| 137 { | 123 { |
| 138 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); | 124 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); |
| 139 // Upper-case string of the unknown language code, "xx", should be returned. | 125 // Upper-case string of the unknown language code, "xx", should be returned. |
| 140 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); | 126 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); |
| 141 } | 127 } |
| 142 | 128 |
| 143 // Test special cases. | 129 // Test special cases. |
| 144 { | 130 { |
| 145 InputMethodDescriptor desc = | 131 InputMethodDescriptor desc = |
| 146 GetDesc("xkb:us:dvorak:eng", "us", "en-US", "DV"); | 132 GetDesc("xkb:us:dvorak:eng", "us", "en-US", "DV"); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa"))); | 284 EXPECT_EQ("es", util_.GetKeyboardLayoutName(Id("xkb:es::spa"))); |
| 299 EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat"))); | 285 EXPECT_EQ("es(cat)", util_.GetKeyboardLayoutName(Id("xkb:es:cat:cat"))); |
| 300 EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng"))); | 286 EXPECT_EQ("gb(extd)", util_.GetKeyboardLayoutName(Id("xkb:gb:extd:eng"))); |
| 301 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng"))); | 287 EXPECT_EQ("us", util_.GetKeyboardLayoutName(Id("xkb:us::eng"))); |
| 302 EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng"))); | 288 EXPECT_EQ("us(dvorak)", util_.GetKeyboardLayoutName(Id("xkb:us:dvorak:eng"))); |
| 303 EXPECT_EQ("us(colemak)", | 289 EXPECT_EQ("us(colemak)", |
| 304 util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng"))); | 290 util_.GetKeyboardLayoutName(Id("xkb:us:colemak:eng"))); |
| 305 EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger"))); | 291 EXPECT_EQ("de(neo)", util_.GetKeyboardLayoutName(Id("xkb:de:neo:ger"))); |
| 306 } | 292 } |
| 307 | 293 |
| 308 TEST_F(InputMethodUtilTest, TestGetLanguageCodeFromInputMethodId) { | |
| 309 // Make sure that the -CN is added properly. | |
| 310 EXPECT_EQ("zh-CN", util_.GetLanguageCodeFromInputMethodId(Id(pinyin_ime_id))); | |
| 311 } | |
| 312 | |
| 313 TEST_F(InputMethodUtilTest, TestGetInputMethodDisplayNameFromId) { | 294 TEST_F(InputMethodUtilTest, TestGetInputMethodDisplayNameFromId) { |
| 314 EXPECT_EQ("US", | 295 EXPECT_EQ("US", |
| 315 util_.GetInputMethodDisplayNameFromId("xkb:us::eng")); | 296 util_.GetInputMethodDisplayNameFromId("xkb:us::eng")); |
| 316 EXPECT_EQ("", util_.GetInputMethodDisplayNameFromId("nonexistent")); | 297 EXPECT_EQ("", util_.GetInputMethodDisplayNameFromId("nonexistent")); |
| 317 } | 298 } |
| 318 | 299 |
| 319 TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { | 300 TEST_F(InputMethodUtilTest, TestGetInputMethodDescriptorFromId) { |
| 320 EXPECT_EQ(NULL, util_.GetInputMethodDescriptorFromId("non_existent")); | 301 EXPECT_EQ(NULL, util_.GetInputMethodDescriptorFromId("non_existent")); |
| 321 | 302 |
| 322 const InputMethodDescriptor* descriptor = | 303 const InputMethodDescriptor* descriptor = |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 std::vector<std::string> language_codes; | 422 std::vector<std::string> language_codes; |
| 442 util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes); | 423 util_.GetLanguageCodesFromInputMethodIds(input_method_ids, &language_codes); |
| 443 ASSERT_EQ(3U, language_codes.size()); | 424 ASSERT_EQ(3U, language_codes.size()); |
| 444 EXPECT_EQ("en", language_codes[0]); | 425 EXPECT_EQ("en", language_codes[0]); |
| 445 EXPECT_EQ("zh-CN", language_codes[1]); | 426 EXPECT_EQ("zh-CN", language_codes[1]); |
| 446 EXPECT_EQ("fr", language_codes[2]); | 427 EXPECT_EQ("fr", language_codes[2]); |
| 447 } | 428 } |
| 448 | 429 |
| 449 // Test all supported descriptors to detect a typo in input_methods.txt. | 430 // Test all supported descriptors to detect a typo in input_methods.txt. |
| 450 TEST_F(InputMethodUtilTest, TestIBusInputMethodText) { | 431 TEST_F(InputMethodUtilTest, TestIBusInputMethodText) { |
| 451 for (size_t i = 0; i < util_.supported_input_methods_->size(); ++i) { | 432 const std::map<std::string, InputMethodDescriptor>& id_to_descriptor = |
| 452 const std::string language_code = | 433 util_.GetIdToDesciptorMapForTesting(); |
| 453 util_.supported_input_methods_->at(i).language_codes().at(0); | 434 for (std::map<std::string, InputMethodDescriptor>::const_iterator it = |
| 435 id_to_descriptor.begin(); it != id_to_descriptor.end(); ++it) { |
| 436 const std::string language_code = it->second.language_codes().at(0); |
| 454 const base::string16 display_name = | 437 const base::string16 display_name = |
| 455 l10n_util::GetDisplayNameForLocale(language_code, "en", false); | 438 l10n_util::GetDisplayNameForLocale(language_code, "en", false); |
| 456 // Only two formats, like "fr" (lower case) and "en-US" (lower-upper), are | 439 // Only two formats, like "fr" (lower case) and "en-US" (lower-upper), are |
| 457 // allowed. See the text file for details. | 440 // allowed. See the text file for details. |
| 458 EXPECT_TRUE(language_code == "fil" || language_code.length() == 2 || | 441 EXPECT_TRUE(language_code == "fil" || language_code.length() == 2 || |
| 459 (language_code.length() == 5 && language_code[2] == '-')) | 442 (language_code.length() == 5 && language_code[2] == '-')) |
| 460 << "Invalid language code " << language_code; | 443 << "Invalid language code " << language_code; |
| 461 EXPECT_TRUE(l10n_util::IsValidLocaleSyntax(language_code)) | 444 EXPECT_TRUE(l10n_util::IsValidLocaleSyntax(language_code)) |
| 462 << "Invalid language code " << language_code; | 445 << "Invalid language code " << language_code; |
| 463 EXPECT_FALSE(display_name.empty()) | 446 EXPECT_FALSE(display_name.empty()) |
| 464 << "Invalid language code " << language_code; | 447 << "Invalid language code " << language_code; |
| 465 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. | 448 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. |
| 466 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) | 449 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) |
| 467 << "Invalid language code " << language_code; | 450 << "Invalid language code " << language_code; |
| 468 } | 451 } |
| 469 } | 452 } |
| 470 | 453 |
| 471 } // namespace input_method | 454 } // namespace input_method |
| 472 } // namespace chromeos | 455 } // namespace chromeos |
| OLD | NEW |