1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/base/l10n/time_format.h"
7 #include "base/files/file_path.h"
8 #include "base/strings/string16.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/time/time.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/base/resource/resource_bundle.h"
14 using base::ASCIIToUTF16;
19 using base::TimeDelta;
21 class TimeFormatTest : public ::testing::Test {
23 static void SetUpTestCase() {
24 LoadLocale(ui::ResourceBundle::GetSharedInstance()
25 .GetLocaleFilePath("en-US", true));
28 static void TearDownTestCase() {
29 LoadLocale(base::FilePath());
33 static void LoadLocale(const base::FilePath& file_path) {
34 ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path);
35 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US");
39 void TestTimeFormats(const TimeDelta& delta, const char* expected_ascii) {
40 base::string16 expected = ASCIIToUTF16(expected_ascii);
41 base::string16 expected_left = expected + ASCIIToUTF16(" left");
42 base::string16 expected_ago = expected + ASCIIToUTF16(" ago");
43 EXPECT_EQ(expected, TimeFormat::TimeDurationShort(delta));
44 EXPECT_EQ(expected_left, TimeFormat::TimeRemaining(delta));
45 EXPECT_EQ(expected_ago, TimeFormat::TimeElapsed(delta));
48 TEST_F(TimeFormatTest, FormatTime) {
49 const TimeDelta one_day = TimeDelta::FromDays(1);
50 const TimeDelta one_hour = TimeDelta::FromHours(1);
51 const TimeDelta one_min = TimeDelta::FromMinutes(1);
52 const TimeDelta one_second = TimeDelta::FromSeconds(1);
53 const TimeDelta one_millisecond = TimeDelta::FromMilliseconds(1);
54 const TimeDelta zero = TimeDelta::FromMilliseconds(0);
56 TestTimeFormats(zero, "0 secs");
57 TestTimeFormats(499 * one_millisecond, "0 secs");
58 TestTimeFormats(500 * one_millisecond, "1 sec");
59 TestTimeFormats(1 * one_second + 499 * one_millisecond, "1 sec");
60 TestTimeFormats(1 * one_second + 500 * one_millisecond, "2 secs");
61 TestTimeFormats(59 * one_second + 499 * one_millisecond, "59 secs");
62 TestTimeFormats(59 * one_second + 500 * one_millisecond, "1 min");
63 TestTimeFormats(1 * one_min + 30 * one_second - one_millisecond, "1 min");
64 TestTimeFormats(1 * one_min + 30 * one_second, "2 mins");
65 TestTimeFormats(59 * one_min + 30 * one_second - one_millisecond, "59 mins");
66 TestTimeFormats(59 * one_min + 30 * one_second, "1 hour");
67 TestTimeFormats(1 * one_hour + 30 * one_min - one_millisecond, "1 hour");
68 TestTimeFormats(1 * one_hour + 30 * one_min, "2 hours");
69 TestTimeFormats(23 * one_hour + 30 * one_min - one_millisecond, "23 hours");
70 TestTimeFormats(23 * one_hour + 30 * one_min, "1 day");
71 TestTimeFormats(1 * one_day + 12 * one_hour - one_millisecond, "1 day");
72 TestTimeFormats(1 * one_day + 12 * one_hour, "2 days");
75 void TestRemainingLong(const TimeDelta& delta, const std::string& expected) {
76 EXPECT_EQ(TimeFormat::TimeRemainingLong(delta), ASCIIToUTF16(expected));
79 TEST_F(TimeFormatTest, TimeRemainingLong) {
80 const TimeDelta one_day(TimeDelta::FromDays(1));
81 const TimeDelta one_hour(TimeDelta::FromHours(1));
82 const TimeDelta one_min(TimeDelta::FromMinutes(1));
83 const TimeDelta one_second(TimeDelta::FromSeconds(1));
84 const TimeDelta one_millisecond(TimeDelta::FromMilliseconds(1));
85 const TimeDelta zero(TimeDelta::FromMilliseconds(0));
87 TestRemainingLong(zero, "0 seconds left");
88 TestRemainingLong(499 * one_millisecond, "0 seconds left");
89 TestRemainingLong(500 * one_millisecond, "1 second left");
90 TestRemainingLong(one_second + 499 * one_millisecond, "1 second left");
91 TestRemainingLong(one_second + 500 * one_millisecond, "2 seconds left");
92 TestRemainingLong(59 * one_second + 499 * one_millisecond, "59 seconds left");
93 TestRemainingLong(59 * one_second + 500 * one_millisecond, "1 minute left");
94 TestRemainingLong(one_min + 30 * one_second - one_millisecond,
96 TestRemainingLong(one_min + 30 * one_second, "2 minutes left");
97 TestRemainingLong(59 * one_min + 30 * one_second - one_millisecond,
99 TestRemainingLong(59 * one_min + 30 * one_second, "1 hour left");
100 TestRemainingLong(one_hour + 30 * one_min - one_millisecond, "1 hour left");
101 TestRemainingLong(one_hour + 30 * one_min, "2 hours left");
102 TestRemainingLong(23 * one_hour + 30 * one_min - one_millisecond,
104 TestRemainingLong(23 * one_hour + 30 * one_min, "1 day left");
105 TestRemainingLong(one_day + 12 * one_hour - one_millisecond, "1 day left");
106 TestRemainingLong(one_day + 12 * one_hour, "2 days left");
109 // crbug.com/159388: This test fails when daylight savings time ends.
110 TEST_F(TimeFormatTest, RelativeDate) {
111 base::Time now = base::Time::Now();
112 base::string16 today_str = TimeFormat::RelativeDate(now, NULL);
113 EXPECT_EQ(ASCIIToUTF16("Today"), today_str);
115 base::Time yesterday = now - TimeDelta::FromDays(1);
116 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL);
117 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str);
119 base::Time two_days_ago = now - TimeDelta::FromDays(2);
120 base::string16 two_days_ago_str =
121 TimeFormat::RelativeDate(two_days_ago, NULL);
122 EXPECT_TRUE(two_days_ago_str.empty());
124 base::Time a_week_ago = now - TimeDelta::FromDays(7);
125 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL);
126 EXPECT_TRUE(a_week_ago_str.empty());