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/l10n/formatter.h" |
12 #include "ui/base/resource/resource_bundle.h" | 13 #include "ui/base/resource/resource_bundle.h" |
13 | 14 |
14 using base::ASCIIToUTF16; | 15 using base::ASCIIToUTF16; |
15 | 16 |
16 namespace ui { | 17 namespace ui { |
17 namespace { | 18 namespace { |
18 | 19 |
19 using base::TimeDelta; | 20 using base::TimeDelta; |
20 | 21 |
21 class TimeFormatTest : public ::testing::Test { | 22 class TimeFormatTest : public ::testing::Test { |
22 public: | 23 public: |
| 24 TimeFormatTest() : |
| 25 delta_0s_(TimeDelta::FromSeconds(0)), |
| 26 delta_1ms_(TimeDelta::FromMilliseconds(1)), |
| 27 delta_499ms_(TimeDelta::FromMilliseconds(499)), |
| 28 delta_500ms_(TimeDelta::FromMilliseconds(500)), |
| 29 delta_999ms_(TimeDelta::FromMilliseconds(999)), |
| 30 delta_1s_(TimeDelta::FromSeconds(1)), |
| 31 delta_1s499ms_(delta_1s_ + delta_499ms_), |
| 32 delta_1s500ms_(delta_1s_ + delta_500ms_), |
| 33 delta_2s_(TimeDelta::FromSeconds(2)), |
| 34 delta_29s_(TimeDelta::FromSeconds(29)), |
| 35 delta_30s_(TimeDelta::FromSeconds(30)), |
| 36 delta_59s_(TimeDelta::FromSeconds(59)), |
| 37 delta_59s499ms_(delta_59s_ + delta_499ms_), |
| 38 delta_59s500ms_(delta_59s_ + delta_500ms_), |
| 39 delta_1m_(TimeDelta::FromMinutes(1)), |
| 40 delta_1m2s_(delta_1m_ + delta_2s_), |
| 41 delta_1m29s999ms_(delta_1m_ + delta_29s_ + delta_999ms_), |
| 42 delta_1m30s_(delta_1m_ + delta_30s_), |
| 43 delta_2m_(TimeDelta::FromMinutes(2)), |
| 44 delta_2m1s_(delta_2m_ + delta_1s_), |
| 45 delta_29m_(TimeDelta::FromMinutes(29)), |
| 46 delta_30m_(TimeDelta::FromMinutes(30)), |
| 47 delta_59m_(TimeDelta::FromMinutes(59)), |
| 48 delta_59m29s999ms_(delta_59m_ + delta_29s_ + delta_999ms_), |
| 49 delta_59m30s_(delta_59m_ + delta_30s_), |
| 50 delta_59m59s499ms_(delta_59m_ + delta_59s_ + delta_499ms_), |
| 51 delta_59m59s500ms_(delta_59m_ + delta_59s_ + delta_500ms_), |
| 52 delta_1h_(TimeDelta::FromHours(1)), |
| 53 delta_1h2m_(delta_1h_ + delta_2m_), |
| 54 delta_1h29m59s999ms_(delta_1h_ + delta_29m_ + delta_59s_ + delta_999ms_), |
| 55 delta_1h30m_(delta_1h_ + delta_30m_), |
| 56 delta_2h_(TimeDelta::FromHours(2)), |
| 57 delta_2h1m_(delta_2h_ + delta_1m_), |
| 58 delta_11h_(TimeDelta::FromHours(11)), |
| 59 delta_12h_(TimeDelta::FromHours(12)), |
| 60 delta_23h_(TimeDelta::FromHours(23)), |
| 61 delta_23h29m59s999ms_(delta_23h_ + delta_29m_ + delta_59s_ + |
| 62 delta_999ms_), |
| 63 delta_23h30m_(delta_23h_ + delta_30m_), |
| 64 delta_23h59m29s999ms_(delta_23h_ + delta_59m_ + delta_29s_ + |
| 65 delta_999ms_), |
| 66 delta_23h59m30s_(delta_23h_ + delta_59m_ + delta_30s_), |
| 67 delta_1d_(TimeDelta::FromDays(1)), |
| 68 delta_1d2h_(delta_1d_ + delta_2h_), |
| 69 delta_1d11h59m59s999ms_(delta_1d_ + delta_11h_ + delta_59m_ + delta_29s_ + |
| 70 delta_999ms_), |
| 71 delta_1d12h_(delta_1d_ + delta_12h_), |
| 72 delta_2d_(TimeDelta::FromDays(2)), |
| 73 delta_2d1h_(delta_2d_ + delta_1h_) |
| 74 {} |
| 75 |
| 76 protected: |
23 static void SetUpTestCase() { | 77 static void SetUpTestCase() { |
24 LoadLocale(ui::ResourceBundle::GetSharedInstance() | 78 LoadLocale(ui::ResourceBundle::GetSharedInstance() |
25 .GetLocaleFilePath("en-US", true)); | 79 .GetLocaleFilePath("en-US", true)); |
26 } | 80 } |
27 | 81 |
28 static void TearDownTestCase() { | 82 static void TearDownTestCase() { |
29 LoadLocale(base::FilePath()); | 83 LoadLocale(base::FilePath()); |
30 } | 84 } |
31 | 85 |
| 86 void TestStrings() { |
| 87 // Test English strings (simple, singular). |
| 88 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple( |
| 89 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s_)); |
| 90 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple( |
| 91 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1m_)); |
| 92 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple( |
| 93 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1h_)); |
| 94 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple( |
| 95 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1d_)); |
| 96 EXPECT_EQ(ASCIIToUTF16("1 second"), TimeFormat::Simple( |
| 97 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1s_)); |
| 98 EXPECT_EQ(ASCIIToUTF16("1 minute"), TimeFormat::Simple( |
| 99 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1m_)); |
| 100 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple( |
| 101 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1h_)); |
| 102 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple( |
| 103 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1d_)); |
| 104 EXPECT_EQ(ASCIIToUTF16("1 sec left"), TimeFormat::Simple( |
| 105 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1s_)); |
| 106 EXPECT_EQ(ASCIIToUTF16("1 min left"), TimeFormat::Simple( |
| 107 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1m_)); |
| 108 EXPECT_EQ(ASCIIToUTF16("1 hour left"), TimeFormat::Simple( |
| 109 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1h_)); |
| 110 EXPECT_EQ(ASCIIToUTF16("1 day left"), TimeFormat::Simple( |
| 111 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1d_)); |
| 112 EXPECT_EQ(ASCIIToUTF16("1 second left"), TimeFormat::Simple( |
| 113 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1s_)); |
| 114 EXPECT_EQ(ASCIIToUTF16("1 minute left"), TimeFormat::Simple( |
| 115 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1m_)); |
| 116 EXPECT_EQ(ASCIIToUTF16("1 hour left"), TimeFormat::Simple( |
| 117 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1h_)); |
| 118 EXPECT_EQ(ASCIIToUTF16("1 day left"), TimeFormat::Simple( |
| 119 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1d_)); |
| 120 EXPECT_EQ(ASCIIToUTF16("1 sec ago"), TimeFormat::Simple( |
| 121 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1s_)); |
| 122 EXPECT_EQ(ASCIIToUTF16("1 min ago"), TimeFormat::Simple( |
| 123 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1m_)); |
| 124 EXPECT_EQ(ASCIIToUTF16("1 hour ago"), TimeFormat::Simple( |
| 125 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1h_)); |
| 126 EXPECT_EQ(ASCIIToUTF16("1 day ago"), TimeFormat::Simple( |
| 127 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1d_)); |
| 128 |
| 129 // Test English strings (simple, plural). |
| 130 EXPECT_EQ(ASCIIToUTF16("2 secs"), TimeFormat::Simple( |
| 131 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2s_)); |
| 132 EXPECT_EQ(ASCIIToUTF16("2 mins"), TimeFormat::Simple( |
| 133 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2m_)); |
| 134 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple( |
| 135 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2h_)); |
| 136 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple( |
| 137 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2d_)); |
| 138 EXPECT_EQ(ASCIIToUTF16("2 seconds"), TimeFormat::Simple( |
| 139 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2s_)); |
| 140 EXPECT_EQ(ASCIIToUTF16("2 minutes"), TimeFormat::Simple( |
| 141 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2m_)); |
| 142 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple( |
| 143 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2h_)); |
| 144 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple( |
| 145 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2d_)); |
| 146 EXPECT_EQ(ASCIIToUTF16("2 secs left"), TimeFormat::Simple( |
| 147 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2s_)); |
| 148 EXPECT_EQ(ASCIIToUTF16("2 mins left"), TimeFormat::Simple( |
| 149 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2m_)); |
| 150 EXPECT_EQ(ASCIIToUTF16("2 hours left"), TimeFormat::Simple( |
| 151 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2h_)); |
| 152 EXPECT_EQ(ASCIIToUTF16("2 days left"), TimeFormat::Simple( |
| 153 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2d_)); |
| 154 EXPECT_EQ(ASCIIToUTF16("2 seconds left"), TimeFormat::Simple( |
| 155 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2s_)); |
| 156 EXPECT_EQ(ASCIIToUTF16("2 minutes left"), TimeFormat::Simple( |
| 157 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2m_)); |
| 158 EXPECT_EQ(ASCIIToUTF16("2 hours left"), TimeFormat::Simple( |
| 159 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2h_)); |
| 160 EXPECT_EQ(ASCIIToUTF16("2 days left"), TimeFormat::Simple( |
| 161 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2d_)); |
| 162 EXPECT_EQ(ASCIIToUTF16("2 secs ago"), TimeFormat::Simple( |
| 163 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2s_)); |
| 164 EXPECT_EQ(ASCIIToUTF16("2 mins ago"), TimeFormat::Simple( |
| 165 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2m_)); |
| 166 EXPECT_EQ(ASCIIToUTF16("2 hours ago"), TimeFormat::Simple( |
| 167 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2h_)); |
| 168 EXPECT_EQ(ASCIIToUTF16("2 days ago"), TimeFormat::Simple( |
| 169 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2d_)); |
| 170 |
| 171 // Test English strings (detailed, singular and plural). |
| 172 EXPECT_EQ(ASCIIToUTF16("1 minute 2 seconds"), TimeFormat::Detailed( |
| 173 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1m2s_)); |
| 174 EXPECT_EQ(ASCIIToUTF16("2 minutes 1 second"), TimeFormat::Detailed( |
| 175 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2m1s_)); |
| 176 EXPECT_EQ(ASCIIToUTF16("1 hour 2 minutes"), TimeFormat::Detailed( |
| 177 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1h2m_)); |
| 178 EXPECT_EQ(ASCIIToUTF16("2 hours 1 minute"), TimeFormat::Detailed( |
| 179 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2h1m_)); |
| 180 EXPECT_EQ(ASCIIToUTF16("1 day 2 hours"), TimeFormat::Detailed( |
| 181 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1d2h_)); |
| 182 EXPECT_EQ(ASCIIToUTF16("2 days 1 hour"), TimeFormat::Detailed( |
| 183 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2d1h_)); |
| 184 } |
| 185 |
| 186 TimeDelta delta_0s_; |
| 187 TimeDelta delta_1ms_; |
| 188 TimeDelta delta_499ms_; |
| 189 TimeDelta delta_500ms_; |
| 190 TimeDelta delta_999ms_; |
| 191 TimeDelta delta_1s_; |
| 192 TimeDelta delta_1s499ms_; |
| 193 TimeDelta delta_1s500ms_; |
| 194 TimeDelta delta_2s_; |
| 195 TimeDelta delta_29s_; |
| 196 TimeDelta delta_30s_; |
| 197 TimeDelta delta_59s_; |
| 198 TimeDelta delta_59s499ms_; |
| 199 TimeDelta delta_59s500ms_; |
| 200 TimeDelta delta_1m_; |
| 201 TimeDelta delta_1m2s_; |
| 202 TimeDelta delta_1m29s999ms_; |
| 203 TimeDelta delta_1m30s_; |
| 204 TimeDelta delta_2m_; |
| 205 TimeDelta delta_2m1s_; |
| 206 TimeDelta delta_29m_; |
| 207 TimeDelta delta_30m_; |
| 208 TimeDelta delta_59m_; |
| 209 TimeDelta delta_59m29s999ms_; |
| 210 TimeDelta delta_59m30s_; |
| 211 TimeDelta delta_59m59s499ms_; |
| 212 TimeDelta delta_59m59s500ms_; |
| 213 TimeDelta delta_1h_; |
| 214 TimeDelta delta_1h2m_; |
| 215 TimeDelta delta_1h29m59s999ms_; |
| 216 TimeDelta delta_1h30m_; |
| 217 TimeDelta delta_2h_; |
| 218 TimeDelta delta_2h1m_; |
| 219 TimeDelta delta_11h_; |
| 220 TimeDelta delta_12h_; |
| 221 TimeDelta delta_23h_; |
| 222 TimeDelta delta_23h29m59s999ms_; |
| 223 TimeDelta delta_23h30m_; |
| 224 TimeDelta delta_23h59m29s999ms_; |
| 225 TimeDelta delta_23h59m30s_; |
| 226 TimeDelta delta_1d_; |
| 227 TimeDelta delta_1d2h_; |
| 228 TimeDelta delta_1d11h59m59s999ms_; |
| 229 TimeDelta delta_1d12h_; |
| 230 TimeDelta delta_2d_; |
| 231 TimeDelta delta_2d1h_; |
| 232 |
32 private: | 233 private: |
33 static void LoadLocale(const base::FilePath& file_path) { | 234 static void LoadLocale(const base::FilePath& file_path) { |
34 ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path); | 235 ui::ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(file_path); |
35 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); | 236 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("en-US"); |
36 } | 237 } |
37 }; | 238 }; |
38 | 239 |
39 void TestTimeFormats(const TimeDelta& delta, const char* expected_ascii) { | 240 TEST_F(TimeFormatTest, SimpleAndDetailedRounding) { |
40 base::string16 expected = ASCIIToUTF16(expected_ascii); | 241 // Test rounding behavior (simple). |
41 base::string16 expected_left = expected + ASCIIToUTF16(" left"); | 242 EXPECT_EQ(ASCIIToUTF16("0 secs"), TimeFormat::Simple( |
42 base::string16 expected_ago = expected + ASCIIToUTF16(" ago"); | 243 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_0s_)); |
43 EXPECT_EQ(expected, TimeFormat::TimeDurationShort(delta)); | 244 EXPECT_EQ(ASCIIToUTF16("0 secs"), TimeFormat::Simple( |
44 EXPECT_EQ(expected_left, TimeFormat::TimeRemaining(delta)); | 245 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_499ms_)); |
45 EXPECT_EQ(expected_ago, TimeFormat::TimeElapsed(delta)); | 246 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple( |
| 247 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_500ms_)); |
| 248 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple( |
| 249 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s499ms_)); |
| 250 EXPECT_EQ(ASCIIToUTF16("2 secs"), TimeFormat::Simple( |
| 251 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s500ms_)); |
| 252 EXPECT_EQ(ASCIIToUTF16("59 secs"), TimeFormat::Simple( |
| 253 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59s499ms_)); |
| 254 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple( |
| 255 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59s500ms_)); |
| 256 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple( |
| 257 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, |
| 258 delta_1m29s999ms_)); |
| 259 EXPECT_EQ(ASCIIToUTF16("2 mins"), TimeFormat::Simple( |
| 260 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1m30s_)); |
| 261 EXPECT_EQ(ASCIIToUTF16("59 mins"), TimeFormat::Simple( |
| 262 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, |
| 263 delta_59m29s999ms_)); |
| 264 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple( |
| 265 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59m30s_)); |
| 266 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple( |
| 267 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, |
| 268 delta_1h29m59s999ms_)); |
| 269 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple( |
| 270 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1h30m_)); |
| 271 EXPECT_EQ(ASCIIToUTF16("23 hours"), TimeFormat::Simple( |
| 272 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, |
| 273 delta_23h29m59s999ms_)); |
| 274 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple( |
| 275 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_23h30m_)); |
| 276 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple( |
| 277 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, |
| 278 delta_1d11h59m59s999ms_)); |
| 279 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple( |
| 280 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1d12h_)); |
| 281 |
| 282 // Test rounding behavior (detailed). |
| 283 EXPECT_EQ(ASCIIToUTF16("59 seconds"), TimeFormat::Detailed( |
| 284 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 100, |
| 285 delta_59s499ms_)); |
| 286 EXPECT_EQ(ASCIIToUTF16("1 minute 0 seconds"), TimeFormat::Detailed( |
| 287 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2, |
| 288 delta_59s500ms_)); |
| 289 EXPECT_EQ(ASCIIToUTF16("1 minute"), TimeFormat::Detailed( |
| 290 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1, |
| 291 delta_59s500ms_)); |
| 292 EXPECT_EQ(ASCIIToUTF16("59 minutes 59 seconds"), TimeFormat::Detailed( |
| 293 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 60, |
| 294 delta_59m59s499ms_)); |
| 295 EXPECT_EQ(ASCIIToUTF16("1 hour 0 minutes"), TimeFormat::Detailed( |
| 296 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 59, |
| 297 delta_59m59s499ms_)); |
| 298 EXPECT_EQ(ASCIIToUTF16("1 hour 0 minutes"), TimeFormat::Detailed( |
| 299 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2, |
| 300 delta_59m59s499ms_)); |
| 301 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Detailed( |
| 302 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1, |
| 303 delta_59m59s499ms_)); |
| 304 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Detailed( |
| 305 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1, |
| 306 delta_59m59s500ms_)); |
| 307 EXPECT_EQ(ASCIIToUTF16("1 hour 0 minutes"), TimeFormat::Detailed( |
| 308 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2, |
| 309 delta_59m59s500ms_)); |
| 310 EXPECT_EQ(ASCIIToUTF16("23 hours 59 minutes"), TimeFormat::Detailed( |
| 311 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 24, |
| 312 delta_23h59m29s999ms_)); |
| 313 EXPECT_EQ(ASCIIToUTF16("1 day 0 hours"), TimeFormat::Detailed( |
| 314 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 23, |
| 315 delta_23h59m29s999ms_)); |
| 316 EXPECT_EQ(ASCIIToUTF16("1 day 0 hours"), TimeFormat::Detailed( |
| 317 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2, |
| 318 delta_23h59m29s999ms_)); |
| 319 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Detailed( |
| 320 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1, |
| 321 delta_23h59m29s999ms_)); |
| 322 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Detailed( |
| 323 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1, |
| 324 delta_23h59m30s_)); |
| 325 EXPECT_EQ(ASCIIToUTF16("1 day 0 hours"), TimeFormat::Detailed( |
| 326 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2, |
| 327 delta_23h59m30s_)); |
| 328 EXPECT_EQ(ASCIIToUTF16("1 day 0 hours"), TimeFormat::Detailed( |
| 329 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, -1, |
| 330 delta_23h59m30s_)); |
46 } | 331 } |
47 | 332 |
48 TEST_F(TimeFormatTest, FormatTime) { | 333 // Test strings in default code path. |
49 const TimeDelta one_day = TimeDelta::FromDays(1); | 334 TEST_F(TimeFormatTest, SimpleAndDetailedStrings) { |
50 const TimeDelta one_hour = TimeDelta::FromHours(1); | 335 TestStrings(); |
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); | |
55 | |
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"); | |
73 } | 336 } |
74 | 337 |
75 void TestRemainingLong(const TimeDelta& delta, const std::string& expected) { | 338 // Test strings in fallback path in case of translator error. |
76 EXPECT_EQ(TimeFormat::TimeRemainingLong(delta), ASCIIToUTF16(expected)); | 339 TEST_F(TimeFormatTest, SimpleAndDetailedStringFallback) { |
77 } | 340 formatter_force_fallback = true; |
78 | 341 g_container.Get().ResetForTesting(); |
79 TEST_F(TimeFormatTest, TimeRemainingLong) { | 342 TestStrings(); |
80 const TimeDelta one_day(TimeDelta::FromDays(1)); | 343 formatter_force_fallback = false; |
81 const TimeDelta one_hour(TimeDelta::FromHours(1)); | 344 g_container.Get().ResetForTesting(); |
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)); | |
86 | |
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, | |
95 "1 minute left"); | |
96 TestRemainingLong(one_min + 30 * one_second, "2 minutes left"); | |
97 TestRemainingLong(59 * one_min + 30 * one_second - one_millisecond, | |
98 "59 minutes left"); | |
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, | |
103 "23 hours left"); | |
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"); | |
107 } | 345 } |
108 | 346 |
109 // crbug.com/159388: This test fails when daylight savings time ends. | 347 // crbug.com/159388: This test fails when daylight savings time ends. |
110 TEST_F(TimeFormatTest, RelativeDate) { | 348 TEST_F(TimeFormatTest, RelativeDate) { |
111 base::Time now = base::Time::Now(); | 349 base::Time now = base::Time::Now(); |
112 base::string16 today_str = TimeFormat::RelativeDate(now, NULL); | 350 base::string16 today_str = TimeFormat::RelativeDate(now, NULL); |
113 EXPECT_EQ(ASCIIToUTF16("Today"), today_str); | 351 EXPECT_EQ(ASCIIToUTF16("Today"), today_str); |
114 | 352 |
115 base::Time yesterday = now - TimeDelta::FromDays(1); | 353 base::Time yesterday = now - TimeDelta::FromDays(1); |
116 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL); | 354 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL); |
117 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str); | 355 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str); |
118 | 356 |
119 base::Time two_days_ago = now - TimeDelta::FromDays(2); | 357 base::Time two_days_ago = now - TimeDelta::FromDays(2); |
120 base::string16 two_days_ago_str = | 358 base::string16 two_days_ago_str = |
121 TimeFormat::RelativeDate(two_days_ago, NULL); | 359 TimeFormat::RelativeDate(two_days_ago, NULL); |
122 EXPECT_TRUE(two_days_ago_str.empty()); | 360 EXPECT_TRUE(two_days_ago_str.empty()); |
123 | 361 |
124 base::Time a_week_ago = now - TimeDelta::FromDays(7); | 362 base::Time a_week_ago = now - TimeDelta::FromDays(7); |
125 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL); | 363 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL); |
126 EXPECT_TRUE(a_week_ago_str.empty()); | 364 EXPECT_TRUE(a_week_ago_str.empty()); |
127 } | 365 } |
128 | 366 |
129 } // namespace | 367 } // namespace |
130 } // namespace ui | 368 } // namespace ui |
OLD | NEW |