Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: ui/base/l10n/time_format_unittest.cc

Issue 147443007: Add support for localized time strings with two units, eg. "2 hours 17 minutes" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Tony's comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/base/l10n/time_format.cc ('k') | ui/base/strings/ui_strings.grd » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
OLDNEW
« no previous file with comments | « ui/base/l10n/time_format.cc ('k') | ui/base/strings/ui_strings.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698