• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "xfa/fxfa/parser/cxfa_xmllocale.h"
6 
7 #include "testing/fxgc_unittest.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace {
11 
12 const char kXMLData[] =
13     "<locale name=\"en_US\" desc=\"English(America)\">"
14     "<calendarSymbols name=\"gregorian\"><monthNames><month>January</month>"
15     "<month>February</month>"
16     "<month>March</month>"
17     "<month>April</month>"
18     "<month>May</month>"
19     "<month>June</month>"
20     "<month>July</month>"
21     "<month>August</month>"
22     "<month>September</month>"
23     "<month>October</month>"
24     "<month>November</month>"
25     "<month>December</month>"
26     "</monthNames>"
27     "<monthNames abbr=\"1\"><month>Jan</month>"
28     "<month>Feb</month>"
29     "<month>Mar</month>"
30     "<month>Apr</month>"
31     "<month>May</month>"
32     "<month>Jun</month>"
33     "<month>Jul</month>"
34     "<month>Aug</month>"
35     "<month>Sep</month>"
36     "<month>Oct</month>"
37     "<month>Nov</month>"
38     "<month>Dec</month>"
39     "</monthNames>"
40     "<dayNames><day>Sunday</day>"
41     "<day>Monday</day>"
42     "<day>Tuesday</day>"
43     "<day>Wednesday</day>"
44     "<day>Thursday</day>"
45     "<day>Friday</day>"
46     "<day>Saturday</day>"
47     "</dayNames>"
48     "<dayNames abbr=\"1\"><day>Sun</day>"
49     "<day>Mon</day>"
50     "<day>Tue</day>"
51     "<day>Wed</day>"
52     "<day>Thu</day>"
53     "<day>Fri</day>"
54     "<day>Sat</day>"
55     "</dayNames>"
56     "<meridiemNames><meridiem>AM</meridiem>"
57     "<meridiem>PM</meridiem>"
58     "</meridiemNames>"
59     "<eraNames><era>BC</era>"
60     "<era>AD</era>"
61     "</eraNames>"
62     "</calendarSymbols>"
63     "<datePatterns><datePattern name=\"full\">EEEE, MMMM D, YYYY</datePattern>"
64     "<datePattern name=\"long\">MMMM D, YYYY</datePattern>"
65     "<datePattern name=\"med\">MMM D, YYYY</datePattern>"
66     "<datePattern name=\"short\">M/D/YY</datePattern>"
67     "</datePatterns>"
68     "<timePatterns><timePattern name=\"full\">h:MM:SS A Z</timePattern>"
69     "<timePattern name=\"long\">h:MM:SS A Z</timePattern>"
70     "<timePattern name=\"med\">h:MM:SS A</timePattern>"
71     "<timePattern name=\"short\">h:MM A</timePattern>"
72     "</timePatterns>"
73     "<dateTimeSymbols>GyMdkHmsSEDFwWahKzZ</dateTimeSymbols>"
74     "<numberPatterns><numberPattern name=\"numeric\">z,zz9.zzz</numberPattern>"
75     "<numberPattern name=\"currency\">$z,zz9.99|($z,zz9.99)</numberPattern>"
76     "<numberPattern name=\"percent\">z,zz9%</numberPattern>"
77     "</numberPatterns>"
78     "<numberSymbols><numberSymbol name=\"decimal\">.</numberSymbol>"
79     "<numberSymbol name=\"grouping\">,</numberSymbol>"
80     "<numberSymbol name=\"percent\">%</numberSymbol>"
81     "<numberSymbol name=\"minus\">-</numberSymbol>"
82     "<numberSymbol name=\"zero\">0</numberSymbol>"
83     "</numberSymbols>"
84     "<currencySymbols><currencySymbol name=\"symbol\">$</currencySymbol>"
85     "<currencySymbol name=\"isoname\">USD</currencySymbol>"
86     "<currencySymbol name=\"decimal\">.</currencySymbol>"
87     "</currencySymbols>"
88     "</locale>";
89 
CreateLocaleHelper(cppgc::Heap * heap)90 CXFA_XMLLocale* CreateLocaleHelper(cppgc::Heap* heap) {
91   return CXFA_XMLLocale::Create(heap, ByteStringView(kXMLData).unsigned_span());
92 }
93 
94 }  // namespace
95 
96 class CXFAXMLLocaleTest : public FXGCUnitTest {};
97 
TEST_F(CXFAXMLLocaleTest,Create)98 TEST_F(CXFAXMLLocaleTest, Create) {
99   auto* locale = CreateLocaleHelper(heap());
100   EXPECT_TRUE(locale != nullptr);
101 }
102 
TEST_F(CXFAXMLLocaleTest,CreateBadXML)103 TEST_F(CXFAXMLLocaleTest, CreateBadXML) {
104   auto* locale = CXFA_XMLLocale::Create(heap(), pdfium::span<uint8_t>());
105   EXPECT_TRUE(locale == nullptr);
106 }
107 
TEST_F(CXFAXMLLocaleTest,GetName)108 TEST_F(CXFAXMLLocaleTest, GetName) {
109   auto* locale = CreateLocaleHelper(heap());
110   ASSERT_TRUE(locale != nullptr);
111 
112   EXPECT_EQ(L"en_US", locale->GetName());
113 }
114 
TEST_F(CXFAXMLLocaleTest,GetNumericSymbols)115 TEST_F(CXFAXMLLocaleTest, GetNumericSymbols) {
116   auto* locale = CreateLocaleHelper(heap());
117   ASSERT_TRUE(locale != nullptr);
118 
119   EXPECT_EQ(L".", locale->GetDecimalSymbol());
120   EXPECT_EQ(L",", locale->GetGroupingSymbol());
121   EXPECT_EQ(L"%", locale->GetPercentSymbol());
122   EXPECT_EQ(L"-", locale->GetMinusSymbol());
123   EXPECT_EQ(L"$", locale->GetCurrencySymbol());
124 }
125 
TEST_F(CXFAXMLLocaleTest,GetDateTimeSymbols)126 TEST_F(CXFAXMLLocaleTest, GetDateTimeSymbols) {
127   auto* locale = CreateLocaleHelper(heap());
128   ASSERT_TRUE(locale != nullptr);
129 
130   EXPECT_EQ(L"GyMdkHmsSEDFwWahKzZ", locale->GetDateTimeSymbols());
131 }
132 
TEST_F(CXFAXMLLocaleTest,GetMonthName)133 TEST_F(CXFAXMLLocaleTest, GetMonthName) {
134   auto* locale = CreateLocaleHelper(heap());
135   ASSERT_TRUE(locale != nullptr);
136 
137   EXPECT_EQ(L"", locale->GetMonthName(24, false));
138   EXPECT_EQ(L"", locale->GetMonthName(-5, false));
139   EXPECT_EQ(L"Feb", locale->GetMonthName(1, true));
140   EXPECT_EQ(L"February", locale->GetMonthName(1, false));
141 }
142 
TEST_F(CXFAXMLLocaleTest,GetDayName)143 TEST_F(CXFAXMLLocaleTest, GetDayName) {
144   auto* locale = CreateLocaleHelper(heap());
145   ASSERT_TRUE(locale != nullptr);
146 
147   EXPECT_EQ(L"", locale->GetDayName(24, false));
148   EXPECT_EQ(L"", locale->GetDayName(-5, false));
149   EXPECT_EQ(L"Mon", locale->GetDayName(1, true));
150   EXPECT_EQ(L"Monday", locale->GetDayName(1, false));
151 }
152 
TEST_F(CXFAXMLLocaleTest,GetMeridiemName)153 TEST_F(CXFAXMLLocaleTest, GetMeridiemName) {
154   auto* locale = CreateLocaleHelper(heap());
155   ASSERT_TRUE(locale != nullptr);
156 
157   EXPECT_EQ(L"AM", locale->GetMeridiemName(true));
158   EXPECT_EQ(L"PM", locale->GetMeridiemName(false));
159 }
160 
TEST_F(CXFAXMLLocaleTest,GetEraName)161 TEST_F(CXFAXMLLocaleTest, GetEraName) {
162   auto* locale = CreateLocaleHelper(heap());
163   ASSERT_TRUE(locale != nullptr);
164 
165   EXPECT_EQ(L"AD", locale->GetEraName(true));
166   EXPECT_EQ(L"BC", locale->GetEraName(false));
167 }
168 
TEST_F(CXFAXMLLocaleTest,GetDatePattern)169 TEST_F(CXFAXMLLocaleTest, GetDatePattern) {
170   auto* locale = CreateLocaleHelper(heap());
171   ASSERT_TRUE(locale != nullptr);
172 
173   EXPECT_EQ(L"M/D/YY",
174             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kShort));
175   EXPECT_EQ(L"MMM D, YYYY",
176             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kDefault));
177   EXPECT_EQ(L"MMM D, YYYY",
178             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kMedium));
179   EXPECT_EQ(L"EEEE, MMMM D, YYYY",
180             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kFull));
181   EXPECT_EQ(L"MMMM D, YYYY",
182             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kLong));
183 }
184 
TEST_F(CXFAXMLLocaleTest,GetTimePattern)185 TEST_F(CXFAXMLLocaleTest, GetTimePattern) {
186   auto* locale = CreateLocaleHelper(heap());
187   ASSERT_TRUE(locale != nullptr);
188 
189   EXPECT_EQ(L"h:MM A",
190             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kShort));
191   EXPECT_EQ(L"h:MM:SS A",
192             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kDefault));
193   EXPECT_EQ(L"h:MM:SS A",
194             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kMedium));
195   EXPECT_EQ(L"h:MM:SS A Z",
196             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kFull));
197   EXPECT_EQ(L"h:MM:SS A Z",
198             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kLong));
199 }
200 
TEST_F(CXFAXMLLocaleTest,GetNumPattern)201 TEST_F(CXFAXMLLocaleTest, GetNumPattern) {
202   auto* locale = CreateLocaleHelper(heap());
203   ASSERT_TRUE(locale != nullptr);
204 
205   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz%",
206             locale->GetNumPattern(LocaleIface::NumSubcategory::kPercent));
207   EXPECT_EQ(L"$z,zzz,zzz,zzz,zzz,zz9.99",
208             locale->GetNumPattern(LocaleIface::NumSubcategory::kCurrency));
209   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zz9.zzz",
210             locale->GetNumPattern(LocaleIface::NumSubcategory::kDecimal));
211   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz",
212             locale->GetNumPattern(LocaleIface::NumSubcategory::kInteger));
213 }
214