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 <time.h> | 7 #include <time.h> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/logging.h" |
| 11 #include "base/strings/stringprintf.h" |
10 #include "base/threading/platform_thread.h" | 12 #include "base/threading/platform_thread.h" |
11 #include "build/build_config.h" | 13 #include "build/build_config.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
13 | 15 |
14 using base::Time; | 16 using base::Time; |
15 using base::TimeDelta; | 17 using base::TimeDelta; |
16 using base::TimeTicks; | 18 using base::TimeTicks; |
17 | 19 |
18 // Specialized test fixture allowing time strings without timezones to be | 20 // Specialized test fixture allowing time strings without timezones to be |
19 // tested by comparing them to a known time in the local zone. | 21 // tested by comparing them to a known time in the local zone. |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 } | 536 } |
535 | 537 |
536 #if defined(OS_MACOSX) | 538 #if defined(OS_MACOSX) |
537 TEST_F(TimeTest, TimeTOverflow) { | 539 TEST_F(TimeTest, TimeTOverflow) { |
538 Time t = Time::FromInternalValue(std::numeric_limits<int64>::max() - 1); | 540 Time t = Time::FromInternalValue(std::numeric_limits<int64>::max() - 1); |
539 EXPECT_FALSE(t.is_max()); | 541 EXPECT_FALSE(t.is_max()); |
540 EXPECT_EQ(std::numeric_limits<time_t>::max(), t.ToTimeT()); | 542 EXPECT_EQ(std::numeric_limits<time_t>::max(), t.ToTimeT()); |
541 } | 543 } |
542 #endif | 544 #endif |
543 | 545 |
| 546 #if defined(OS_ANDROID) |
| 547 TEST_F(TimeTest, FromLocalExplodedCrashOnAndroid) { |
| 548 // This crashed inside Time:: FromLocalExploded() on Android 4.1.2. |
| 549 // See http://crbug.com/287821 |
| 550 Time::Exploded midnight = {2013, // year |
| 551 10, // month |
| 552 0, // day_of_week |
| 553 13, // day_of_month |
| 554 0, // hour |
| 555 0, // minute |
| 556 0, // second |
| 557 }; |
| 558 // The string passed to putenv() must be a char* and the documentation states |
| 559 // that it 'becomes part of the environment', so use a static buffer. |
| 560 static char buffer[] = "TZ=America/Santiago"; |
| 561 putenv(buffer); |
| 562 tzset(); |
| 563 Time t = Time::FromLocalExploded(midnight); |
| 564 EXPECT_EQ(1381633200, t.ToTimeT()); |
| 565 } |
| 566 #endif // OS_ANDROID |
| 567 |
544 TEST(TimeTicks, Deltas) { | 568 TEST(TimeTicks, Deltas) { |
545 for (int index = 0; index < 50; index++) { | 569 for (int index = 0; index < 50; index++) { |
546 TimeTicks ticks_start = TimeTicks::Now(); | 570 TimeTicks ticks_start = TimeTicks::Now(); |
547 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); | 571 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
548 TimeTicks ticks_stop = TimeTicks::Now(); | 572 TimeTicks ticks_stop = TimeTicks::Now(); |
549 TimeDelta delta = ticks_stop - ticks_start; | 573 TimeDelta delta = ticks_stop - ticks_start; |
550 // Note: Although we asked for a 10ms sleep, if the | 574 // Note: Although we asked for a 10ms sleep, if the |
551 // time clock has a finer granularity than the Sleep() | 575 // time clock has a finer granularity than the Sleep() |
552 // clock, it is quite possible to wakeup early. Here | 576 // clock, it is quite possible to wakeup early. Here |
553 // is how that works: | 577 // is how that works: |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
682 exploded.minute = 0; | 706 exploded.minute = 0; |
683 exploded.second = 0; | 707 exploded.second = 0; |
684 exploded.millisecond = 0; | 708 exploded.millisecond = 0; |
685 Time t = Time::FromUTCExploded(exploded); | 709 Time t = Time::FromUTCExploded(exploded); |
686 // Unix 1970 epoch. | 710 // Unix 1970 epoch. |
687 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue()); | 711 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue()); |
688 | 712 |
689 // We can't test 1601 epoch, since the system time functions on Linux | 713 // We can't test 1601 epoch, since the system time functions on Linux |
690 // only compute years starting from 1900. | 714 // only compute years starting from 1900. |
691 } | 715 } |
OLD | NEW |