1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
6*6777b538SAndroid Build Coastguard Worker #include <time.h>
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/third_party/nspr/prtime.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
11*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
12*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker using base::Time;
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker namespace {
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker // time_t representation of 15th Oct 2007 12:45:00 PDT
19*6777b538SAndroid Build Coastguard Worker PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond;
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker // Time with positive tz offset and fractional seconds:
22*6777b538SAndroid Build Coastguard Worker // 2013-07-08T11:28:12.441381+02:00
23*6777b538SAndroid Build Coastguard Worker PRTime comparison_time_2 = INT64_C(1373275692441381); // represented as GMT
24*6777b538SAndroid Build Coastguard Worker
25*6777b538SAndroid Build Coastguard Worker // Specialized test fixture allowing time strings without timezones to be
26*6777b538SAndroid Build Coastguard Worker // tested by comparing them to a known time in the local zone.
27*6777b538SAndroid Build Coastguard Worker class PRTimeTest : public testing::Test {
28*6777b538SAndroid Build Coastguard Worker protected:
SetUp()29*6777b538SAndroid Build Coastguard Worker void SetUp() override {
30*6777b538SAndroid Build Coastguard Worker // Use mktime to get a time_t, and turn it into a PRTime by converting
31*6777b538SAndroid Build Coastguard Worker // seconds to microseconds. Use 15th Oct 2007 12:45:00 local. This
32*6777b538SAndroid Build Coastguard Worker // must be a time guaranteed to be outside of a DST fallback hour in
33*6777b538SAndroid Build Coastguard Worker // any timezone.
34*6777b538SAndroid Build Coastguard Worker struct tm local_comparison_tm = {
35*6777b538SAndroid Build Coastguard Worker 0, // second
36*6777b538SAndroid Build Coastguard Worker 45, // minute
37*6777b538SAndroid Build Coastguard Worker 12, // hour
38*6777b538SAndroid Build Coastguard Worker 15, // day of month
39*6777b538SAndroid Build Coastguard Worker 10 - 1, // month
40*6777b538SAndroid Build Coastguard Worker 2007 - 1900, // year
41*6777b538SAndroid Build Coastguard Worker 0, // day of week (ignored, output only)
42*6777b538SAndroid Build Coastguard Worker 0, // day of year (ignored, output only)
43*6777b538SAndroid Build Coastguard Worker -1 // DST in effect, -1 tells mktime to figure it out
44*6777b538SAndroid Build Coastguard Worker };
45*6777b538SAndroid Build Coastguard Worker comparison_time_local_ =
46*6777b538SAndroid Build Coastguard Worker mktime(&local_comparison_tm) * Time::kMicrosecondsPerSecond;
47*6777b538SAndroid Build Coastguard Worker ASSERT_GT(comparison_time_local_, 0);
48*6777b538SAndroid Build Coastguard Worker
49*6777b538SAndroid Build Coastguard Worker const int microseconds = 441381;
50*6777b538SAndroid Build Coastguard Worker struct tm local_comparison_tm_2 = {
51*6777b538SAndroid Build Coastguard Worker 12, // second
52*6777b538SAndroid Build Coastguard Worker 28, // minute
53*6777b538SAndroid Build Coastguard Worker 11, // hour
54*6777b538SAndroid Build Coastguard Worker 8, // day of month
55*6777b538SAndroid Build Coastguard Worker 7 - 1, // month
56*6777b538SAndroid Build Coastguard Worker 2013 - 1900, // year
57*6777b538SAndroid Build Coastguard Worker 0, // day of week (ignored, output only)
58*6777b538SAndroid Build Coastguard Worker 0, // day of year (ignored, output only)
59*6777b538SAndroid Build Coastguard Worker -1 // DST in effect, -1 tells mktime to figure it out
60*6777b538SAndroid Build Coastguard Worker };
61*6777b538SAndroid Build Coastguard Worker comparison_time_local_2_ =
62*6777b538SAndroid Build Coastguard Worker mktime(&local_comparison_tm_2) * Time::kMicrosecondsPerSecond;
63*6777b538SAndroid Build Coastguard Worker ASSERT_GT(comparison_time_local_2_, 0);
64*6777b538SAndroid Build Coastguard Worker comparison_time_local_2_ += microseconds;
65*6777b538SAndroid Build Coastguard Worker }
66*6777b538SAndroid Build Coastguard Worker
67*6777b538SAndroid Build Coastguard Worker PRTime comparison_time_local_;
68*6777b538SAndroid Build Coastguard Worker PRTime comparison_time_local_2_;
69*6777b538SAndroid Build Coastguard Worker };
70*6777b538SAndroid Build Coastguard Worker
71*6777b538SAndroid Build Coastguard Worker // Tests the PR_ParseTimeString nspr helper function for
72*6777b538SAndroid Build Coastguard Worker // a variety of time strings.
TEST_F(PRTimeTest,ParseTimeTest1)73*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest1) {
74*6777b538SAndroid Build Coastguard Worker time_t current_time = 0;
75*6777b538SAndroid Build Coastguard Worker time(¤t_time);
76*6777b538SAndroid Build Coastguard Worker
77*6777b538SAndroid Build Coastguard Worker struct tm local_time = {};
78*6777b538SAndroid Build Coastguard Worker char time_buf[64] = {};
79*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
80*6777b538SAndroid Build Coastguard Worker localtime_s(&local_time, ¤t_time);
81*6777b538SAndroid Build Coastguard Worker asctime_s(time_buf, std::size(time_buf), &local_time);
82*6777b538SAndroid Build Coastguard Worker #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)
83*6777b538SAndroid Build Coastguard Worker localtime_r(¤t_time, &local_time);
84*6777b538SAndroid Build Coastguard Worker asctime_r(&local_time, time_buf);
85*6777b538SAndroid Build Coastguard Worker #endif
86*6777b538SAndroid Build Coastguard Worker
87*6777b538SAndroid Build Coastguard Worker PRTime current_time64 = static_cast<PRTime>(current_time) * PR_USEC_PER_SEC;
88*6777b538SAndroid Build Coastguard Worker
89*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
90*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString(time_buf, PR_FALSE, &parsed_time);
91*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
92*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(current_time64, parsed_time);
93*6777b538SAndroid Build Coastguard Worker }
94*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest2)95*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest2) {
96*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
97*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT",
98*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
99*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
100*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
101*6777b538SAndroid Build Coastguard Worker }
102*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest3)103*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest3) {
104*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
105*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE,
106*6777b538SAndroid Build Coastguard Worker &parsed_time);
107*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
108*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
109*6777b538SAndroid Build Coastguard Worker }
110*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest4)111*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest4) {
112*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
113*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE,
114*6777b538SAndroid Build Coastguard Worker &parsed_time);
115*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
116*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
117*6777b538SAndroid Build Coastguard Worker }
118*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest5)119*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest5) {
120*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
121*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007",
122*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
123*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
124*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
125*6777b538SAndroid Build Coastguard Worker }
126*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest6)127*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest6) {
128*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
129*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM",
130*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
131*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
132*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
133*6777b538SAndroid Build Coastguard Worker }
134*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest7)135*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest7) {
136*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
137*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE,
138*6777b538SAndroid Build Coastguard Worker &parsed_time);
139*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
140*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
141*6777b538SAndroid Build Coastguard Worker }
142*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest8)143*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest8) {
144*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
145*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("10/15/07 12:45:00. PM", PR_FALSE,
146*6777b538SAndroid Build Coastguard Worker &parsed_time);
147*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
148*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
149*6777b538SAndroid Build Coastguard Worker }
150*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest9)151*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest9) {
152*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
153*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("10/15/07 12:45:00.0 PM", PR_FALSE,
154*6777b538SAndroid Build Coastguard Worker &parsed_time);
155*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
156*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
157*6777b538SAndroid Build Coastguard Worker }
158*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest10)159*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest10) {
160*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
161*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE,
162*6777b538SAndroid Build Coastguard Worker &parsed_time);
163*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
164*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_, parsed_time);
165*6777b538SAndroid Build Coastguard Worker }
166*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTest11)167*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest11) {
168*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
169*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)",
170*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
171*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
172*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
173*6777b538SAndroid Build Coastguard Worker }
174*6777b538SAndroid Build Coastguard Worker
175*6777b538SAndroid Build Coastguard Worker // hh:mm timezone offset.
TEST_F(PRTimeTest,ParseTimeTest12)176*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest12) {
177*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
178*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381+02:00",
179*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
180*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
181*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2, parsed_time);
182*6777b538SAndroid Build Coastguard Worker }
183*6777b538SAndroid Build Coastguard Worker
184*6777b538SAndroid Build Coastguard Worker // hhmm timezone offset.
TEST_F(PRTimeTest,ParseTimeTest13)185*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest13) {
186*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
187*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381+0200",
188*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
189*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
190*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2, parsed_time);
191*6777b538SAndroid Build Coastguard Worker }
192*6777b538SAndroid Build Coastguard Worker
193*6777b538SAndroid Build Coastguard Worker // hh timezone offset.
TEST_F(PRTimeTest,ParseTimeTest14)194*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest14) {
195*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
196*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4413819+02",
197*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
198*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
199*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2, parsed_time);
200*6777b538SAndroid Build Coastguard Worker }
201*6777b538SAndroid Build Coastguard Worker
202*6777b538SAndroid Build Coastguard Worker // 5 digits fractional second.
TEST_F(PRTimeTest,ParseTimeTest15)203*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest15) {
204*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
205*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.44138Z",
206*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
207*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
208*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2-1, parsed_time);
209*6777b538SAndroid Build Coastguard Worker }
210*6777b538SAndroid Build Coastguard Worker
211*6777b538SAndroid Build Coastguard Worker // Fractional seconds, local timezone.
TEST_F(PRTimeTest,ParseTimeTest16)212*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest16) {
213*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
214*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381",
215*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
216*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
217*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_local_2_, parsed_time);
218*6777b538SAndroid Build Coastguard Worker }
219*6777b538SAndroid Build Coastguard Worker
220*6777b538SAndroid Build Coastguard Worker // "Z" (=GMT) timezone.
TEST_F(PRTimeTest,ParseTimeTest17)221*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest17) {
222*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
223*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.441381Z",
224*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
225*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
226*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2, parsed_time);
227*6777b538SAndroid Build Coastguard Worker }
228*6777b538SAndroid Build Coastguard Worker
229*6777b538SAndroid Build Coastguard Worker // "T" delimiter replaced by space.
TEST_F(PRTimeTest,ParseTimeTest18)230*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTest18) {
231*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
232*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-08 09:28:12.441381Z",
233*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
234*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
235*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_2, parsed_time);
236*6777b538SAndroid Build Coastguard Worker }
237*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTestInvalid1)238*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestInvalid1) {
239*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
240*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("201-07-08T09:28:12.441381Z",
241*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
242*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_FAILURE, result);
243*6777b538SAndroid Build Coastguard Worker }
244*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTestInvalid2)245*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestInvalid2) {
246*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
247*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-007-08T09:28:12.441381Z",
248*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
249*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_FAILURE, result);
250*6777b538SAndroid Build Coastguard Worker }
251*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTestInvalid3)252*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestInvalid3) {
253*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
254*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("2013-07-008T09:28:12.441381Z",
255*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
256*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_FAILURE, result);
257*6777b538SAndroid Build Coastguard Worker }
258*6777b538SAndroid Build Coastguard Worker
259*6777b538SAndroid Build Coastguard Worker // This test should not crash when compiled with Visual C++ 2005 (see
260*6777b538SAndroid Build Coastguard Worker // http://crbug.com/4387).
TEST_F(PRTimeTest,ParseTimeTestOutOfRange)261*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestOutOfRange) {
262*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
263*6777b538SAndroid Build Coastguard Worker // Note the lack of timezone in the time string. The year has to be 3001.
264*6777b538SAndroid Build Coastguard Worker // The date has to be after 23:59:59, December 31, 3000, US Pacific Time, so
265*6777b538SAndroid Build Coastguard Worker // we use January 2, 3001 to make sure it's after the magic maximum in any
266*6777b538SAndroid Build Coastguard Worker // timezone.
267*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Sun Jan 2 00:00:00 3001",
268*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
269*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
270*6777b538SAndroid Build Coastguard Worker }
271*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTestNotNormalized1)272*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestNotNormalized1) {
273*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
274*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Mon Oct 15 12:44:60 PDT 2007",
275*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
276*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
277*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
278*6777b538SAndroid Build Coastguard Worker }
279*6777b538SAndroid Build Coastguard Worker
TEST_F(PRTimeTest,ParseTimeTestNotNormalized2)280*6777b538SAndroid Build Coastguard Worker TEST_F(PRTimeTest, ParseTimeTestNotNormalized2) {
281*6777b538SAndroid Build Coastguard Worker PRTime parsed_time = 0;
282*6777b538SAndroid Build Coastguard Worker PRStatus result = PR_ParseTimeString("Sun Oct 14 36:45 PDT 2007",
283*6777b538SAndroid Build Coastguard Worker PR_FALSE, &parsed_time);
284*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(PR_SUCCESS, result);
285*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(comparison_time_pdt, parsed_time);
286*6777b538SAndroid Build Coastguard Worker }
287*6777b538SAndroid Build Coastguard Worker
288*6777b538SAndroid Build Coastguard Worker } // namespace
289