// Copyright 2018 The PDFium Authors
// 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 "testing/fxgc_unittest.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
const char kXMLData[] =
""
"January"
"February"
"March"
"April"
"May"
"June"
"July"
"August"
"September"
"October"
"November"
"December"
""
"Jan"
"Feb"
"Mar"
"Apr"
"May"
"Jun"
"Jul"
"Aug"
"Sep"
"Oct"
"Nov"
"Dec"
""
"Sunday"
"Monday"
"Tuesday"
"Wednesday"
"Thursday"
"Friday"
"Saturday"
""
"Sun"
"Mon"
"Tue"
"Wed"
"Thu"
"Fri"
"Sat"
""
"AM"
"PM"
""
"BC"
"AD"
""
""
"EEEE, MMMM D, YYYY"
"MMMM D, YYYY"
"MMM D, YYYY"
"M/D/YY"
""
"h:MM:SS A Z"
"h:MM:SS A Z"
"h:MM:SS A"
"h:MM A"
""
"GyMdkHmsSEDFwWahKzZ"
"z,zz9.zzz"
"$z,zz9.99|($z,zz9.99)"
"z,zz9%"
""
"."
","
"%"
"-"
"0"
""
"$"
"USD"
"."
""
"";
CXFA_XMLLocale* CreateLocaleHelper(cppgc::Heap* heap) {
return CXFA_XMLLocale::Create(
heap, pdfium::as_writable_bytes(pdfium::make_span(
const_cast(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());
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));
}