| OLD | NEW |
| 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 "base/time/time.h" | 5 #include "base/time/time.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <time.h> | 8 #include <time.h> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <string> | 10 #include <string> |
| 11 | 11 |
| 12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 16 #include "base/threading/platform_thread.h" | 16 #include "base/threading/platform_thread.h" |
| 17 #include "build/build_config.h" | 17 #include "build/build_config.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 19 |
| 20 namespace base { | 20 namespace base { |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 TEST(TimeTestOutOfBounds, FromExplodedOutOfBoundsTime) { | |
| 25 // FromUTCExploded must set time to Time(0) and failure, if the day is set to | |
| 26 // 31 on a 28-30 day month. Test |exploded| returns Time(0) on 31st of | |
| 27 // February and 31st of April. New implementation handles this. | |
| 28 | |
| 29 const struct DateTestData { | |
| 30 Time::Exploded explode; | |
| 31 bool is_valid; | |
| 32 } kDateTestData[] = { | |
| 33 // 31st of February | |
| 34 {{2016, 2, 0, 31, 12, 30, 0, 0}, true}, | |
| 35 // 31st of April | |
| 36 {{2016, 4, 0, 31, 8, 43, 0, 0}, true}, | |
| 37 // Negative month | |
| 38 {{2016, -5, 0, 2, 4, 10, 0, 0}, false}, | |
| 39 // Negative date of month | |
| 40 {{2016, 6, 0, -15, 2, 50, 0, 0}, false}, | |
| 41 // Negative hours | |
| 42 {{2016, 7, 0, 10, -11, 29, 0, 0}, false}, | |
| 43 // Negative minutes | |
| 44 {{2016, 3, 0, 14, 10, -29, 0, 0}, false}, | |
| 45 // Negative seconds | |
| 46 {{2016, 10, 0, 25, 7, 47, -30, 0}, false}, | |
| 47 // Negative milliseconds | |
| 48 {{2016, 10, 0, 25, 7, 47, 20, -500}, false}, | |
| 49 // Hours are too large | |
| 50 {{2016, 7, 0, 10, 26, 29, 0, 0}, false}, | |
| 51 // Minutes are too large | |
| 52 {{2016, 3, 0, 14, 10, 78, 0, 0}, false}, | |
| 53 // Seconds are too large | |
| 54 {{2016, 10, 0, 25, 7, 47, 234, 0}, false}, | |
| 55 // Milliseconds are too large | |
| 56 {{2016, 10, 0, 25, 6, 31, 23, 1643}, false}, | |
| 57 }; | |
| 58 | |
| 59 for (const auto& test : kDateTestData) { | |
| 60 EXPECT_EQ(test.explode.HasValidValues(), test.is_valid); | |
| 61 | |
| 62 base::Time result; | |
| 63 EXPECT_FALSE(base::Time::FromUTCExploded(test.explode, &result)); | |
| 64 EXPECT_TRUE(result.is_null()); | |
| 65 EXPECT_FALSE(base::Time::FromLocalExploded(test.explode, &result)); | |
| 66 EXPECT_TRUE(result.is_null()); | |
| 67 } | |
| 68 } | |
| 69 | |
| 70 // Specialized test fixture allowing time strings without timezones to be | 24 // Specialized test fixture allowing time strings without timezones to be |
| 71 // tested by comparing them to a known time in the local zone. | 25 // tested by comparing them to a known time in the local zone. |
| 72 // See also pr_time_unittests.cc | 26 // See also pr_time_unittests.cc |
| 73 class TimeTest : public testing::Test { | 27 class TimeTest : public testing::Test { |
| 74 protected: | 28 protected: |
| 75 void SetUp() override { | 29 void SetUp() override { |
| 76 // Use mktime to get a time_t, and turn it into a PRTime by converting | 30 // Use mktime to get a time_t, and turn it into a PRTime by converting |
| 77 // seconds to microseconds. Use 15th Oct 2007 12:45:00 local. This | 31 // seconds to microseconds. Use 15th Oct 2007 12:45:00 local. This |
| 78 // must be a time guaranteed to be outside of a DST fallback hour in | 32 // must be a time guaranteed to be outside of a DST fallback hour in |
| 79 // any timezone. | 33 // any timezone. |
| (...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1167 | 1121 |
| 1168 TEST(TimeTicksLogging, DoesNotMakeStreamBad) { | 1122 TEST(TimeTicksLogging, DoesNotMakeStreamBad) { |
| 1169 std::ostringstream oss; | 1123 std::ostringstream oss; |
| 1170 oss << TimeTicks(); | 1124 oss << TimeTicks(); |
| 1171 EXPECT_TRUE(oss.good()); | 1125 EXPECT_TRUE(oss.good()); |
| 1172 } | 1126 } |
| 1173 | 1127 |
| 1174 } // namespace | 1128 } // namespace |
| 1175 | 1129 |
| 1176 } // namespace base | 1130 } // namespace base |
| OLD | NEW |