tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }