Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/intl/locale/tests/gtest/TestDateTimeFormat.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "gtest/gtest.h"
2
#include "DateTimeFormat.h"
3
4
namespace mozilla {
5
6
// Normalise time.
7
static nsAutoCString nt(nsAutoCString aDatetime)
8
0
{
9
0
  nsAutoCString datetime = aDatetime;
10
0
11
0
  // Replace "January 01" with "January 1" (found on Windows).
12
0
  int32_t ind = datetime.Find("January 01");
13
0
  if (ind != kNotFound)
14
0
    datetime.ReplaceLiteral(ind, 10, "January 1");
15
0
16
0
  // Strip trailing " GMT" (found on Mac/Linux).
17
0
  ind = datetime.Find(" GMT");
18
0
  if (ind != kNotFound)
19
0
    datetime.Truncate(ind);
20
0
21
0
  // Strip leading "Thursday, " or "Wednesday, " (found on Windows).
22
0
  ind = datetime.Find("Thursday, ");
23
0
  if (ind == 0)
24
0
    datetime.ReplaceLiteral(0, 10, "");
25
0
26
0
  ind = datetime.Find("Wednesday, ");
27
0
  if (ind == 0)
28
0
    datetime.ReplaceLiteral(0, 11, "");
29
0
30
0
  return datetime;
31
0
}
32
33
0
TEST(DateTimeFormat, FormatPRExplodedTime) {
34
0
  PRTime prTime = 0;
35
0
  PRExplodedTime prExplodedTime;
36
0
  PR_ExplodeTime(prTime, PR_GMTParameters, &prExplodedTime);
37
0
38
0
  mozilla::DateTimeFormat::mLocale = new nsCString("en-US");
39
0
40
0
  nsAutoString formattedTime;
41
0
  nsresult rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
42
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
43
0
  ASSERT_STREQ("January 1, 1970, 12:00:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
44
0
45
0
  prExplodedTime = { 0, 0, 19, 0, 1, 0, 1970, 4, 0, { (19 * 60), 0 } };
46
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
47
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
48
0
  ASSERT_STREQ("January 1, 1970, 12:19:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
49
0
50
0
  prExplodedTime = { 0, 0, 0, 7, 1, 0, 1970, 4, 0, { (6 * 60 * 60), (1 * 60 * 60) } };
51
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
52
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
53
0
  ASSERT_STREQ("January 1, 1970, 7:00:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
54
0
55
0
  prExplodedTime = { 0, 0, 29, 11, 1, 0, 1970, 4, 0, { (10 * 60 * 60) + (29 * 60), (1 * 60 * 60) } };
56
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
57
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
58
0
  ASSERT_STREQ("January 1, 1970, 11:29:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
59
0
60
0
  prExplodedTime = { 0, 0, 37, 23, 31, 11, 1969, 3, 364, { -(23 * 60), 0 } };
61
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
62
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
63
0
  ASSERT_STREQ("December 31, 1969, 11:37:00 PM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
64
0
65
0
  prExplodedTime = { 0, 0, 0, 17, 31, 11, 1969, 3, 364, { -(7 * 60 * 60), 0 } };
66
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
67
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
68
0
  ASSERT_STREQ("December 31, 1969, 5:00:00 PM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
69
0
70
0
  prExplodedTime = { 0, 0, 47, 14, 31, 11, 1969, 3, 364, { -((10 * 60 * 60) + (13 * 60)), (1 * 60 * 60) } };
71
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
72
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
73
0
  ASSERT_STREQ("December 31, 1969, 2:47:00 PM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
74
0
}
75
76
0
TEST(DateTimeFormat, DateFormatSelectors) {
77
0
  PRTime prTime = 0;
78
0
  PRExplodedTime prExplodedTime;
79
0
  PR_ExplodeTime(prTime, PR_GMTParameters, &prExplodedTime);
80
0
81
0
  mozilla::DateTimeFormat::mLocale = new nsCString("en-US");
82
0
83
0
  nsAutoString formattedTime;
84
0
  nsresult rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatNone, &prExplodedTime, formattedTime);
85
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
86
0
  ASSERT_STREQ("01/1970", NS_ConvertUTF16toUTF8(formattedTime).get());
87
0
88
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonthLong, kTimeFormatNone, &prExplodedTime, formattedTime);
89
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
90
0
  ASSERT_STREQ("January 1970", NS_ConvertUTF16toUTF8(formattedTime).get());
91
0
92
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatMonthLong, kTimeFormatNone, &prExplodedTime, formattedTime);
93
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
94
0
  ASSERT_STREQ("January", NS_ConvertUTF16toUTF8(formattedTime).get());
95
0
96
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatNoSeconds, &prExplodedTime, formattedTime);
97
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
98
0
  ASSERT_STREQ("01/1970, 12:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
99
0
100
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatSeconds, &prExplodedTime, formattedTime);
101
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
102
0
  ASSERT_STREQ("01/1970, 12:00:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
103
0
104
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatNone, &prExplodedTime, formattedTime);
105
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
106
0
  ASSERT_STREQ("Thu", NS_ConvertUTF16toUTF8(formattedTime).get());
107
0
108
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatNoSeconds, &prExplodedTime, formattedTime);
109
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
110
0
  ASSERT_STREQ("Thu, 12:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
111
0
112
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatSeconds, &prExplodedTime, formattedTime);
113
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
114
0
  ASSERT_STREQ("Thu, 12:00:00 AM", nt(NS_ConvertUTF16toUTF8(formattedTime)).get());
115
0
}
116
117
// Normalise time.
118
static nsAutoCString ntd(nsAutoCString aDatetime)
119
0
{
120
0
  nsAutoCString datetime = aDatetime;
121
0
122
0
  // Strip trailing " GMT" (found on Mac/Linux).
123
0
  int32_t ind = datetime.Find(" GMT");
124
0
  if (ind != kNotFound)
125
0
    datetime.Truncate(ind);
126
0
127
0
  // Strip leading "Donnerstag, " or "Mittwoch, " (found on Windows).
128
0
  ind = datetime.Find("Donnerstag, ");
129
0
  if (ind == 0)
130
0
    datetime.Replace(0, 12, "");
131
0
  ind = datetime.Find("Mittwoch, ");
132
0
  if (ind == 0)
133
0
    datetime.Replace(0, 10, "");
134
0
135
0
  return datetime;
136
0
}
137
138
0
TEST(DateTimeFormat, FormatPRExplodedTimeForeign) {
139
0
  PRTime prTime = 0;
140
0
  PRExplodedTime prExplodedTime;
141
0
  PR_ExplodeTime(prTime, PR_GMTParameters, &prExplodedTime);
142
0
143
0
  mozilla::DateTimeFormat::mLocale = new nsCString("de-DE");
144
0
145
0
  nsAutoString formattedTime;
146
0
  nsresult rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
147
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
148
0
  ASSERT_STREQ("1. Januar 1970, 00:00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
149
0
150
0
  prExplodedTime = { 0, 0, 19, 0, 1, 0, 1970, 4, 0, { (19 * 60), 0 } };
151
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
152
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
153
0
  ASSERT_STREQ("1. Januar 1970, 00:19:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
154
0
155
0
  prExplodedTime = { 0, 0, 0, 7, 1, 0, 1970, 4, 0, { (6 * 60 * 60), (1 * 60 * 60) } };
156
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
157
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
158
0
  ASSERT_STREQ("1. Januar 1970, 07:00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
159
0
160
0
  prExplodedTime = { 0, 0, 29, 11, 1, 0, 1970, 4, 0, { (10 * 60 * 60) + (29 * 60), (1 * 60 * 60) } };
161
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
162
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
163
0
  ASSERT_STREQ("1. Januar 1970, 11:29:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
164
0
165
0
  prExplodedTime = { 0, 0, 37, 23, 31, 11, 1969, 3, 364, { -(23 * 60), 0 } };
166
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
167
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
168
0
  ASSERT_STREQ("31. Dezember 1969, 23:37:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
169
0
170
0
  prExplodedTime = { 0, 0, 0, 17, 31, 11, 1969, 3, 364, { -(7 * 60 * 60), 0 } };
171
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
172
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
173
0
  ASSERT_STREQ("31. Dezember 1969, 17:00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
174
0
175
0
  prExplodedTime = { 0, 0, 47, 14, 31, 11, 1969, 3, 364, { -((10 * 60 * 60) + (13 * 60)), (1 * 60 * 60) } };
176
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatLong, kTimeFormatSeconds, &prExplodedTime, formattedTime);
177
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
178
0
  ASSERT_STREQ("31. Dezember 1969, 14:47:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
179
0
}
180
181
0
TEST(DateTimeFormat, DateFormatSelectorsForeign) {
182
0
  PRTime prTime = 0;
183
0
  PRExplodedTime prExplodedTime;
184
0
  PR_ExplodeTime(prTime, PR_GMTParameters, &prExplodedTime);
185
0
186
0
  mozilla::DateTimeFormat::mLocale = new nsCString("de-DE");
187
0
188
0
  nsAutoString formattedTime;
189
0
  nsresult rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatNone, &prExplodedTime, formattedTime);
190
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
191
0
  ASSERT_STREQ("01.1970", NS_ConvertUTF16toUTF8(formattedTime).get());
192
0
193
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonthLong, kTimeFormatNone, &prExplodedTime, formattedTime);
194
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
195
0
  ASSERT_STREQ("Januar 1970", NS_ConvertUTF16toUTF8(formattedTime).get());
196
0
197
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatMonthLong, kTimeFormatNone, &prExplodedTime, formattedTime);
198
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
199
0
  ASSERT_STREQ("Januar", NS_ConvertUTF16toUTF8(formattedTime).get());
200
0
201
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatNoSeconds, &prExplodedTime, formattedTime);
202
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
203
0
  ASSERT_STREQ("01.1970, 00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
204
0
205
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatYearMonth, kTimeFormatSeconds, &prExplodedTime, formattedTime);
206
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
207
0
  ASSERT_STREQ("01.1970, 00:00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
208
0
209
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatNone, &prExplodedTime, formattedTime);
210
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
211
0
  ASSERT_STREQ("Do", NS_ConvertUTF16toUTF8(formattedTime).get());
212
0
213
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatNoSeconds, &prExplodedTime, formattedTime);
214
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
215
0
  ASSERT_STREQ("Do, 00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
216
0
217
0
  rv = mozilla::DateTimeFormat::FormatPRExplodedTime(kDateFormatWeekday, kTimeFormatSeconds, &prExplodedTime, formattedTime);
218
0
  ASSERT_TRUE(NS_SUCCEEDED(rv));
219
0
  ASSERT_STREQ("Do, 00:00:00", ntd(NS_ConvertUTF16toUTF8(formattedTime)).get());
220
0
}
221
222
}