Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(464)

Side by Side Diff: base/time/pr_time_unittest.cc

Issue 266193002: Extend PR_ParseTimeString() to accept some ISO 8601 formats to fix timezone parsing in SyslogParser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: New approach: Extend PR_ParseTimeString() to handle some ISO 8601 formats. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <time.h> 5 #include <time.h>
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/third_party/nspr/prtime.h" 8 #include "base/third_party/nspr/prtime.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 using base::Time; 12 using base::Time;
13 13
14 namespace { 14 namespace {
15 15
16 // time_t representation of 15th Oct 2007 12:45:00 PDT 16 // time_t representation of 15th Oct 2007 12:45:00 PDT
17 PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond; 17 PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond;
18 18
19 // 2013-07-08T11:28:12.440380+02:00
20 PRTime comparison_time_cest = 1373275692440380LL;
wtc 2014/05/08 21:04:19 Nit: use either NSPR's PR_INT64(137327569244038
Thiemo Nagel 2014/05/09 16:19:00 Done.
21
19 // Specialized test fixture allowing time strings without timezones to be 22 // Specialized test fixture allowing time strings without timezones to be
20 // tested by comparing them to a known time in the local zone. 23 // tested by comparing them to a known time in the local zone.
21 class PRTimeTest : public testing::Test { 24 class PRTimeTest : public testing::Test {
22 protected: 25 protected:
23 virtual void SetUp() OVERRIDE { 26 virtual void SetUp() OVERRIDE {
24 // Use mktime to get a time_t, and turn it into a PRTime by converting 27 // Use mktime to get a time_t, and turn it into a PRTime by converting
25 // seconds to microseconds. Use 15th Oct 2007 12:45:00 local. This 28 // seconds to microseconds. Use 15th Oct 2007 12:45:00 local. This
26 // must be a time guaranteed to be outside of a DST fallback hour in 29 // must be a time guaranteed to be outside of a DST fallback hour in
27 // any timezone. 30 // any timezone.
28 struct tm local_comparison_tm = { 31 struct tm local_comparison_tm = {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 PRStatus result = PR_ParseTimeString(time_buf, PR_FALSE, &parsed_time); 70 PRStatus result = PR_ParseTimeString(time_buf, PR_FALSE, &parsed_time);
68 EXPECT_EQ(PR_SUCCESS, result); 71 EXPECT_EQ(PR_SUCCESS, result);
69 EXPECT_EQ(current_time64, parsed_time); 72 EXPECT_EQ(current_time64, parsed_time);
70 } 73 }
71 74
72 TEST_F(PRTimeTest, ParseTimeTest2) { 75 TEST_F(PRTimeTest, ParseTimeTest2) {
73 PRTime parsed_time = 0; 76 PRTime parsed_time = 0;
74 PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT", 77 PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT",
75 PR_FALSE, &parsed_time); 78 PR_FALSE, &parsed_time);
76 EXPECT_EQ(PR_SUCCESS, result); 79 EXPECT_EQ(PR_SUCCESS, result);
77 EXPECT_EQ(parsed_time, comparison_time_pdt); 80 EXPECT_EQ(comparison_time_pdt, parsed_time);
78 } 81 }
79 82
80 TEST_F(PRTimeTest, ParseTimeTest3) { 83 TEST_F(PRTimeTest, ParseTimeTest3) {
81 PRTime parsed_time = 0; 84 PRTime parsed_time = 0;
82 PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE, 85 PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE,
83 &parsed_time); 86 &parsed_time);
84 EXPECT_EQ(PR_SUCCESS, result); 87 EXPECT_EQ(PR_SUCCESS, result);
85 EXPECT_EQ(parsed_time, comparison_time_local_); 88 EXPECT_EQ(comparison_time_local_, parsed_time);
86 } 89 }
87 90
88 TEST_F(PRTimeTest, ParseTimeTest4) { 91 TEST_F(PRTimeTest, ParseTimeTest4) {
89 PRTime parsed_time = 0; 92 PRTime parsed_time = 0;
90 PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE, 93 PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE,
91 &parsed_time); 94 &parsed_time);
92 EXPECT_EQ(PR_SUCCESS, result); 95 EXPECT_EQ(PR_SUCCESS, result);
93 EXPECT_EQ(parsed_time, comparison_time_pdt); 96 EXPECT_EQ(comparison_time_pdt, parsed_time);
94 } 97 }
95 98
96 TEST_F(PRTimeTest, ParseTimeTest5) { 99 TEST_F(PRTimeTest, ParseTimeTest5) {
97 PRTime parsed_time = 0; 100 PRTime parsed_time = 0;
98 PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007", 101 PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007",
99 PR_FALSE, &parsed_time); 102 PR_FALSE, &parsed_time);
100 EXPECT_EQ(PR_SUCCESS, result); 103 EXPECT_EQ(PR_SUCCESS, result);
101 EXPECT_EQ(parsed_time, comparison_time_pdt); 104 EXPECT_EQ(comparison_time_pdt, parsed_time);
102 } 105 }
103 106
104 TEST_F(PRTimeTest, ParseTimeTest6) { 107 TEST_F(PRTimeTest, ParseTimeTest6) {
105 PRTime parsed_time = 0; 108 PRTime parsed_time = 0;
106 PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM", 109 PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM",
107 PR_FALSE, &parsed_time); 110 PR_FALSE, &parsed_time);
108 EXPECT_EQ(PR_SUCCESS, result); 111 EXPECT_EQ(PR_SUCCESS, result);
109 EXPECT_EQ(parsed_time, comparison_time_local_); 112 EXPECT_EQ(comparison_time_local_, parsed_time);
110 } 113 }
111 114
112 TEST_F(PRTimeTest, ParseTimeTest7) { 115 TEST_F(PRTimeTest, ParseTimeTest7) {
113 PRTime parsed_time = 0; 116 PRTime parsed_time = 0;
114 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE, 117 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE,
115 &parsed_time); 118 &parsed_time);
116 EXPECT_EQ(PR_SUCCESS, result); 119 EXPECT_EQ(PR_SUCCESS, result);
117 EXPECT_EQ(parsed_time, comparison_time_local_); 120 EXPECT_EQ(comparison_time_local_, parsed_time);
118 } 121 }
119 122
120 TEST_F(PRTimeTest, ParseTimeTest8) { 123 TEST_F(PRTimeTest, ParseTimeTest8) {
121 PRTime parsed_time = 0; 124 PRTime parsed_time = 0;
122 PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE, 125 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00. PM", PR_FALSE,
123 &parsed_time); 126 &parsed_time);
124 EXPECT_EQ(PR_SUCCESS, result); 127 EXPECT_EQ(PR_SUCCESS, result);
125 EXPECT_EQ(parsed_time, comparison_time_local_); 128 EXPECT_EQ(comparison_time_local_, parsed_time);
126 } 129 }
127 130
128 TEST_F(PRTimeTest, ParseTimeTest9) { 131 TEST_F(PRTimeTest, ParseTimeTest9) {
129 PRTime parsed_time = 0; 132 PRTime parsed_time = 0;
133 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00.0 PM", PR_FALSE,
134 &parsed_time);
135 EXPECT_EQ(PR_SUCCESS, result);
136 EXPECT_EQ(comparison_time_local_, parsed_time);
137 }
138
139 TEST_F(PRTimeTest, ParseTimeTest10) {
140 PRTime parsed_time = 0;
141 PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE,
142 &parsed_time);
143 EXPECT_EQ(PR_SUCCESS, result);
144 EXPECT_EQ(comparison_time_local_, parsed_time);
145 }
146
147 TEST_F(PRTimeTest, ParseTimeTest11) {
148 PRTime parsed_time = 0;
130 PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)", 149 PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)",
131 PR_FALSE, &parsed_time); 150 PR_FALSE, &parsed_time);
132 EXPECT_EQ(PR_SUCCESS, result); 151 EXPECT_EQ(PR_SUCCESS, result);
133 EXPECT_EQ(parsed_time, comparison_time_pdt); 152 EXPECT_EQ(comparison_time_pdt, parsed_time);
153 }
154
155 TEST_F(PRTimeTest, ParseTimeTest12) {
156 PRTime parsed_time = 0;
157 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.440380+02:00",
158 PR_FALSE, &parsed_time);
159 EXPECT_EQ(PR_SUCCESS, result);
160 EXPECT_EQ(comparison_time_cest, parsed_time);
161 }
162
163 TEST_F(PRTimeTest, ParseTimeTest13) {
164 PRTime parsed_time = 0;
165 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4403795+02:00",
166 PR_FALSE, &parsed_time);
167 EXPECT_EQ(PR_SUCCESS, result);
168 EXPECT_EQ(comparison_time_cest, parsed_time);
169 }
170
171 TEST_F(PRTimeTest, ParseTimeTest14) {
172 PRTime parsed_time = 0;
173 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4403804+02:00",
174 PR_FALSE, &parsed_time);
175 EXPECT_EQ(PR_SUCCESS, result);
176 EXPECT_EQ(comparison_time_cest, parsed_time);
177 }
178
179 TEST_F(PRTimeTest, ParseTimeTest15) {
180 PRTime parsed_time = 0;
181 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4403804+02",
182 PR_FALSE, &parsed_time);
183 EXPECT_EQ(PR_SUCCESS, result);
184 EXPECT_EQ(comparison_time_cest, parsed_time);
185 }
186
187 TEST_F(PRTimeTest, ParseTimeTest16) {
188 PRTime parsed_time = 0;
189 PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.44038Z",
190 PR_FALSE, &parsed_time);
191 EXPECT_EQ(PR_SUCCESS, result);
192 EXPECT_EQ(comparison_time_cest, parsed_time);
193 }
194
195 TEST_F(PRTimeTest, ParseTimeTest17) {
196 PRTime parsed_time = 0;
197 PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.440380Z",
198 PR_FALSE, &parsed_time);
199 EXPECT_EQ(PR_SUCCESS, result);
200 EXPECT_EQ(comparison_time_cest, parsed_time);
201 }
202
203 TEST_F(PRTimeTest, ParseTimeTestInvalid1) {
204 PRTime parsed_time = 0;
205 PRStatus result = PR_ParseTimeString("201-07-08T09:28:12.440380Z",
206 PR_FALSE, &parsed_time);
207 EXPECT_EQ(PR_FAILURE, result);
208 EXPECT_EQ(0, parsed_time);
209 }
210
211 TEST_F(PRTimeTest, ParseTimeTestInvalid2) {
212 PRTime parsed_time = 0;
213 PRStatus result = PR_ParseTimeString("2013-007-08T09:28:12.440380Z",
214 PR_FALSE, &parsed_time);
215 EXPECT_EQ(PR_FAILURE, result);
216 EXPECT_EQ(0, parsed_time);
217 }
218
219 TEST_F(PRTimeTest, ParseTimeTestInvalid3) {
220 PRTime parsed_time = 0;
221 PRStatus result = PR_ParseTimeString("2013-07-008T09:28:12.440380Z",
222 PR_FALSE, &parsed_time);
223 EXPECT_EQ(PR_FAILURE, result);
224 EXPECT_EQ(0, parsed_time);
134 } 225 }
135 226
136 // This test should not crash when compiled with Visual C++ 2005 (see 227 // This test should not crash when compiled with Visual C++ 2005 (see
137 // http://crbug.com/4387). 228 // http://crbug.com/4387).
138 TEST_F(PRTimeTest, ParseTimeTestOutOfRange) { 229 TEST_F(PRTimeTest, ParseTimeTestOutOfRange) {
139 PRTime parsed_time = 0; 230 PRTime parsed_time = 0;
140 // Note the lack of timezone in the time string. The year has to be 3001. 231 // Note the lack of timezone in the time string. The year has to be 3001.
141 // The date has to be after 23:59:59, December 31, 3000, US Pacific Time, so 232 // The date has to be after 23:59:59, December 31, 3000, US Pacific Time, so
142 // we use January 2, 3001 to make sure it's after the magic maximum in any 233 // we use January 2, 3001 to make sure it's after the magic maximum in any
143 // timezone. 234 // timezone.
(...skipping 12 matching lines...) Expand all
156 247
157 TEST_F(PRTimeTest, ParseTimeTestNotNormalized2) { 248 TEST_F(PRTimeTest, ParseTimeTestNotNormalized2) {
158 PRTime parsed_time = 0; 249 PRTime parsed_time = 0;
159 PRStatus result = PR_ParseTimeString("Sun Oct 14 36:45 PDT 2007", 250 PRStatus result = PR_ParseTimeString("Sun Oct 14 36:45 PDT 2007",
160 PR_FALSE, &parsed_time); 251 PR_FALSE, &parsed_time);
161 EXPECT_EQ(PR_SUCCESS, result); 252 EXPECT_EQ(PR_SUCCESS, result);
162 EXPECT_EQ(comparison_time_pdt, parsed_time); 253 EXPECT_EQ(comparison_time_pdt, parsed_time);
163 } 254 }
164 255
165 } // namespace 256 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698