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