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

Unified 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: Fix microsecond parsing for Windows and for timezoneless (local time) inputs. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/third_party/nspr/prtime.cc ('k') | chrome/browser/extensions/api/log_private/syslog_parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/time/pr_time_unittest.cc
diff --git a/base/time/pr_time_unittest.cc b/base/time/pr_time_unittest.cc
index 9e0c4ed04f040992c5a12e00acad13c7ae229eec..4219787b2c68b885733935a73b5e8e823668bcce 100644
--- a/base/time/pr_time_unittest.cc
+++ b/base/time/pr_time_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <stdint.h>
#include <time.h>
#include "base/compiler_specific.h"
@@ -16,6 +17,10 @@ namespace {
// time_t representation of 15th Oct 2007 12:45:00 PDT
PRTime comparison_time_pdt = 1192477500 * Time::kMicrosecondsPerSecond;
+// Time with positive tz offset and fractional seconds:
+// 2013-07-08T11:28:12.441381+02:00
+PRTime comparison_time_2 = INT64_C(1373275692441381); // represented as GMT
+
// Specialized test fixture allowing time strings without timezones to be
// tested by comparing them to a known time in the local zone.
class PRTimeTest : public testing::Test {
@@ -36,12 +41,30 @@ class PRTimeTest : public testing::Test {
0, // day of year (ignored, output only)
-1 // DST in effect, -1 tells mktime to figure it out
};
- comparison_time_local_ = mktime(&local_comparison_tm) *
- Time::kMicrosecondsPerSecond;
+ comparison_time_local_ =
+ mktime(&local_comparison_tm) * Time::kMicrosecondsPerSecond;
ASSERT_GT(comparison_time_local_, 0);
+
+ const int microseconds = 441381;
+ struct tm local_comparison_tm_2 = {
+ 12, // second
+ 28, // minute
+ 11, // hour
+ 8, // day of month
+ 7 - 1, // month
+ 2013 - 1900, // year
+ 0, // day of week (ignored, output only)
+ 0, // day of year (ignored, output only)
+ -1 // DST in effect, -1 tells mktime to figure it out
+ };
Mark Mentovai 2014/05/13 14:22:50 Alignment nit: this closing } should not line up w
Thiemo Nagel 2014/05/13 14:29:33 Thank you! Done.
+ comparison_time_local_2_ =
+ mktime(&local_comparison_tm_2) * Time::kMicrosecondsPerSecond;
+ ASSERT_GT(comparison_time_local_2_, 0);
+ comparison_time_local_2_ += microseconds;
}
PRTime comparison_time_local_;
+ PRTime comparison_time_local_2_;
};
// Tests the PR_ParseTimeString nspr helper function for
@@ -74,7 +97,7 @@ TEST_F(PRTimeTest, ParseTimeTest2) {
PRStatus result = PR_ParseTimeString("Mon, 15 Oct 2007 19:45:00 GMT",
PR_FALSE, &parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_pdt);
+ EXPECT_EQ(comparison_time_pdt, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest3) {
@@ -82,7 +105,7 @@ TEST_F(PRTimeTest, ParseTimeTest3) {
PRStatus result = PR_ParseTimeString("15 Oct 07 12:45:00", PR_FALSE,
&parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_local_);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest4) {
@@ -90,7 +113,7 @@ TEST_F(PRTimeTest, ParseTimeTest4) {
PRStatus result = PR_ParseTimeString("15 Oct 07 19:45 GMT", PR_FALSE,
&parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_pdt);
+ EXPECT_EQ(comparison_time_pdt, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest5) {
@@ -98,7 +121,7 @@ TEST_F(PRTimeTest, ParseTimeTest5) {
PRStatus result = PR_ParseTimeString("Mon Oct 15 12:45 PDT 2007",
PR_FALSE, &parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_pdt);
+ EXPECT_EQ(comparison_time_pdt, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest6) {
@@ -106,7 +129,7 @@ TEST_F(PRTimeTest, ParseTimeTest6) {
PRStatus result = PR_ParseTimeString("Monday, Oct 15, 2007 12:45 PM",
PR_FALSE, &parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_local_);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest7) {
@@ -114,23 +137,126 @@ TEST_F(PRTimeTest, ParseTimeTest7) {
PRStatus result = PR_ParseTimeString("10/15/07 12:45:00 PM", PR_FALSE,
&parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_local_);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest8) {
PRTime parsed_time = 0;
- PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE,
+ PRStatus result = PR_ParseTimeString("10/15/07 12:45:00. PM", PR_FALSE,
&parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_local_);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
}
TEST_F(PRTimeTest, ParseTimeTest9) {
PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("10/15/07 12:45:00.0 PM", PR_FALSE,
+ &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
+}
+
+TEST_F(PRTimeTest, ParseTimeTest10) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("15-OCT-2007 12:45pm", PR_FALSE,
+ &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_local_, parsed_time);
+}
+
+TEST_F(PRTimeTest, ParseTimeTest11) {
+ PRTime parsed_time = 0;
PRStatus result = PR_ParseTimeString("16 Oct 2007 4:45-JST (Tuesday)",
PR_FALSE, &parsed_time);
EXPECT_EQ(PR_SUCCESS, result);
- EXPECT_EQ(parsed_time, comparison_time_pdt);
+ EXPECT_EQ(comparison_time_pdt, parsed_time);
+}
+
+// hh:mm timezone offset.
+TEST_F(PRTimeTest, ParseTimeTest12) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381+02:00",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2, parsed_time);
+}
+
+// hhmm timezone offset.
+TEST_F(PRTimeTest, ParseTimeTest13) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381+0200",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2, parsed_time);
+}
+
+// hh timezone offset.
+TEST_F(PRTimeTest, ParseTimeTest14) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.4413819+02",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2, parsed_time);
+}
+
+// 5 digits fractional second.
+TEST_F(PRTimeTest, ParseTimeTest15) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.44138Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2-1, parsed_time);
+}
+
+// Fractional seconds, local timezone.
+TEST_F(PRTimeTest, ParseTimeTest16) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T11:28:12.441381",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_local_2_, parsed_time);
+}
+
+// "Z" (=GMT) timezone.
+TEST_F(PRTimeTest, ParseTimeTest17) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08T09:28:12.441381Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2, parsed_time);
+}
+
+// "T" delimiter replaced by space.
+TEST_F(PRTimeTest, ParseTimeTest18) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-08 09:28:12.441381Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_SUCCESS, result);
+ EXPECT_EQ(comparison_time_2, parsed_time);
+}
+
+TEST_F(PRTimeTest, ParseTimeTestInvalid1) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("201-07-08T09:28:12.441381Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_FAILURE, result);
+ EXPECT_EQ(0, parsed_time);
Mark Mentovai 2014/05/13 14:22:50 I don’t think it’s important or reasonable to test
Thiemo Nagel 2014/05/13 14:29:33 That's fair. Done.
+}
+
+TEST_F(PRTimeTest, ParseTimeTestInvalid2) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-007-08T09:28:12.441381Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_FAILURE, result);
+ EXPECT_EQ(0, parsed_time);
+}
+
+TEST_F(PRTimeTest, ParseTimeTestInvalid3) {
+ PRTime parsed_time = 0;
+ PRStatus result = PR_ParseTimeString("2013-07-008T09:28:12.441381Z",
+ PR_FALSE, &parsed_time);
+ EXPECT_EQ(PR_FAILURE, result);
+ EXPECT_EQ(0, parsed_time);
}
// This test should not crash when compiled with Visual C++ 2005 (see
« no previous file with comments | « base/third_party/nspr/prtime.cc ('k') | chrome/browser/extensions/api/log_private/syslog_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698