OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 "ui/base/l10n/time_format.h" | 5 #include "ui/base/l10n/time_format.h" |
6 | 6 |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 #include "ui/base/resource/resource_bundle.h" | 12 #include "ui/base/resource/resource_bundle.h" |
13 | 13 |
14 using base::ASCIIToUTF16; | 14 using base::ASCIIToUTF16; |
15 | 15 |
16 namespace ui { | 16 namespace ui { |
17 namespace { | 17 namespace { |
18 | 18 |
19 using base::TimeDelta; | 19 using base::TimeDelta; |
20 | 20 |
21 class TimeFormatTest : public ::testing::Test { | 21 class TimeFormatTests : public ::testing::Test { |
22 public: | 22 protected: |
23 static void SetUpTestCase() { | 23 TimeFormatTests() |
| 24 : one_day(TimeDelta::FromDays(1)), |
| 25 one_hour(TimeDelta::FromHours(1)), |
| 26 one_min(TimeDelta::FromMinutes(1)), |
| 27 one_second(TimeDelta::FromSeconds(1)), |
| 28 one_millisecond(TimeDelta::FromMilliseconds(1)), |
| 29 zero(TimeDelta::FromMilliseconds(0)) { |
24 LoadLocale(ui::ResourceBundle::GetSharedInstance() | 30 LoadLocale(ui::ResourceBundle::GetSharedInstance() |
25 .GetLocaleFilePath("en-US", true)); | 31 .GetLocaleFilePath("en-US", true)); |
26 } | 32 } |
27 | 33 ~TimeFormatTests() { LoadLocale(base::FilePath()); } |
28 static void TearDownTestCase() { | 34 TimeDelta one_day, one_hour, one_min, one_second, one_millisecond, zero; |
29 LoadLocale(base::FilePath()); | |
30 } | |
31 | 35 |
32 private: | 36 private: |
33 static void LoadLocale(const base::FilePath& file_path) { | 37 static void LoadLocale(const base::FilePath& file_path) { |
34 ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path); | 38 ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path); |
35 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); | 39 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); |
36 } | 40 } |
37 }; | 41 }; |
38 | 42 |
39 void TestTimeFormats(const TimeDelta& delta, const char* expected_ascii) { | 43 void TestElapsed(const TimeDelta& delta, const std::string& expected) { |
40 base::string16 expected = ASCIIToUTF16(expected_ascii); | 44 EXPECT_EQ(TimeFormat::TimeElapsed(delta), ASCIIToUTF16(expected)); |
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)); | |
46 } | 45 } |
47 | 46 |
48 TEST_F(TimeFormatTest, FormatTime) { | 47 TEST_F(TimeFormatTests, TimeElapsed) { |
49 const TimeDelta one_day = TimeDelta::FromDays(1); | 48 TestElapsed(zero, "0 secs ago"); |
50 const TimeDelta one_hour = TimeDelta::FromHours(1); | 49 TestElapsed(499 * one_millisecond, "0 secs ago"); |
51 const TimeDelta one_min = TimeDelta::FromMinutes(1); | 50 TestElapsed(500 * one_millisecond, "1 sec ago"); |
52 const TimeDelta one_second = TimeDelta::FromSeconds(1); | 51 TestElapsed(one_second + 499 * one_millisecond, "1 sec ago"); |
53 const TimeDelta one_millisecond = TimeDelta::FromMilliseconds(1); | 52 TestElapsed(one_second + 500 * one_millisecond, "2 secs ago"); |
54 const TimeDelta zero = TimeDelta::FromMilliseconds(0); | 53 TestElapsed(59 * one_second + 499 * one_millisecond, "59 secs ago"); |
| 54 TestElapsed(59 * one_second + 500 * one_millisecond, "1 min ago"); |
| 55 TestElapsed(one_min + 30 * one_second - one_millisecond, "1 min ago"); |
| 56 TestElapsed(one_min + 30 * one_second, "2 mins ago"); |
| 57 TestElapsed(59 * one_min + 30 * one_second - one_millisecond, "59 mins ago"); |
| 58 TestElapsed(59 * one_min + 30 * one_second, "1 hour ago"); |
| 59 TestElapsed(one_hour + 30 * one_min - one_millisecond, "1 hour ago"); |
| 60 TestElapsed(one_hour + 30 * one_min, "2 hours ago"); |
| 61 TestElapsed(23 * one_hour + 30 * one_min - one_millisecond, "23 hours ago"); |
| 62 TestElapsed(23 * one_hour + 30 * one_min, "1 day ago"); |
| 63 TestElapsed(one_day + 12 * one_hour - one_millisecond, "1 day ago"); |
| 64 TestElapsed(one_day + 12 * one_hour, "2 days ago"); |
| 65 } |
55 | 66 |
56 TestTimeFormats(zero, "0 secs"); | 67 void TestRemaining(const TimeDelta& delta, const std::string& expected) { |
57 TestTimeFormats(499 * one_millisecond, "0 secs"); | 68 EXPECT_EQ(TimeFormat::TimeRemaining(delta), ASCIIToUTF16(expected)); |
58 TestTimeFormats(500 * one_millisecond, "1 sec"); | 69 } |
59 TestTimeFormats(1 * one_second + 499 * one_millisecond, "1 sec"); | 70 |
60 TestTimeFormats(1 * one_second + 500 * one_millisecond, "2 secs"); | 71 TEST_F(TimeFormatTests, TimeRemaining) { |
61 TestTimeFormats(59 * one_second + 499 * one_millisecond, "59 secs"); | 72 TestRemaining(zero, "0 secs left"); |
62 TestTimeFormats(59 * one_second + 500 * one_millisecond, "1 min"); | 73 TestRemaining(499 * one_millisecond, "0 secs left"); |
63 TestTimeFormats(1 * one_min + 30 * one_second - one_millisecond, "1 min"); | 74 TestRemaining(500 * one_millisecond, "1 sec left"); |
64 TestTimeFormats(1 * one_min + 30 * one_second, "2 mins"); | 75 TestRemaining(one_second + 499 * one_millisecond, "1 sec left"); |
65 TestTimeFormats(59 * one_min + 30 * one_second - one_millisecond, "59 mins"); | 76 TestRemaining(one_second + 500 * one_millisecond, "2 secs left"); |
66 TestTimeFormats(59 * one_min + 30 * one_second, "1 hour"); | 77 TestRemaining(59 * one_second + 499 * one_millisecond, "59 secs left"); |
67 TestTimeFormats(1 * one_hour + 30 * one_min - one_millisecond, "1 hour"); | 78 TestRemaining(59 * one_second + 500 * one_millisecond, "1 min left"); |
68 TestTimeFormats(1 * one_hour + 30 * one_min, "2 hours"); | 79 TestRemaining(one_min + 30 * one_second - one_millisecond, "1 min left"); |
69 TestTimeFormats(23 * one_hour + 30 * one_min - one_millisecond, "23 hours"); | 80 TestRemaining(one_min + 30 * one_second, "2 mins left"); |
70 TestTimeFormats(23 * one_hour + 30 * one_min, "1 day"); | 81 TestRemaining(59 * one_min + 30 * one_second - one_millisecond, |
71 TestTimeFormats(1 * one_day + 12 * one_hour - one_millisecond, "1 day"); | 82 "59 mins left"); |
72 TestTimeFormats(1 * one_day + 12 * one_hour, "2 days"); | 83 TestRemaining(59 * one_min + 30 * one_second, "1 hour left"); |
| 84 TestRemaining(one_hour + 30 * one_min - one_millisecond, "1 hour left"); |
| 85 TestRemaining(one_hour + 30 * one_min, "2 hours left"); |
| 86 TestRemaining(23 * one_hour + 30 * one_min - one_millisecond, |
| 87 "23 hours left"); |
| 88 TestRemaining(23 * one_hour + 30 * one_min, "1 day left"); |
| 89 TestRemaining(one_day + 12 * one_hour - one_millisecond, "1 day left"); |
| 90 TestRemaining(one_day + 12 * one_hour, "2 days left"); |
| 91 } |
| 92 |
| 93 void TestRemainingLong(const TimeDelta& delta, const std::string& expected) { |
| 94 EXPECT_EQ(TimeFormat::TimeRemainingLong(delta), ASCIIToUTF16(expected)); |
| 95 } |
| 96 |
| 97 TEST_F(TimeFormatTests, TimeRemainingLong) { |
| 98 TestRemainingLong(zero, "0 secs left"); |
| 99 TestRemainingLong(499 * one_millisecond, "0 secs left"); |
| 100 TestRemainingLong(500 * one_millisecond, "1 sec left"); |
| 101 TestRemainingLong(one_second + 499 * one_millisecond, "1 sec left"); |
| 102 TestRemainingLong(one_second + 500 * one_millisecond, "2 secs left"); |
| 103 TestRemainingLong(59 * one_second + 499 * one_millisecond, "59 secs left"); |
| 104 TestRemainingLong(59 * one_second + 500 * one_millisecond, "1 minute left"); |
| 105 TestRemainingLong(one_min + 30 * one_second - one_millisecond, |
| 106 "1 minute left"); |
| 107 TestRemainingLong(one_min + 30 * one_second, "2 minutes left"); |
| 108 TestRemainingLong(59 * one_min + 30 * one_second - one_millisecond, |
| 109 "59 minutes left"); |
| 110 TestRemainingLong(59 * one_min + 30 * one_second, "1 hour left"); |
| 111 TestRemainingLong(one_hour + 30 * one_min - one_millisecond, "1 hour left"); |
| 112 TestRemainingLong(one_hour + 30 * one_min, "2 hours left"); |
| 113 TestRemainingLong(23 * one_hour + 30 * one_min - one_millisecond, |
| 114 "23 hours left"); |
| 115 TestRemainingLong(23 * one_hour + 30 * one_min, "1 day left"); |
| 116 TestRemainingLong(one_day + 12 * one_hour - one_millisecond, "1 day left"); |
| 117 TestRemainingLong(one_day + 12 * one_hour, "2 days left"); |
| 118 } |
| 119 |
| 120 void TestDurationShort(const TimeDelta& delta, const std::string& expected) { |
| 121 EXPECT_EQ(TimeFormat::TimeDurationShort(delta), ASCIIToUTF16(expected)); |
| 122 } |
| 123 |
| 124 TEST_F(TimeFormatTests, TimeDurationShort) { |
| 125 TestDurationShort(zero, "0 secs"); |
| 126 TestDurationShort(499 * one_millisecond, "0 secs"); |
| 127 TestDurationShort(500 * one_millisecond, "1 sec"); |
| 128 TestDurationShort(one_second + 499 * one_millisecond, "1 sec"); |
| 129 TestDurationShort(one_second + 500 * one_millisecond, "2 secs"); |
| 130 TestDurationShort(59 * one_second + 499 * one_millisecond, "59 secs"); |
| 131 TestDurationShort(59 * one_second + 500 * one_millisecond, "1 min"); |
| 132 TestDurationShort(one_min + 30 * one_second - one_millisecond, "1 min"); |
| 133 TestDurationShort(one_min + 30 * one_second, "2 mins"); |
| 134 TestDurationShort(59 * one_min + 30 * one_second - one_millisecond, |
| 135 "59 mins"); |
| 136 TestDurationShort(59 * one_min + 30 * one_second, "1 hour"); |
| 137 TestDurationShort(one_hour + 30 * one_min - one_millisecond, "1 hour"); |
| 138 TestDurationShort(one_hour + 30 * one_min, "2 hours"); |
| 139 TestDurationShort(23 * one_hour + 30 * one_min - one_millisecond, "23 hours"); |
| 140 TestDurationShort(23 * one_hour + 30 * one_min, "1 day"); |
| 141 TestDurationShort(one_day + 12 * one_hour - one_millisecond, "1 day"); |
| 142 TestDurationShort(one_day + 12 * one_hour, "2 days"); |
| 143 } |
| 144 |
| 145 void TestDurationLong(const TimeDelta& delta, const std::string& expected) { |
| 146 EXPECT_EQ(TimeFormat::TimeDurationLong(delta), ASCIIToUTF16(expected)); |
| 147 } |
| 148 |
| 149 TEST_F(TimeFormatTests, TimeDurationLong) { |
| 150 TestDurationLong(zero, "0 seconds"); |
| 151 TestDurationLong(499 * one_millisecond, "0 seconds"); |
| 152 TestDurationLong(500 * one_millisecond, "1 second"); |
| 153 TestDurationLong(one_second + 499 * one_millisecond, "1 second"); |
| 154 TestDurationLong(one_second + 500 * one_millisecond, "2 seconds"); |
| 155 TestDurationLong(59 * one_second + 499 * one_millisecond, "59 seconds"); |
| 156 TestDurationLong(59 * one_second + 500 * one_millisecond, "1 minute"); |
| 157 TestDurationLong(one_min + 30 * one_second - one_millisecond, "1 minute"); |
| 158 TestDurationLong(one_min + 30 * one_second, "2 minutes"); |
| 159 TestDurationLong(59 * one_min + 30 * one_second - one_millisecond, |
| 160 "59 minutes"); |
| 161 TestDurationLong(59 * one_min + 30 * one_second, "1 hour"); |
| 162 TestDurationLong(one_hour + 30 * one_min - one_millisecond, "1 hour"); |
| 163 TestDurationLong(one_hour + 30 * one_min, "2 hours"); |
| 164 TestDurationLong(23 * one_hour + 30 * one_min - one_millisecond, "23 hours"); |
| 165 TestDurationLong(23 * one_hour + 30 * one_min, "1 day"); |
| 166 TestDurationLong(one_day + 12 * one_hour - one_millisecond, "1 day"); |
| 167 TestDurationLong(one_day + 12 * one_hour, "2 days"); |
73 } | 168 } |
74 | 169 |
75 // crbug.com/159388: This test fails when daylight savings time ends. | 170 // crbug.com/159388: This test fails when daylight savings time ends. |
76 TEST_F(TimeFormatTest, RelativeDate) { | 171 TEST_F(TimeFormatTests, RelativeDate) { |
77 base::Time now = base::Time::Now(); | 172 base::Time now = base::Time::Now(); |
78 base::string16 today_str = TimeFormat::RelativeDate(now, NULL); | 173 base::string16 today_str = TimeFormat::RelativeDate(now, NULL); |
79 EXPECT_EQ(ASCIIToUTF16("Today"), today_str); | 174 EXPECT_EQ(ASCIIToUTF16("Today"), today_str); |
80 | 175 |
81 base::Time yesterday = now - TimeDelta::FromDays(1); | 176 base::Time yesterday = now - TimeDelta::FromDays(1); |
82 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL); | 177 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL); |
83 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str); | 178 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str); |
84 | 179 |
85 base::Time two_days_ago = now - TimeDelta::FromDays(2); | 180 base::Time two_days_ago = now - TimeDelta::FromDays(2); |
86 base::string16 two_days_ago_str = | 181 base::string16 two_days_ago_str = |
87 TimeFormat::RelativeDate(two_days_ago, NULL); | 182 TimeFormat::RelativeDate(two_days_ago, NULL); |
88 EXPECT_TRUE(two_days_ago_str.empty()); | 183 EXPECT_TRUE(two_days_ago_str.empty()); |
89 | 184 |
90 base::Time a_week_ago = now - TimeDelta::FromDays(7); | 185 base::Time a_week_ago = now - TimeDelta::FromDays(7); |
91 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL); | 186 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL); |
92 EXPECT_TRUE(a_week_ago_str.empty()); | 187 EXPECT_TRUE(a_week_ago_str.empty()); |
93 } | 188 } |
94 | 189 |
95 } // namespace | 190 } // namespace |
96 } // namespace ui | 191 } // namespace ui |
OLD | NEW |