• 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(
92       heap, pdfium::as_writable_bytes(pdfium::make_span(
93                 const_cast<char*>(kXMLData), strlen(kXMLData))));
94 }
95 
96 }  // namespace
97 
98 class CXFA_XMLLocaleTest : public FXGCUnitTest {};
99 
TEST_F(CXFA_XMLLocaleTest,Create)100 TEST_F(CXFA_XMLLocaleTest, Create) {
101   auto* locale = CreateLocaleHelper(heap());
102   EXPECT_TRUE(locale != nullptr);
103 }
104 
TEST_F(CXFA_XMLLocaleTest,CreateBadXML)105 TEST_F(CXFA_XMLLocaleTest, CreateBadXML) {
106   auto* locale = CXFA_XMLLocale::Create(heap(), pdfium::span<uint8_t>());
107   EXPECT_TRUE(locale == nullptr);
108 }
109 
TEST_F(CXFA_XMLLocaleTest,GetName)110 TEST_F(CXFA_XMLLocaleTest, GetName) {
111   auto* locale = CreateLocaleHelper(heap());
112   ASSERT_TRUE(locale != nullptr);
113 
114   EXPECT_EQ(L"en_US", locale->GetName());
115 }
116 
TEST_F(CXFA_XMLLocaleTest,GetNumericSymbols)117 TEST_F(CXFA_XMLLocaleTest, GetNumericSymbols) {
118   auto* locale = CreateLocaleHelper(heap());
119   ASSERT_TRUE(locale != nullptr);
120 
121   EXPECT_EQ(L".", locale->GetDecimalSymbol());
122   EXPECT_EQ(L",", locale->GetGroupingSymbol());
123   EXPECT_EQ(L"%", locale->GetPercentSymbol());
124   EXPECT_EQ(L"-", locale->GetMinusSymbol());
125   EXPECT_EQ(L"$", locale->GetCurrencySymbol());
126 }
127 
TEST_F(CXFA_XMLLocaleTest,GetDateTimeSymbols)128 TEST_F(CXFA_XMLLocaleTest, GetDateTimeSymbols) {
129   auto* locale = CreateLocaleHelper(heap());
130   ASSERT_TRUE(locale != nullptr);
131 
132   EXPECT_EQ(L"GyMdkHmsSEDFwWahKzZ", locale->GetDateTimeSymbols());
133 }
134 
TEST_F(CXFA_XMLLocaleTest,GetMonthName)135 TEST_F(CXFA_XMLLocaleTest, GetMonthName) {
136   auto* locale = CreateLocaleHelper(heap());
137   ASSERT_TRUE(locale != nullptr);
138 
139   EXPECT_EQ(L"", locale->GetMonthName(24, false));
140   EXPECT_EQ(L"", locale->GetMonthName(-5, false));
141   EXPECT_EQ(L"Feb", locale->GetMonthName(1, true));
142   EXPECT_EQ(L"February", locale->GetMonthName(1, false));
143 }
144 
TEST_F(CXFA_XMLLocaleTest,GetDayName)145 TEST_F(CXFA_XMLLocaleTest, GetDayName) {
146   auto* locale = CreateLocaleHelper(heap());
147   ASSERT_TRUE(locale != nullptr);
148 
149   EXPECT_EQ(L"", locale->GetDayName(24, false));
150   EXPECT_EQ(L"", locale->GetDayName(-5, false));
151   EXPECT_EQ(L"Mon", locale->GetDayName(1, true));
152   EXPECT_EQ(L"Monday", locale->GetDayName(1, false));
153 }
154 
TEST_F(CXFA_XMLLocaleTest,GetMeridiemName)155 TEST_F(CXFA_XMLLocaleTest, GetMeridiemName) {
156   auto* locale = CreateLocaleHelper(heap());
157   ASSERT_TRUE(locale != nullptr);
158 
159   EXPECT_EQ(L"AM", locale->GetMeridiemName(true));
160   EXPECT_EQ(L"PM", locale->GetMeridiemName(false));
161 }
162 
TEST_F(CXFA_XMLLocaleTest,GetEraName)163 TEST_F(CXFA_XMLLocaleTest, GetEraName) {
164   auto* locale = CreateLocaleHelper(heap());
165   ASSERT_TRUE(locale != nullptr);
166 
167   EXPECT_EQ(L"AD", locale->GetEraName(true));
168   EXPECT_EQ(L"BC", locale->GetEraName(false));
169 }
170 
TEST_F(CXFA_XMLLocaleTest,GetDatePattern)171 TEST_F(CXFA_XMLLocaleTest, GetDatePattern) {
172   auto* locale = CreateLocaleHelper(heap());
173   ASSERT_TRUE(locale != nullptr);
174 
175   EXPECT_EQ(L"M/D/YY",
176             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kShort));
177   EXPECT_EQ(L"MMM D, YYYY",
178             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kDefault));
179   EXPECT_EQ(L"MMM D, YYYY",
180             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kMedium));
181   EXPECT_EQ(L"EEEE, MMMM D, YYYY",
182             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kFull));
183   EXPECT_EQ(L"MMMM D, YYYY",
184             locale->GetDatePattern(LocaleIface::DateTimeSubcategory::kLong));
185 }
186 
TEST_F(CXFA_XMLLocaleTest,GetTimePattern)187 TEST_F(CXFA_XMLLocaleTest, GetTimePattern) {
188   auto* locale = CreateLocaleHelper(heap());
189   ASSERT_TRUE(locale != nullptr);
190 
191   EXPECT_EQ(L"h:MM A",
192             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kShort));
193   EXPECT_EQ(L"h:MM:SS A",
194             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kDefault));
195   EXPECT_EQ(L"h:MM:SS A",
196             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kMedium));
197   EXPECT_EQ(L"h:MM:SS A Z",
198             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kFull));
199   EXPECT_EQ(L"h:MM:SS A Z",
200             locale->GetTimePattern(LocaleIface::DateTimeSubcategory::kLong));
201 }
202 
TEST_F(CXFA_XMLLocaleTest,GetNumPattern)203 TEST_F(CXFA_XMLLocaleTest, GetNumPattern) {
204   auto* locale = CreateLocaleHelper(heap());
205   ASSERT_TRUE(locale != nullptr);
206 
207   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz%",
208             locale->GetNumPattern(LocaleIface::NumSubcategory::kPercent));
209   EXPECT_EQ(L"$z,zzz,zzz,zzz,zzz,zz9.99",
210             locale->GetNumPattern(LocaleIface::NumSubcategory::kCurrency));
211   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zz9.zzz",
212             locale->GetNumPattern(LocaleIface::NumSubcategory::kDecimal));
213   EXPECT_EQ(L"z,zzz,zzz,zzz,zzz,zzz",
214             locale->GetNumPattern(LocaleIface::NumSubcategory::kInteger));
215 }
216