| // Copyright 2018 PDFium 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 "xfa/fxfa/parser/cxfa_xmllocale.h" |
| |
| #include <memory> |
| |
| #include "testing/fxgc_unittest.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| const char kXMLData[] = |
| "<locale name=\"en_US\" desc=\"English(America)\">" |
| "<calendarSymbols name=\"gregorian\"><monthNames><month>January</month>" |
| "<month>February</month>" |
| "<month>March</month>" |
| "<month>April</month>" |
| "<month>May</month>" |
| "<month>June</month>" |
| "<month>July</month>" |
| "<month>August</month>" |
| "<month>September</month>" |
| "<month>October</month>" |
| "<month>November</month>" |
| "<month>December</month>" |
| "</monthNames>" |
| "<monthNames abbr=\"1\"><month>Jan</month>" |
| "<month>Feb</month>" |
| "<month>Mar</month>" |
| "<month>Apr</month>" |
| "<month>May</month>" |
| "<month>Jun</month>" |
| "<month>Jul</month>" |
| "<month>Aug</month>" |
| "<month>Sep</month>" |
| "<month>Oct</month>" |
| "<month>Nov</month>" |
| "<month>Dec</month>" |
| "</monthNames>" |
| "<dayNames><day>Sunday</day>" |
| "<day>Monday</day>" |
| "<day>Tuesday</day>" |
| "<day>Wednesday</day>" |
| "<day>Thursday</day>" |
| "<day>Friday</day>" |
| "<day>Saturday</day>" |
| "</dayNames>" |
| "<dayNames abbr=\"1\"><day>Sun</day>" |
| "<day>Mon</day>" |
| "<day>Tue</day>" |
| "<day>Wed</day>" |
| "<day>Thu</day>" |
| "<day>Fri</day>" |
| "<day>Sat</day>" |
| "</dayNames>" |
| "<meridiemNames><meridiem>AM</meridiem>" |
| "<meridiem>PM</meridiem>" |
| "</meridiemNames>" |
| "<eraNames><era>BC</era>" |
| "<era>AD</era>" |
| "</eraNames>" |
| "</calendarSymbols>" |
| "<datePatterns><datePattern name=\"full\">EEEE, MMMM D, YYYY</datePattern>" |
| "<datePattern name=\"long\">MMMM D, YYYY</datePattern>" |
| "<datePattern name=\"med\">MMM D, YYYY</datePattern>" |
| "<datePattern name=\"short\">M/D/YY</datePattern>" |
| "</datePatterns>" |
| "<timePatterns><timePattern name=\"full\">h:MM:SS A Z</timePattern>" |
| "<timePattern name=\"long\">h:MM:SS A Z</timePattern>" |
| "<timePattern name=\"med\">h:MM:SS A</timePattern>" |
| "<timePattern name=\"short\">h:MM A</timePattern>" |
| "</timePatterns>" |
| "<dateTimeSymbols>GyMdkHmsSEDFwWahKzZ</dateTimeSymbols>" |
| "<numberPatterns><numberPattern name=\"numeric\">z,zz9.zzz</numberPattern>" |
| "<numberPattern name=\"currency\">$z,zz9.99|($z,zz9.99)</numberPattern>" |
| "<numberPattern name=\"percent\">z,zz9%</numberPattern>" |
| "</numberPatterns>" |
| "<numberSymbols><numberSymbol name=\"decimal\">.</numberSymbol>" |
| "<numberSymbol name=\"grouping\">,</numberSymbol>" |
| "<numberSymbol name=\"percent\">%</numberSymbol>" |
| "<numberSymbol name=\"minus\">-</numberSymbol>" |
| "<numberSymbol name=\"zero\">0</numberSymbol>" |
| "</numberSymbols>" |
| "<currencySymbols><currencySymbol name=\"symbol\">$</currencySymbol>" |
| "<currencySymbol name=\"isoname\">USD</currencySymbol>" |
| "<currencySymbol name=\"decimal\">.</currencySymbol>" |
| "</currencySymbols>" |
| "</locale>"; |
| |
| CXFA_XMLLocale* CreateLocaleHelper(cppgc::Heap* heap) { |
| return CXFA_XMLLocale::Create( |
| heap, pdfium::as_writable_bytes(pdfium::make_span( |
| const_cast<char*>(kXMLData), strlen(kXMLData)))); |
| } |
| |
| } // namespace |
| |
| class CXFA_XMLLocaleTest : public FXGCUnitTest {}; |
| |
| TEST_F(CXFA_XMLLocaleTest, Create) { |
| auto* locale = CreateLocaleHelper(heap()); |
| EXPECT_TRUE(locale != nullptr); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, CreateBadXML) { |
| auto* locale = CXFA_XMLLocale::Create(heap(), pdfium::span<uint8_t>()); |
| EXPECT_TRUE(locale == nullptr); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetName) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"en_US", locale->GetName()); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetNumericSymbols) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L".", locale->GetDecimalSymbol()); |
| EXPECT_EQ(L",", locale->GetGroupingSymbol()); |
| EXPECT_EQ(L"%", locale->GetPercentSymbol()); |
| EXPECT_EQ(L"-", locale->GetMinusSymbol()); |
| EXPECT_EQ(L"$", locale->GetCurrencySymbol()); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetDateTimeSymbols) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"GyMdkHmsSEDFwWahKzZ", locale->GetDateTimeSymbols()); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetMonthName) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"", locale->GetMonthName(24, false)); |
| EXPECT_EQ(L"", locale->GetMonthName(-5, false)); |
| EXPECT_EQ(L"Feb", locale->GetMonthName(1, true)); |
| EXPECT_EQ(L"February", locale->GetMonthName(1, false)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetDayName) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"", locale->GetDayName(24, false)); |
| EXPECT_EQ(L"", locale->GetDayName(-5, false)); |
| EXPECT_EQ(L"Mon", locale->GetDayName(1, true)); |
| EXPECT_EQ(L"Monday", locale->GetDayName(1, false)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetMeridiemName) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"AM", locale->GetMeridiemName(true)); |
| EXPECT_EQ(L"PM", locale->GetMeridiemName(false)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetEraName) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"AD", locale->GetEraName(true)); |
| EXPECT_EQ(L"BC", locale->GetEraName(false)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetDatePattern) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"M/D/YY", |
| locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kShort)); |
| EXPECT_EQ(L"MMM D, YYYY", |
| locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kDefault)); |
| EXPECT_EQ(L"MMM D, YYYY", |
| locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kMedium)); |
| EXPECT_EQ(L"EEEE, MMMM D, YYYY", |
| locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kFull)); |
| EXPECT_EQ(L"MMMM D, YYYY", |
| locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kLong)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetTimePattern) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"h:MM A", |
| locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kShort)); |
| EXPECT_EQ(L"h:MM:SS A", |
| locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kDefault)); |
| EXPECT_EQ(L"h:MM:SS A", |
| locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kMedium)); |
| EXPECT_EQ(L"h:MM:SS A Z", |
| locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kFull)); |
| EXPECT_EQ(L"h:MM:SS A Z", |
| locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kLong)); |
| } |
| |
| TEST_F(CXFA_XMLLocaleTest, GetNumPattern) { |
| auto* locale = CreateLocaleHelper(heap()); |
| ASSERT_TRUE(locale != nullptr); |
| |
| EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz%", |
| locale->GetNumPattern(LocaleIface::NumSubcategory::kPercent)); |
| EXPECT_EQ(L"$z,zzz,zzz,zzz,zzz,zz9.99", |
| locale->GetNumPattern(LocaleIface::NumSubcategory::kCurrency)); |
| EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zz9.zzz", |
| locale->GetNumPattern(LocaleIface::NumSubcategory::kDecimal)); |
| EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz", |
| locale->GetNumPattern(LocaleIface::NumSubcategory::kInteger)); |
| } |