Index: ios/chrome/browser/ui/file_locations_unittest.mm |
diff --git a/ios/chrome/browser/ui/file_locations_unittest.mm b/ios/chrome/browser/ui/file_locations_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7c0c0b25617f22df6b1aa065eaec5a196b82273b |
--- /dev/null |
+++ b/ios/chrome/browser/ui/file_locations_unittest.mm |
@@ -0,0 +1,90 @@ |
+// Copyright 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/chrome/browser/ui/file_locations.h" |
+ |
+#include "base/mac/foundation_util.h" |
+#include "base/strings/sys_string_conversions.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/platform_test.h" |
+ |
+extern std::string GetLocalizedFileName(const std::string& base_name, |
+ const std::string& locale, |
+ const std::string& ext); |
+ |
+extern std::string GetIOSLocaleMapping(const std::string& locale); |
+ |
+namespace { |
+ |
+class FileLocationsTest : public PlatformTest { |
+ protected: |
+ void SetUp() override { |
+ // These files must exist for this unit test to pass. |
+ termsBaseName_ = "terms"; |
+ extension_ = "html"; |
+ enFile_ = "terms_en.html"; |
+ frFile_ = "terms_fr.html"; |
+ } |
+ std::string termsBaseName_; |
+ std::string extension_; |
+ std::string enFile_; |
+ std::string frFile_; |
+}; |
+ |
+TEST_F(FileLocationsTest, TestTermsOfServiceUrl) { |
+ std::string filename(GetTermsOfServicePath()); |
+ EXPECT_FALSE(filename.empty()); |
+} |
+ |
+TEST_F(FileLocationsTest, TestIOSLocaleMapping) { |
+ EXPECT_EQ("en-US", GetIOSLocaleMapping("en-US")); |
+ EXPECT_EQ("es", GetIOSLocaleMapping("es")); |
+ EXPECT_EQ("es-419", GetIOSLocaleMapping("es-MX")); |
+ EXPECT_EQ("pt-BR", GetIOSLocaleMapping("pt")); |
+ EXPECT_EQ("pt-PT", GetIOSLocaleMapping("pt-PT")); |
+ EXPECT_EQ("zh-CN", GetIOSLocaleMapping("zh-Hans")); |
+ EXPECT_EQ("zh-TW", GetIOSLocaleMapping("zh-Hant")); |
+} |
+ |
+TEST_F(FileLocationsTest, TestFileNameLocaleWithExtension) { |
+ EXPECT_EQ(enFile_, GetLocalizedFileName(termsBaseName_, "en", extension_)); |
+ EXPECT_EQ(frFile_, GetLocalizedFileName(termsBaseName_, "fr", extension_)); |
+ EXPECT_EQ(frFile_, GetLocalizedFileName(termsBaseName_, "fr-XX", extension_)); |
+ |
+ // No ToS for "xx" locale so expect default "en" ToS. Unlikely, but this |
+ // test will fail once the ToS for "xx" locale is added. |
+ EXPECT_EQ(enFile_, GetLocalizedFileName(termsBaseName_, "xx", extension_)); |
+} |
+ |
+// Tests that locale/languages available on iOS are mapped to either a |
+// translated Chrome Terms of Service or to English. |
+TEST_F(FileLocationsTest, TestTermsOfServiceForSupportedLanguages) { |
+ // List of available localized terms_*.html files. Note that this list is |
+ // hardcoded and needs to be manually maintained as new locales are added |
+ // to Chrome. See http://crbug/522638 |
+ NSSet* localizedTermsHtml = |
+ [NSSet setWithObjects:@"ar", @"bg", @"ca", @"cs", @"da", @"de", @"el", |
+ @"en-GB", @"en", @"es-419", @"es", @"fa", @"fi", |
+ @"fr", @"he", @"hi", @"hr", @"hu", @"id", @"it", |
+ @"ja", @"ko", @"lt", @"nb", @"nl", @"pl", @"pt-BR", |
+ @"pt-PT", @"ro", @"ru", @"sk", @"sr", @"sv", @"th", |
+ @"tr", @"uk", @"vi", @"zh-CN", @"zh-TW", nil]; |
+ for (NSString* locale in [NSLocale availableLocaleIdentifiers]) { |
+ NSString* normalizedLocale = |
+ [locale stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; |
+ NSArray* parts = [normalizedLocale componentsSeparatedByString:@"-"]; |
+ NSString* language = [parts objectAtIndex:0]; |
+ std::string filename = GetLocalizedFileName( |
+ termsBaseName_, |
+ GetIOSLocaleMapping(base::SysNSStringToUTF8(normalizedLocale)), |
+ extension_); |
+ if (filename == enFile_ && ![language isEqualToString:@"en"]) { |
+ NSLog(@"OK: Locale %@ using language %@ falls back to use English ToS", |
+ locale, language); |
+ EXPECT_FALSE([localizedTermsHtml containsObject:language]); |
+ } |
+ } |
+} |
+ |
+} // namespace |