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

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: Address wtc's comments. 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 <stdint.h>
5 #include <time.h> 6 #include <time.h>
6 7
7 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
8 #include "base/third_party/nspr/prtime.h" 9 #include "base/third_party/nspr/prtime.h"
9 #include "base/time/time.h" 10 #include "base/time/time.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 12
12 using base::Time; 13 using base::Time;
13 14
14 namespace { 15 namespace {
15 16
16 // time_t representation of 15th Oct 2007 12:45:00 PDT 17 // time_t representation of 15th Oct 2007 12:45:00 PDT
17 PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond; 18 PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond;
18 19
20 // 2013-07-08T11:28:12.440380+02:00
21 PRTime comparison_time_cest = INT64_C(1373275692440380);
22
19 // Specialized test fixture allowing time strings without timezones to be 23 // Specialized test fixture allowing time strings without timezones to be
20 // tested by comparing them to a known time in the local zone. 24 // tested by comparing them to a known time in the local zone.
21 class PRTimeTest : public testing::Test { 25 class PRTimeTest : public testing::Test {
22 protected: 26 protected:
23 virtual void SetUp() OVERRIDE { 27 virtual void SetUp() OVERRIDE {
24 // Use mktime to get a time_t, and turn it into a PRTime by converting 28 // 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 29 // 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 30 // must be a time guaranteed to be outside of a DST fallback hour in
27 // any timezone. 31 // any timezone.
28 struct tm local_comparison_tm = { 32 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); 71 PRStatus result = PR_ParseTimeString(time_buf, PR_FALSE, &parsed_time);
68 EXPECT_EQ(PR_SUCCESS, result); 72 EXPECT_EQ(PR_SUCCESS, result);
69 EXPECT_EQ(current_time64, parsed_time); 73 EXPECT_EQ(current_time64, parsed_time);
70 } 74 }
71 75
72 TEST_F(PRTimeTest, ParseTimeTest2) { 76 TEST_F(PRTimeTest, ParseTimeTest2) {
73 PRTime parsed_time = 0; 77 PRTime parsed_time = 0;
74 PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT", 78 PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT",
75 PR_FALSE, &parsed_time); 79 PR_FALSE, &parsed_time);
76 EXPECT_EQ(PR_SUCCESS, result); 80 EXPECT_EQ(PR_SUCCESS, result);
77 EXPECT_EQ(parsed_time, comparison_time_pdt); 81 EXPECT_EQ(comparison_time_pdt, parsed_time);
78 } 82 }
79 83
80 TEST_F(PRTimeTest, ParseTimeTest3) { 84 TEST_F(PRTimeTest, ParseTimeTest3) {
81 PRTime parsed_time = 0; 85 PRTime parsed_time = 0;
82 PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE, 86 PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE,
83 &parsed_time); 87 &parsed_time);
84 EXPECT_EQ(PR_SUCCESS, result); 88 EXPECT_EQ(PR_SUCCESS, result);
85 EXPECT_EQ(parsed_time, comparison_time_local_); 89 EXPECT_EQ(comparison_time_local_, parsed_time);
86 } 90 }
87 91
88 TEST_F(PRTimeTest, ParseTimeTest4) { 92 TEST_F(PRTimeTest, ParseTimeTest4) {
89 PRTime parsed_time = 0; 93 PRTime parsed_time = 0;
90 PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE, 94 PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE,
91 &parsed_time); 95 &parsed_time);
92 EXPECT_EQ(PR_SUCCESS, result); 96 EXPECT_EQ(PR_SUCCESS, result);
93 EXPECT_EQ(parsed_time, comparison_time_pdt); 97 EXPECT_EQ(comparison_time_pdt, parsed_time);
94 } 98 }
95 99
96 TEST_F(PRTimeTest, ParseTimeTest5) { 100 TEST_F(PRTimeTest, ParseTimeTest5) {
97 PRTime parsed_time = 0; 101 PRTime parsed_time = 0;
98 PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007", 102 PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007",
99 PR_FALSE, &parsed_time); 103 PR_FALSE, &parsed_time);
100 EXPECT_EQ(PR_SUCCESS, result); 104 EXPECT_EQ(PR_SUCCESS, result);
101 EXPECT_EQ(parsed_time, comparison_time_pdt); 105 EXPECT_EQ(comparison_time_pdt, parsed_time);
102 } 106 }
103 107
104 TEST_F(PRTimeTest, ParseTimeTest6) { 108 TEST_F(PRTimeTest, ParseTimeTest6) {
105 PRTime parsed_time = 0; 109 PRTime parsed_time = 0;
106 PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM", 110 PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM",
107 PR_FALSE, &parsed_time); 111 PR_FALSE, &parsed_time);
108 EXPECT_EQ(PR_SUCCESS, result); 112 EXPECT_EQ(PR_SUCCESS, result);
109 EXPECT_EQ(parsed_time, comparison_time_local_); 113 EXPECT_EQ(comparison_time_local_, parsed_time);
110 } 114 }
111 115
112 TEST_F(PRTimeTest, ParseTimeTest7) { 116 TEST_F(PRTimeTest, ParseTimeTest7) {
113 PRTime parsed_time = 0; 117 PRTime parsed_time = 0;
114 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE, 118 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE,
115 &parsed_time); 119 &parsed_time);
116 EXPECT_EQ(PR_SUCCESS, result); 120 EXPECT_EQ(PR_SUCCESS, result);
117 EXPECT_EQ(parsed_time, comparison_time_local_); 121 EXPECT_EQ(comparison_time_local_, parsed_time);
118 } 122 }
119 123
120 TEST_F(PRTimeTest, ParseTimeTest8) { 124 TEST_F(PRTimeTest, ParseTimeTest8) {
121 PRTime parsed_time = 0; 125 PRTime parsed_time = 0;
122 PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE, 126 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00. PM", PR_FALSE,
123 &parsed_time); 127 &parsed_time);
124 EXPECT_EQ(PR_SUCCESS, result); 128 EXPECT_EQ(PR_SUCCESS, result);
125 EXPECT_EQ(parsed_time, comparison_time_local_); 129 EXPECT_EQ(comparison_time_local_, parsed_time);
126 } 130 }
127 131
128 TEST_F(PRTimeTest, ParseTimeTest9) { 132 TEST_F(PRTimeTest, ParseTimeTest9) {
129 PRTime parsed_time = 0; 133 PRTime parsed_time = 0;
134 PRStatus result = PR_ParseTimeString("10/15/07 12:45:00.0 PM", PR_FALSE,
135 &parsed_time);
136 EXPECT_EQ(PR_SUCCESS, result);
137 EXPECT_EQ(comparison_time_local_, parsed_time);
138 }
139
140 TEST_F(PRTimeTest, ParseTimeTest10) {
141 PRTime parsed_time = 0;
142 PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE,
143 &parsed_time);
144 EXPECT_EQ(PR_SUCCESS, result);
145 EXPECT_EQ(comparison_time_local_, parsed_time);
146 }
147
148 TEST_F(PRTimeTest, ParseTimeTest11) {
149 PRTime parsed_time = 0;
130 PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)", 150 PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)",
131 PR_FALSE, &parsed_time); 151 PR_FALSE, &parsed_time);
132 EXPECT_EQ(PR_SUCCESS, result); 152 EXPECT_EQ(PR_SUCCESS, result);
133 EXPECT_EQ(parsed_time, comparison_time_pdt); 153 EXPECT_EQ(comparison_time_pdt, parsed_time);
154 }
155
156 TEST_F(PRTimeTest, ParseTimeTest12) {
157 PRTime parsed_time = 0;
158 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.440380+02:00",
159 PR_FALSE, &parsed_time);
160 EXPECT_EQ(PR_SUCCESS, result);
161 EXPECT_EQ(comparison_time_cest, parsed_time);
162 }
163
164 TEST_F(PRTimeTest, ParseTimeTest13) {
165 PRTime parsed_time = 0;
166 PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4403804+02",
167 PR_FALSE, &parsed_time);
168 EXPECT_EQ(PR_SUCCESS, result);
169 EXPECT_EQ(comparison_time_cest, parsed_time);
170 }
171
172 TEST_F(PRTimeTest, ParseTimeTest14) {
173 PRTime parsed_time = 0;
174 PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.44038Z",
175 PR_FALSE, &parsed_time);
176 EXPECT_EQ(PR_SUCCESS, result);
177 EXPECT_EQ(comparison_time_cest, parsed_time);
178 }
179
180 TEST_F(PRTimeTest, ParseTimeTest15) {
181 PRTime parsed_time = 0;
182 PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.440380Z",
183 PR_FALSE, &parsed_time);
184 EXPECT_EQ(PR_SUCCESS, result);
185 EXPECT_EQ(comparison_time_cest, parsed_time);
186 }
187
188 TEST_F(PRTimeTest, ParseTimeTest16) {
189 PRTime parsed_time = 0;
190 PRStatus result = PR_ParseTimeString("2013-07-08 09:28:12.440380Z",
191 PR_FALSE, &parsed_time);
192 EXPECT_EQ(PR_SUCCESS, result);
193 EXPECT_EQ(comparison_time_cest, parsed_time);
194 }
195
196 TEST_F(PRTimeTest, ParseTimeTestInvalid1) {
197 PRTime parsed_time = 0;
198 PRStatus result = PR_ParseTimeString("201-07-08T09:28:12.440380Z",
199 PR_FALSE, &parsed_time);
200 EXPECT_EQ(PR_FAILURE, result);
201 EXPECT_EQ(0, parsed_time);
202 }
203
204 TEST_F(PRTimeTest, ParseTimeTestInvalid2) {
205 PRTime parsed_time = 0;
206 PRStatus result = PR_ParseTimeString("2013-007-08T09:28:12.440380Z",
207 PR_FALSE, &parsed_time);
208 EXPECT_EQ(PR_FAILURE, result);
209 EXPECT_EQ(0, parsed_time);
210 }
211
212 TEST_F(PRTimeTest, ParseTimeTestInvalid3) {
213 PRTime parsed_time = 0;
214 PRStatus result = PR_ParseTimeString("2013-07-008T09:28:12.440380Z",
215 PR_FALSE, &parsed_time);
216 EXPECT_EQ(PR_FAILURE, result);
217 EXPECT_EQ(0, parsed_time);
134 } 218 }
135 219
136 // This test should not crash when compiled with Visual C++ 2005 (see 220 // This test should not crash when compiled with Visual C++ 2005 (see
137 // http://crbug.com/4387). 221 // http://crbug.com/4387).
138 TEST_F(PRTimeTest, ParseTimeTestOutOfRange) { 222 TEST_F(PRTimeTest, ParseTimeTestOutOfRange) {
139 PRTime parsed_time = 0; 223 PRTime parsed_time = 0;
140 // Note the lack of timezone in the time string. The year has to be 3001. 224 // 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 225 // 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 226 // we use January 2, 3001 to make sure it's after the magic maximum in any
143 // timezone. 227 // timezone.
(...skipping 12 matching lines...) Expand all
156 240
157 TEST_F(PRTimeTest, ParseTimeTestNotNormalized2) { 241 TEST_F(PRTimeTest, ParseTimeTestNotNormalized2) {
158 PRTime parsed_time = 0; 242 PRTime parsed_time = 0;
159 PRStatus result = PR_ParseTimeString("Sun Oct 14 36:45 PDT 2007", 243 PRStatus result = PR_ParseTimeString("Sun Oct 14 36:45 PDT 2007",
160 PR_FALSE, &parsed_time); 244 PR_FALSE, &parsed_time);
161 EXPECT_EQ(PR_SUCCESS, result); 245 EXPECT_EQ(PR_SUCCESS, result);
162 EXPECT_EQ(comparison_time_pdt, parsed_time); 246 EXPECT_EQ(comparison_time_pdt, parsed_time);
163 } 247 }
164 248
165 } // namespace 249 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698