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