| 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 "base/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/memory/linked_ptr.h" | 8 #include "base/memory/linked_ptr.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "chrome/common/chrome_paths.h" | 13 #include "chrome/common/chrome_paths.h" |
| 14 #include "chrome/common/extensions/extension_l10n_util.h" | |
| 15 #include "chrome/common/extensions/message_bundle.h" | |
| 16 #include "extensions/common/constants.h" | 14 #include "extensions/common/constants.h" |
| 17 #include "extensions/common/error_utils.h" | 15 #include "extensions/common/error_utils.h" |
| 16 #include "extensions/common/extension_l10n_util.h" |
| 18 #include "extensions/common/manifest_constants.h" | 17 #include "extensions/common/manifest_constants.h" |
| 18 #include "extensions/common/message_bundle.h" |
| 19 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "ui/base/l10n/l10n_util.h" | 21 #include "ui/base/l10n/l10n_util.h" |
| 22 | 22 |
| 23 using extensions::kLocaleFolder; | 23 using extensions::kLocaleFolder; |
| 24 using extensions::kMessagesFilename; | 24 using extensions::kMessagesFilename; |
| 25 using extensions::MessageBundle; | 25 using extensions::MessageBundle; |
| 26 | 26 |
| 27 namespace errors = extensions::manifest_errors; | 27 namespace errors = extensions::manifest_errors; |
| 28 namespace keys = extensions::manifest_keys; | 28 namespace keys = extensions::manifest_keys; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 base::FilePath messages_file = locale.Append(kMessagesFilename); | 40 base::FilePath messages_file = locale.Append(kMessagesFilename); |
| 41 std::string data = "{ \"name\":"; | 41 std::string data = "{ \"name\":"; |
| 42 ASSERT_TRUE(base::WriteFile(messages_file, data.c_str(), data.length())); | 42 ASSERT_TRUE(base::WriteFile(messages_file, data.c_str(), data.length())); |
| 43 | 43 |
| 44 base::DictionaryValue manifest; | 44 base::DictionaryValue manifest; |
| 45 manifest.SetString(keys::kDefaultLocale, "en"); | 45 manifest.SetString(keys::kDefaultLocale, "en"); |
| 46 std::string error; | 46 std::string error; |
| 47 EXPECT_FALSE(extension_l10n_util::ValidateExtensionLocales( | 47 EXPECT_FALSE(extension_l10n_util::ValidateExtensionLocales( |
| 48 temp.path(), &manifest, &error)); | 48 temp.path(), &manifest, &error)); |
| 49 EXPECT_THAT(error, | 49 EXPECT_THAT( |
| 50 testing::HasSubstr( | 50 error, |
| 51 base::UTF16ToUTF8(messages_file.LossyDisplayName()))); | 51 testing::HasSubstr(base::UTF16ToUTF8(messages_file.LossyDisplayName()))); |
| 52 } | 52 } |
| 53 | 53 |
| 54 TEST(ExtensionL10nUtil, GetValidLocalesEmptyLocaleFolder) { | 54 TEST(ExtensionL10nUtil, GetValidLocalesEmptyLocaleFolder) { |
| 55 base::ScopedTempDir temp; | 55 base::ScopedTempDir temp; |
| 56 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 56 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 57 | 57 |
| 58 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 58 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 59 ASSERT_TRUE(base::CreateDirectory(src_path)); | 59 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 60 | 60 |
| 61 std::string error; | 61 std::string error; |
| 62 std::set<std::string> locales; | 62 std::set<std::string> locales; |
| 63 EXPECT_FALSE(extension_l10n_util::GetValidLocales(src_path, | 63 EXPECT_FALSE( |
| 64 &locales, | 64 extension_l10n_util::GetValidLocales(src_path, &locales, &error)); |
| 65 &error)); | |
| 66 | 65 |
| 67 EXPECT_TRUE(locales.empty()); | 66 EXPECT_TRUE(locales.empty()); |
| 68 } | 67 } |
| 69 | 68 |
| 70 TEST(ExtensionL10nUtil, GetValidLocalesWithValidLocaleNoMessagesFile) { | 69 TEST(ExtensionL10nUtil, GetValidLocalesWithValidLocaleNoMessagesFile) { |
| 71 base::ScopedTempDir temp; | 70 base::ScopedTempDir temp; |
| 72 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 71 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 73 | 72 |
| 74 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 73 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 75 ASSERT_TRUE(base::CreateDirectory(src_path)); | 74 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 76 ASSERT_TRUE(base::CreateDirectory(src_path.AppendASCII("sr"))); | 75 ASSERT_TRUE(base::CreateDirectory(src_path.AppendASCII("sr"))); |
| 77 | 76 |
| 78 std::string error; | 77 std::string error; |
| 79 std::set<std::string> locales; | 78 std::set<std::string> locales; |
| 80 EXPECT_FALSE(extension_l10n_util::GetValidLocales(src_path, | 79 EXPECT_FALSE( |
| 81 &locales, | 80 extension_l10n_util::GetValidLocales(src_path, &locales, &error)); |
| 82 &error)); | |
| 83 | 81 |
| 84 EXPECT_TRUE(locales.empty()); | 82 EXPECT_TRUE(locales.empty()); |
| 85 } | 83 } |
| 86 | 84 |
| 87 TEST(ExtensionL10nUtil, GetValidLocalesWithUnsupportedLocale) { | 85 TEST(ExtensionL10nUtil, GetValidLocalesWithUnsupportedLocale) { |
| 88 base::ScopedTempDir temp; | 86 base::ScopedTempDir temp; |
| 89 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 87 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 90 | 88 |
| 91 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 89 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 92 ASSERT_TRUE(base::CreateDirectory(src_path)); | 90 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 93 // Supported locale. | 91 // Supported locale. |
| 94 base::FilePath locale_1 = src_path.AppendASCII("sr"); | 92 base::FilePath locale_1 = src_path.AppendASCII("sr"); |
| 95 ASSERT_TRUE(base::CreateDirectory(locale_1)); | 93 ASSERT_TRUE(base::CreateDirectory(locale_1)); |
| 96 std::string data("whatever"); | 94 std::string data("whatever"); |
| 97 ASSERT_TRUE(base::WriteFile( | 95 ASSERT_TRUE(base::WriteFile( |
| 98 locale_1.Append(kMessagesFilename), | 96 locale_1.Append(kMessagesFilename), data.c_str(), data.length())); |
| 99 data.c_str(), data.length())); | |
| 100 // Unsupported locale. | 97 // Unsupported locale. |
| 101 ASSERT_TRUE(base::CreateDirectory(src_path.AppendASCII("xxx_yyy"))); | 98 ASSERT_TRUE(base::CreateDirectory(src_path.AppendASCII("xxx_yyy"))); |
| 102 | 99 |
| 103 std::string error; | 100 std::string error; |
| 104 std::set<std::string> locales; | 101 std::set<std::string> locales; |
| 105 EXPECT_TRUE(extension_l10n_util::GetValidLocales(src_path, | 102 EXPECT_TRUE(extension_l10n_util::GetValidLocales(src_path, &locales, &error)); |
| 106 &locales, | |
| 107 &error)); | |
| 108 | 103 |
| 109 EXPECT_FALSE(locales.empty()); | 104 EXPECT_FALSE(locales.empty()); |
| 110 EXPECT_TRUE(locales.find("sr") != locales.end()); | 105 EXPECT_TRUE(locales.find("sr") != locales.end()); |
| 111 EXPECT_FALSE(locales.find("xxx_yyy") != locales.end()); | 106 EXPECT_FALSE(locales.find("xxx_yyy") != locales.end()); |
| 112 } | 107 } |
| 113 | 108 |
| 114 TEST(ExtensionL10nUtil, GetValidLocalesWithValidLocalesAndMessagesFile) { | 109 TEST(ExtensionL10nUtil, GetValidLocalesWithValidLocalesAndMessagesFile) { |
| 115 base::FilePath install_dir; | 110 base::FilePath install_dir; |
| 116 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 111 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
| 117 install_dir = install_dir.AppendASCII("extensions") | 112 install_dir = install_dir.AppendASCII("extensions") |
| 118 .AppendASCII("good") | 113 .AppendASCII("good") |
| 119 .AppendASCII("Extensions") | 114 .AppendASCII("Extensions") |
| 120 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 115 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 121 .AppendASCII("1.0.0.0") | 116 .AppendASCII("1.0.0.0") |
| 122 .Append(kLocaleFolder); | 117 .Append(kLocaleFolder); |
| 123 | 118 |
| 124 std::string error; | 119 std::string error; |
| 125 std::set<std::string> locales; | 120 std::set<std::string> locales; |
| 126 EXPECT_TRUE(extension_l10n_util::GetValidLocales(install_dir, | 121 EXPECT_TRUE( |
| 127 &locales, | 122 extension_l10n_util::GetValidLocales(install_dir, &locales, &error)); |
| 128 &error)); | |
| 129 EXPECT_EQ(3U, locales.size()); | 123 EXPECT_EQ(3U, locales.size()); |
| 130 EXPECT_TRUE(locales.find("sr") != locales.end()); | 124 EXPECT_TRUE(locales.find("sr") != locales.end()); |
| 131 EXPECT_TRUE(locales.find("en") != locales.end()); | 125 EXPECT_TRUE(locales.find("en") != locales.end()); |
| 132 EXPECT_TRUE(locales.find("en_US") != locales.end()); | 126 EXPECT_TRUE(locales.find("en_US") != locales.end()); |
| 133 } | 127 } |
| 134 | 128 |
| 135 TEST(ExtensionL10nUtil, LoadMessageCatalogsValidFallback) { | 129 TEST(ExtensionL10nUtil, LoadMessageCatalogsValidFallback) { |
| 136 base::FilePath install_dir; | 130 base::FilePath install_dir; |
| 137 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); | 131 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); |
| 138 install_dir = install_dir.AppendASCII("extensions") | 132 install_dir = install_dir.AppendASCII("extensions") |
| 139 .AppendASCII("good") | 133 .AppendASCII("good") |
| 140 .AppendASCII("Extensions") | 134 .AppendASCII("Extensions") |
| 141 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 135 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 142 .AppendASCII("1.0.0.0") | 136 .AppendASCII("1.0.0.0") |
| 143 .Append(kLocaleFolder); | 137 .Append(kLocaleFolder); |
| 144 | 138 |
| 145 std::string error; | 139 std::string error; |
| 146 std::set<std::string> locales; | 140 std::set<std::string> locales; |
| 147 EXPECT_TRUE(extension_l10n_util::GetValidLocales(install_dir, | 141 EXPECT_TRUE( |
| 148 &locales, | 142 extension_l10n_util::GetValidLocales(install_dir, &locales, &error)); |
| 149 &error)); | |
| 150 | 143 |
| 151 scoped_ptr<MessageBundle> bundle(extension_l10n_util::LoadMessageCatalogs( | 144 scoped_ptr<MessageBundle> bundle(extension_l10n_util::LoadMessageCatalogs( |
| 152 install_dir, "sr", "en_US", locales, &error)); | 145 install_dir, "sr", "en_US", locales, &error)); |
| 153 ASSERT_FALSE(NULL == bundle.get()); | 146 ASSERT_FALSE(NULL == bundle.get()); |
| 154 EXPECT_TRUE(error.empty()); | 147 EXPECT_TRUE(error.empty()); |
| 155 EXPECT_EQ("Color", bundle->GetL10nMessage("color")); | 148 EXPECT_EQ("Color", bundle->GetL10nMessage("color")); |
| 156 EXPECT_EQ("Not in the US or GB.", bundle->GetL10nMessage("not_in_US_or_GB")); | 149 EXPECT_EQ("Not in the US or GB.", bundle->GetL10nMessage("not_in_US_or_GB")); |
| 157 } | 150 } |
| 158 | 151 |
| 159 TEST(ExtensionL10nUtil, LoadMessageCatalogsMissingFiles) { | 152 TEST(ExtensionL10nUtil, LoadMessageCatalogsMissingFiles) { |
| 160 base::ScopedTempDir temp; | 153 base::ScopedTempDir temp; |
| 161 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 154 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 162 | 155 |
| 163 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 156 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 164 ASSERT_TRUE(base::CreateDirectory(src_path)); | 157 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 165 | 158 |
| 166 std::set<std::string> valid_locales; | 159 std::set<std::string> valid_locales; |
| 167 valid_locales.insert("sr"); | 160 valid_locales.insert("sr"); |
| 168 valid_locales.insert("en"); | 161 valid_locales.insert("en"); |
| 169 std::string error; | 162 std::string error; |
| 170 EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs(src_path, | 163 EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs( |
| 171 "en", | 164 src_path, "en", "sr", valid_locales, &error)); |
| 172 "sr", | |
| 173 valid_locales, | |
| 174 &error)); | |
| 175 EXPECT_FALSE(error.empty()); | 165 EXPECT_FALSE(error.empty()); |
| 176 } | 166 } |
| 177 | 167 |
| 178 TEST(ExtensionL10nUtil, LoadMessageCatalogsBadJSONFormat) { | 168 TEST(ExtensionL10nUtil, LoadMessageCatalogsBadJSONFormat) { |
| 179 base::ScopedTempDir temp; | 169 base::ScopedTempDir temp; |
| 180 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 170 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 181 | 171 |
| 182 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 172 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 183 ASSERT_TRUE(base::CreateDirectory(src_path)); | 173 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 184 | 174 |
| 185 base::FilePath locale = src_path.AppendASCII("sr"); | 175 base::FilePath locale = src_path.AppendASCII("sr"); |
| 186 ASSERT_TRUE(base::CreateDirectory(locale)); | 176 ASSERT_TRUE(base::CreateDirectory(locale)); |
| 187 | 177 |
| 188 std::string data = "{ \"name\":"; | 178 std::string data = "{ \"name\":"; |
| 189 base::FilePath messages_file = locale.Append(kMessagesFilename); | 179 base::FilePath messages_file = locale.Append(kMessagesFilename); |
| 190 ASSERT_TRUE(base::WriteFile(messages_file, data.c_str(), data.length())); | 180 ASSERT_TRUE(base::WriteFile(messages_file, data.c_str(), data.length())); |
| 191 | 181 |
| 192 std::set<std::string> valid_locales; | 182 std::set<std::string> valid_locales; |
| 193 valid_locales.insert("sr"); | 183 valid_locales.insert("sr"); |
| 194 valid_locales.insert("en_US"); | 184 valid_locales.insert("en_US"); |
| 195 std::string error; | 185 std::string error; |
| 196 EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs(src_path, | 186 EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs( |
| 197 "en_US", | 187 src_path, "en_US", "sr", valid_locales, &error)); |
| 198 "sr", | 188 EXPECT_EQ(extensions::ErrorUtils::FormatErrorMessage( |
| 199 valid_locales, | 189 errors::kLocalesInvalidLocale, |
| 200 &error)); | 190 base::UTF16ToUTF8(messages_file.LossyDisplayName()), |
| 201 EXPECT_EQ( | 191 "Line: 1, column: 10, Unexpected token."), |
| 202 extensions::ErrorUtils::FormatErrorMessage( | 192 error); |
| 203 errors::kLocalesInvalidLocale, | |
| 204 base::UTF16ToUTF8(messages_file.LossyDisplayName()), | |
| 205 "Line: 1, column: 10, Unexpected token."), | |
| 206 error); | |
| 207 } | 193 } |
| 208 | 194 |
| 209 TEST(ExtensionL10nUtil, LoadMessageCatalogsDuplicateKeys) { | 195 TEST(ExtensionL10nUtil, LoadMessageCatalogsDuplicateKeys) { |
| 210 base::ScopedTempDir temp; | 196 base::ScopedTempDir temp; |
| 211 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 197 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 212 | 198 |
| 213 base::FilePath src_path = temp.path().Append(kLocaleFolder); | 199 base::FilePath src_path = temp.path().Append(kLocaleFolder); |
| 214 ASSERT_TRUE(base::CreateDirectory(src_path)); | 200 ASSERT_TRUE(base::CreateDirectory(src_path)); |
| 215 | 201 |
| 216 base::FilePath locale_1 = src_path.AppendASCII("en"); | 202 base::FilePath locale_1 = src_path.AppendASCII("en"); |
| 217 ASSERT_TRUE(base::CreateDirectory(locale_1)); | 203 ASSERT_TRUE(base::CreateDirectory(locale_1)); |
| 218 | 204 |
| 219 std::string data = | 205 std::string data = |
| 220 "{ \"name\": { \"message\": \"something\" }, " | 206 "{ \"name\": { \"message\": \"something\" }, " |
| 221 "\"name\": { \"message\": \"something else\" } }"; | 207 "\"name\": { \"message\": \"something else\" } }"; |
| 222 ASSERT_TRUE(base::WriteFile(locale_1.Append(kMessagesFilename), | 208 ASSERT_TRUE(base::WriteFile( |
| 223 data.c_str(), data.length())); | 209 locale_1.Append(kMessagesFilename), data.c_str(), data.length())); |
| 224 | 210 |
| 225 base::FilePath locale_2 = src_path.AppendASCII("sr"); | 211 base::FilePath locale_2 = src_path.AppendASCII("sr"); |
| 226 ASSERT_TRUE(base::CreateDirectory(locale_2)); | 212 ASSERT_TRUE(base::CreateDirectory(locale_2)); |
| 227 | 213 |
| 228 ASSERT_TRUE(base::WriteFile(locale_2.Append(kMessagesFilename), | 214 ASSERT_TRUE(base::WriteFile( |
| 229 data.c_str(), data.length())); | 215 locale_2.Append(kMessagesFilename), data.c_str(), data.length())); |
| 230 | 216 |
| 231 std::set<std::string> valid_locales; | 217 std::set<std::string> valid_locales; |
| 232 valid_locales.insert("sr"); | 218 valid_locales.insert("sr"); |
| 233 valid_locales.insert("en"); | 219 valid_locales.insert("en"); |
| 234 std::string error; | 220 std::string error; |
| 235 // JSON parser hides duplicates. We are going to get only one key/value | 221 // JSON parser hides duplicates. We are going to get only one key/value |
| 236 // pair at the end. | 222 // pair at the end. |
| 237 scoped_ptr<MessageBundle> message_bundle( | 223 scoped_ptr<MessageBundle> message_bundle( |
| 238 extension_l10n_util::LoadMessageCatalogs(src_path, | 224 extension_l10n_util::LoadMessageCatalogs( |
| 239 "en", | 225 src_path, "en", "sr", valid_locales, &error)); |
| 240 "sr", | |
| 241 valid_locales, | |
| 242 &error)); | |
| 243 EXPECT_TRUE(NULL != message_bundle.get()); | 226 EXPECT_TRUE(NULL != message_bundle.get()); |
| 244 EXPECT_TRUE(error.empty()); | 227 EXPECT_TRUE(error.empty()); |
| 245 } | 228 } |
| 246 | 229 |
| 247 // Caller owns the returned object. | 230 // Caller owns the returned object. |
| 248 MessageBundle* CreateManifestBundle() { | 231 MessageBundle* CreateManifestBundle() { |
| 249 linked_ptr<base::DictionaryValue> catalog(new base::DictionaryValue); | 232 linked_ptr<base::DictionaryValue> catalog(new base::DictionaryValue); |
| 250 | 233 |
| 251 base::DictionaryValue* name_tree = new base::DictionaryValue(); | 234 base::DictionaryValue* name_tree = new base::DictionaryValue(); |
| 252 name_tree->SetString("message", "name"); | 235 name_tree->SetString("message", "name"); |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 EXPECT_TRUE( | 495 EXPECT_TRUE( |
| 513 extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); | 496 extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); |
| 514 | 497 |
| 515 std::string result; | 498 std::string result; |
| 516 ASSERT_TRUE(manifest.GetString(keys::kName, &result)); | 499 ASSERT_TRUE(manifest.GetString(keys::kName, &result)); |
| 517 EXPECT_EQ("name", result); | 500 EXPECT_EQ("name", result); |
| 518 | 501 |
| 519 ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); | 502 ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); |
| 520 EXPECT_EQ("description", result); | 503 EXPECT_EQ("description", result); |
| 521 | 504 |
| 522 ASSERT_TRUE(manifest.GetString("commands.first_command.description", | 505 ASSERT_TRUE( |
| 523 &result)); | 506 manifest.GetString("commands.first_command.description", &result)); |
| 524 EXPECT_EQ("first command", result); | 507 EXPECT_EQ("first command", result); |
| 525 | 508 |
| 526 ASSERT_TRUE(manifest.GetString("commands.second_command.description", | 509 ASSERT_TRUE( |
| 527 &result)); | 510 manifest.GetString("commands.second_command.description", &result)); |
| 528 EXPECT_EQ("second command", result); | 511 EXPECT_EQ("second command", result); |
| 529 | 512 |
| 530 EXPECT_TRUE(error.empty()); | 513 EXPECT_TRUE(error.empty()); |
| 531 } | 514 } |
| 532 | 515 |
| 533 TEST(ExtensionL10nUtil, LocalizeManifestWithShortName) { | 516 TEST(ExtensionL10nUtil, LocalizeManifestWithShortName) { |
| 534 base::DictionaryValue manifest; | 517 base::DictionaryValue manifest; |
| 535 manifest.SetString(keys::kName, "extension name"); | 518 manifest.SetString(keys::kName, "extension name"); |
| 536 manifest.SetString(keys::kShortName, "__MSG_short_name__"); | 519 manifest.SetString(keys::kShortName, "__MSG_short_name__"); |
| 537 | 520 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 std::vector<std::string> fallback_locales; | 653 std::vector<std::string> fallback_locales; |
| 671 extension_l10n_util::GetAllFallbackLocales("en_US", "all", &fallback_locales); | 654 extension_l10n_util::GetAllFallbackLocales("en_US", "all", &fallback_locales); |
| 672 ASSERT_EQ(3U, fallback_locales.size()); | 655 ASSERT_EQ(3U, fallback_locales.size()); |
| 673 | 656 |
| 674 CHECK_EQ("en_US", fallback_locales[0]); | 657 CHECK_EQ("en_US", fallback_locales[0]); |
| 675 CHECK_EQ("en", fallback_locales[1]); | 658 CHECK_EQ("en", fallback_locales[1]); |
| 676 CHECK_EQ("all", fallback_locales[2]); | 659 CHECK_EQ("all", fallback_locales[2]); |
| 677 } | 660 } |
| 678 | 661 |
| 679 } // namespace | 662 } // namespace |
| OLD | NEW |