tor-browser

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

TestCalendar.cpp (5271B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 #include "gtest/gtest.h"
      5 
      6 #include "mozilla/intl/Calendar.h"
      7 #include "mozilla/intl/DateTimeFormat.h"
      8 #include "mozilla/Span.h"
      9 #include "TestBuffer.h"
     10 
     11 namespace mozilla::intl {
     12 
     13 // Firefox 1.0 release date.
     14 const double CALENDAR_DATE = 1032800850000.0;
     15 
     16 TEST(IntlCalendar, GetLegacyKeywordValuesForLocale)
     17 {
     18  bool hasGregorian = false;
     19  bool hasIslamic = false;
     20  auto gregorian = MakeStringSpan("gregorian");
     21  auto islamic = MakeStringSpan("islamic");
     22  auto keywords = Calendar::GetLegacyKeywordValuesForLocale("en-US").unwrap();
     23  for (auto name : keywords) {
     24    // Check a few keywords, as this list may not be stable between ICU updates.
     25    if (name.unwrap() == gregorian) {
     26      hasGregorian = true;
     27    }
     28    if (name.unwrap() == islamic) {
     29      hasIslamic = true;
     30    }
     31  }
     32  ASSERT_TRUE(hasGregorian);
     33  ASSERT_TRUE(hasIslamic);
     34 }
     35 
     36 TEST(IntlCalendar, GetBcp47KeywordValuesForLocale)
     37 {
     38  bool hasGregory = false;
     39  bool hasIslamic = false;
     40  auto gregory = MakeStringSpan("gregory");
     41  auto islamic = MakeStringSpan("islamic");
     42  auto keywords = Calendar::GetBcp47KeywordValuesForLocale("en-US").unwrap();
     43  for (auto name : keywords) {
     44    // Check a few keywords, as this list may not be stable between ICU updates.
     45    if (name.unwrap() == gregory) {
     46      hasGregory = true;
     47    }
     48    if (name.unwrap() == islamic) {
     49      hasIslamic = true;
     50    }
     51  }
     52  ASSERT_TRUE(hasGregory);
     53  ASSERT_TRUE(hasIslamic);
     54 }
     55 
     56 TEST(IntlCalendar, GetBcp47KeywordValuesForLocaleCommonlyUsed)
     57 {
     58  bool hasGregory = false;
     59  bool hasIslamic = false;
     60  auto gregory = MakeStringSpan("gregory");
     61  auto islamic = MakeStringSpan("islamic");
     62  auto keywords = Calendar::GetBcp47KeywordValuesForLocale(
     63                      "en-US", Calendar::CommonlyUsed::Yes)
     64                      .unwrap();
     65  for (auto name : keywords) {
     66    // Check a few keywords, as this list may not be stable between ICU updates.
     67    if (name.unwrap() == gregory) {
     68      hasGregory = true;
     69    }
     70    if (name.unwrap() == islamic) {
     71      hasIslamic = true;
     72    }
     73  }
     74  ASSERT_TRUE(hasGregory);
     75  ASSERT_FALSE(hasIslamic);
     76 }
     77 
     78 TEST(IntlCalendar, GetBcp47Type)
     79 {
     80  auto calendar =
     81      Calendar::TryCreate("en-US", Some(MakeStringSpan(u"GMT+3"))).unwrap();
     82  ASSERT_STREQ(calendar->GetBcp47Type().unwrap().data(), "gregory");
     83 }
     84 
     85 TEST(IntlCalendar, SetTimeInMs)
     86 {
     87  auto calendar =
     88      Calendar::TryCreate("en-US", Some(MakeStringSpan(u"GMT+3"))).unwrap();
     89 
     90  // There is no way to verify the results. Unwrap the results to ensure it
     91  // doesn't fail, but don't check the values.
     92  calendar->SetTimeInMs(CALENDAR_DATE).unwrap();
     93 }
     94 
     95 TEST(IntlCalendar, CloneFrom)
     96 {
     97  DateTimeFormat::StyleBag style;
     98  style.date = Some(DateTimeFormat::Style::Medium);
     99  style.time = Some(DateTimeFormat::Style::Medium);
    100  auto dtFormat = DateTimeFormat::TryCreateFromStyle(
    101                      MakeStringSpan("en-US"), style,
    102                      // It's ok to pass nullptr here, as it will cause format
    103                      // operations to fail, but this test is only checking
    104                      // calendar cloning.
    105                      nullptr, Some(MakeStringSpan(u"America/Chicago")))
    106                      .unwrap();
    107 
    108  dtFormat->CloneCalendar(CALENDAR_DATE).unwrap();
    109 }
    110 
    111 TEST(IntlCalendar, GetWeekend)
    112 {
    113  auto calendar_en_US = Calendar::TryCreate("en-US").unwrap();
    114  auto weekend_en_US = calendar_en_US->GetWeekend().unwrap();
    115  ASSERT_EQ(weekend_en_US, EnumSet({Weekday::Saturday, Weekday::Sunday}));
    116 
    117  auto calendar_de_DE = Calendar::TryCreate("de-DE").unwrap();
    118  auto weekend_de_DE = calendar_de_DE->GetWeekend().unwrap();
    119  ASSERT_EQ(weekend_de_DE, EnumSet({Weekday::Saturday, Weekday::Sunday}));
    120 
    121  auto calendar_ar_EG = Calendar::TryCreate("ar-EG").unwrap();
    122  auto weekend_ar_EG = calendar_ar_EG->GetWeekend().unwrap();
    123  ASSERT_EQ(weekend_ar_EG, EnumSet({Weekday::Friday, Weekday::Saturday}));
    124 }
    125 
    126 TEST(IntlCalendar, GetFirstDayOfWeek)
    127 {
    128  auto calendar_en_US = Calendar::TryCreate("en-US").unwrap();
    129  auto firstDayOfWeek_en_US = calendar_en_US->GetFirstDayOfWeek();
    130  ASSERT_EQ(firstDayOfWeek_en_US, Weekday::Sunday);
    131 
    132  auto calendar_de_DE = Calendar::TryCreate("de-DE").unwrap();
    133  auto firstDayOfWeek_de_DE = calendar_de_DE->GetFirstDayOfWeek();
    134  ASSERT_EQ(firstDayOfWeek_de_DE, Weekday::Monday);
    135 
    136  auto calendar_ar_EG = Calendar::TryCreate("ar-EG").unwrap();
    137  auto firstDayOfWeek_ar_EG = calendar_ar_EG->GetFirstDayOfWeek();
    138  ASSERT_EQ(firstDayOfWeek_ar_EG, Weekday::Saturday);
    139 }
    140 
    141 TEST(IntlCalendar, GetMinimalDaysInFirstWeek)
    142 {
    143  auto calendar_en_US = Calendar::TryCreate("en-US").unwrap();
    144  auto minimalDays_en_US = calendar_en_US->GetMinimalDaysInFirstWeek();
    145  ASSERT_EQ(minimalDays_en_US, 1);
    146 
    147  auto calendar_de_DE = Calendar::TryCreate("de-DE").unwrap();
    148  auto minimalDays_de_DE = calendar_de_DE->GetMinimalDaysInFirstWeek();
    149  ASSERT_EQ(minimalDays_de_DE, 4);
    150 
    151  auto calendar_ar_EG = Calendar::TryCreate("ar-EG").unwrap();
    152  auto minimalDays_ar_EG = calendar_ar_EG->GetMinimalDaysInFirstWeek();
    153  ASSERT_EQ(minimalDays_ar_EG, 1);
    154 }
    155 
    156 }  // namespace mozilla::intl