TestLocaleService.cpp (6003B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "gtest/gtest.h" 7 #include "mozilla/Preferences.h" 8 #include "mozilla/intl/Locale.h" 9 #include "mozilla/intl/LocaleService.h" 10 #include "mozilla/intl/Collator.h" 11 12 using namespace mozilla::intl; 13 14 TEST(Intl_Locale_LocaleService, CanonicalizeLanguageId) 15 { 16 nsCString locale("en-US.POSIX"); 17 ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); 18 ASSERT_TRUE(locale.EqualsLiteral("en-US")); 19 20 locale.AssignLiteral("en-US_POSIX"); 21 ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); 22 ASSERT_TRUE(locale.EqualsLiteral("en-US-posix")); 23 24 locale.AssignLiteral("en-US-POSIX"); 25 ASSERT_TRUE(LocaleService::CanonicalizeLanguageId(locale)); 26 ASSERT_TRUE(locale.EqualsLiteral("en-US-posix")); 27 28 locale.AssignLiteral("C"); 29 ASSERT_FALSE(LocaleService::CanonicalizeLanguageId(locale)); 30 ASSERT_TRUE(locale.EqualsLiteral("und")); 31 32 locale.AssignLiteral(""); 33 ASSERT_FALSE(LocaleService::CanonicalizeLanguageId(locale)); 34 ASSERT_TRUE(locale.EqualsLiteral("und")); 35 } 36 37 TEST(Intl_Locale_LocaleService, GetAppLocalesAsBCP47) 38 { 39 nsTArray<nsCString> appLocales; 40 LocaleService::GetInstance()->GetAppLocalesAsBCP47(appLocales); 41 42 ASSERT_FALSE(appLocales.IsEmpty()); 43 } 44 45 TEST(Intl_Locale_LocaleService, GetAppLocalesAsLangTags) 46 { 47 nsTArray<nsCString> appLocales; 48 LocaleService::GetInstance()->GetAppLocalesAsLangTags(appLocales); 49 50 ASSERT_FALSE(appLocales.IsEmpty()); 51 } 52 53 TEST(Intl_Locale_LocaleService, GetAppLocalesAsLangTags_lastIsPresent) 54 { 55 nsAutoCString lastFallbackLocale; 56 LocaleService::GetInstance()->GetLastFallbackLocale(lastFallbackLocale); 57 58 nsTArray<nsCString> appLocales; 59 LocaleService::GetInstance()->GetAppLocalesAsLangTags(appLocales); 60 61 ASSERT_TRUE(appLocales.Contains(lastFallbackLocale)); 62 } 63 64 TEST(Intl_Locale_LocaleService, GetAppLocaleAsLangTag) 65 { 66 nsTArray<nsCString> appLocales; 67 LocaleService::GetInstance()->GetAppLocalesAsLangTags(appLocales); 68 69 nsAutoCString locale; 70 LocaleService::GetInstance()->GetAppLocaleAsLangTag(locale); 71 72 ASSERT_TRUE(appLocales[0] == locale); 73 } 74 75 TEST(Intl_Locale_LocaleService, GetEllipsis) 76 { 77 nsAutoString ellipsis; 78 LocaleService::GetInstance()->GetEllipsis(ellipsis); 79 80 ASSERT_TRUE(ellipsis == u"…"); 81 } 82 83 TEST(Intl_Locale_LocaleService, GetRegionalPrefsLocales) 84 { 85 nsTArray<nsCString> rpLocales; 86 LocaleService::GetInstance()->GetRegionalPrefsLocales(rpLocales); 87 88 int32_t len = rpLocales.Length(); 89 ASSERT_TRUE(len > 0); 90 } 91 92 TEST(Intl_Locale_LocaleService, GetWebExposedLocales) 93 { 94 const nsTArray<nsCString> spoofLocale{"de"_ns}; 95 LocaleService::GetInstance()->SetAvailableLocales(spoofLocale); 96 LocaleService::GetInstance()->SetRequestedLocales(spoofLocale); 97 98 nsTArray<nsCString> pvLocales; 99 100 mozilla::Preferences::SetInt("privacy.spoof_english", 0); 101 LocaleService::GetInstance()->GetWebExposedLocales(pvLocales); 102 ASSERT_TRUE(pvLocales.Length() > 0); 103 ASSERT_TRUE(pvLocales[0].Equals("de"_ns)); 104 105 mozilla::Preferences::SetCString("intl.locale.privacy.web_exposed", "zh-TW"); 106 LocaleService::GetInstance()->GetWebExposedLocales(pvLocales); 107 ASSERT_TRUE(pvLocales.Length() > 0); 108 ASSERT_TRUE(pvLocales[0].Equals("zh-TW"_ns)); 109 110 mozilla::Preferences::SetBool("privacy.resistFingerprinting", true); 111 mozilla::Preferences::SetInt("privacy.spoof_english", 2); 112 LocaleService::GetInstance()->GetWebExposedLocales(pvLocales); 113 ASSERT_EQ(1u, pvLocales.Length()); 114 ASSERT_TRUE(pvLocales[0].Equals("en-US"_ns)); 115 116 mozilla::Preferences::ClearUser("privacy.spoof_english"); 117 mozilla::Preferences::ClearUser("privacy.resistFingerprinting"); 118 mozilla::Preferences::ClearUser("intl.locale.privacy.web_exposed"); 119 } 120 121 TEST(Intl_Locale_LocaleService, GetRequestedLocales) 122 { 123 nsTArray<nsCString> reqLocales; 124 LocaleService::GetInstance()->GetRequestedLocales(reqLocales); 125 126 int32_t len = reqLocales.Length(); 127 ASSERT_TRUE(len > 0); 128 } 129 130 TEST(Intl_Locale_LocaleService, GetAvailableLocales) 131 { 132 nsTArray<nsCString> availableLocales; 133 LocaleService::GetInstance()->GetAvailableLocales(availableLocales); 134 135 int32_t len = availableLocales.Length(); 136 ASSERT_TRUE(len > 0); 137 } 138 139 TEST(Intl_Locale_LocaleService, GetPackagedLocales) 140 { 141 nsTArray<nsCString> packagedLocales; 142 LocaleService::GetInstance()->GetPackagedLocales(packagedLocales); 143 144 int32_t len = packagedLocales.Length(); 145 ASSERT_TRUE(len > 0); 146 } 147 148 TEST(Intl_Locale_LocaleService, GetDefaultLocale) 149 { 150 nsAutoCString locStr; 151 LocaleService::GetInstance()->GetDefaultLocale(locStr); 152 153 ASSERT_FALSE(locStr.IsEmpty()); 154 Locale loc; 155 ASSERT_TRUE(LocaleParser::TryParse(locStr, loc).isOk()); 156 } 157 158 TEST(Intl_Locale_LocaleService, IsAppLocaleRTL) 159 { 160 mozilla::Preferences::SetCString("intl.l10n.pseudo", "bidi"); 161 ASSERT_TRUE(LocaleService::GetInstance()->IsAppLocaleRTL()); 162 mozilla::Preferences::ClearUser("intl.l10n.pseudo"); 163 } 164 165 TEST(Intl_Locale_LocaleService, AlwaysAppendAccesskeys) 166 { 167 ASSERT_FALSE(LocaleService::GetInstance()->AlwaysAppendAccesskeys()); 168 } 169 170 TEST(Intl_Locale_LocaleService, InsertSeparatorBeforeAccesskeys) 171 { 172 ASSERT_TRUE(LocaleService::GetInstance()->InsertSeparatorBeforeAccesskeys()); 173 } 174 175 TEST(Intl_Locale_LocaleService, TryCreateComponent) 176 { 177 { 178 // Create a Collator with the app locale. 179 auto result = LocaleService::GetInstance()->TryCreateComponent<Collator>(); 180 ASSERT_TRUE(result.isOk()); 181 } 182 { 183 // Create a Collator with the "en" locale. 184 auto result = 185 LocaleService::GetInstance()->TryCreateComponentWithLocale<Collator>( 186 "en"); 187 ASSERT_TRUE(result.isOk()); 188 } 189 { 190 // Fallback to the app locale when an invalid one is used. 191 auto result = 192 LocaleService::GetInstance()->TryCreateComponentWithLocale<Collator>( 193 "$invalidName"); 194 ASSERT_TRUE(result.isOk()); 195 } 196 }