Chromium Code Reviews| 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 |