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.
4
5 #include "ui/base/l10n/time_format.h"
6
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/l10n/formatter.h"
13
14 using base::ASCIIToUTF16;
15
16 namespace ui {
17 namespace {
18
19 using base::TimeDelta;
20
21 class TimeFormatTest : public ::testing::Test {
22 public:
TimeFormatTest()23 TimeFormatTest()
24 : delta_0s_(TimeDelta::FromSeconds(0)),
25 delta_1ms_(TimeDelta::FromMilliseconds(1)),
26 delta_499ms_(TimeDelta::FromMilliseconds(499)),
27 delta_500ms_(TimeDelta::FromMilliseconds(500)),
28 delta_999ms_(TimeDelta::FromMilliseconds(999)),
29 delta_1s_(TimeDelta::FromSeconds(1)),
30 delta_1s499ms_(delta_1s_ + delta_499ms_),
31 delta_1s500ms_(delta_1s_ + delta_500ms_),
32 delta_2s_(TimeDelta::FromSeconds(2)),
33 delta_29s_(TimeDelta::FromSeconds(29)),
34 delta_30s_(TimeDelta::FromSeconds(30)),
35 delta_59s_(TimeDelta::FromSeconds(59)),
36 delta_59s499ms_(delta_59s_ + delta_499ms_),
37 delta_59s500ms_(delta_59s_ + delta_500ms_),
38 delta_1m_(TimeDelta::FromMinutes(1)),
39 delta_1m2s_(delta_1m_ + delta_2s_),
40 delta_1m29s999ms_(delta_1m_ + delta_29s_ + delta_999ms_),
41 delta_1m30s_(delta_1m_ + delta_30s_),
42 delta_2m_(TimeDelta::FromMinutes(2)),
43 delta_2m1s_(delta_2m_ + delta_1s_),
44 delta_29m_(TimeDelta::FromMinutes(29)),
45 delta_30m_(TimeDelta::FromMinutes(30)),
46 delta_59m_(TimeDelta::FromMinutes(59)),
47 delta_59m29s999ms_(delta_59m_ + delta_29s_ + delta_999ms_),
48 delta_59m30s_(delta_59m_ + delta_30s_),
49 delta_59m59s499ms_(delta_59m_ + delta_59s_ + delta_499ms_),
50 delta_59m59s500ms_(delta_59m_ + delta_59s_ + delta_500ms_),
51 delta_1h_(TimeDelta::FromHours(1)),
52 delta_1h2m_(delta_1h_ + delta_2m_),
53 delta_1h29m59s999ms_(delta_1h_ + delta_29m_ + delta_59s_ +
54 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_(
70 delta_1d_ + delta_11h_ + delta_59m_ + delta_29s_ + delta_999ms_),
71 delta_1d12h_(delta_1d_ + delta_12h_),
72 delta_2d_(TimeDelta::FromDays(2)),
73 delta_2d1h_(delta_2d_ + delta_1h_),
74 delta_1y_(delta_1d_ * 365),
75 delta_2y_(delta_1y_ * 2),
76 delta_1mo_(delta_1y_ / 12),
77 delta_2mo_(delta_1mo_ * 2),
78 delta_1mo10d_(delta_1mo_ + delta_1d_ * 10) {}
79
80 protected:
TestStrings()81 void TestStrings() {
82 // Test English strings (simple, singular).
83 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple(
84 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s_));
85 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple(
86 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1m_));
87 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple(
88 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1h_));
89 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple(
90 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1d_));
91 EXPECT_EQ(ASCIIToUTF16("1 second"), TimeFormat::Simple(
92 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1s_));
93 EXPECT_EQ(ASCIIToUTF16("1 minute"), TimeFormat::Simple(
94 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1m_));
95 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple(
96 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1h_));
97 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple(
98 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_1d_));
99 EXPECT_EQ(ASCIIToUTF16("1 month"),
100 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_DURATION,
101 TimeFormat::LENGTH_LONG,
102 delta_1mo_, true));
103 EXPECT_EQ(ASCIIToUTF16("1 month"),
104 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_DURATION,
105 TimeFormat::LENGTH_LONG,
106 delta_1mo10d_, true));
107 EXPECT_EQ(ASCIIToUTF16("1 year"),
108 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_DURATION,
109 TimeFormat::LENGTH_LONG,
110 delta_1y_, true));
111 EXPECT_EQ(ASCIIToUTF16("1 sec left"), TimeFormat::Simple(
112 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1s_));
113 EXPECT_EQ(ASCIIToUTF16("1 min left"), TimeFormat::Simple(
114 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1m_));
115 EXPECT_EQ(ASCIIToUTF16("1 hour left"), TimeFormat::Simple(
116 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1h_));
117 EXPECT_EQ(ASCIIToUTF16("1 day left"), TimeFormat::Simple(
118 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_1d_));
119 EXPECT_EQ(ASCIIToUTF16("1 second left"), TimeFormat::Simple(
120 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1s_));
121 EXPECT_EQ(ASCIIToUTF16("1 minute left"), TimeFormat::Simple(
122 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1m_));
123 EXPECT_EQ(ASCIIToUTF16("1 hour left"), TimeFormat::Simple(
124 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1h_));
125 EXPECT_EQ(ASCIIToUTF16("1 day left"), TimeFormat::Simple(
126 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_1d_));
127 EXPECT_EQ(ASCIIToUTF16("1 month left"),
128 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_REMAINING,
129 TimeFormat::LENGTH_LONG,
130 delta_1mo_, true));
131 EXPECT_EQ(ASCIIToUTF16("1 month left"),
132 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_REMAINING,
133 TimeFormat::LENGTH_LONG,
134 delta_1mo10d_, true));
135 EXPECT_EQ(ASCIIToUTF16("1 year left"),
136 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_REMAINING,
137 TimeFormat::LENGTH_LONG,
138 delta_1y_, true));
139 EXPECT_EQ(ASCIIToUTF16("1 sec ago"), TimeFormat::Simple(
140 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1s_));
141 EXPECT_EQ(ASCIIToUTF16("1 min ago"), TimeFormat::Simple(
142 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1m_));
143 EXPECT_EQ(ASCIIToUTF16("1 hour ago"), TimeFormat::Simple(
144 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1h_));
145 EXPECT_EQ(ASCIIToUTF16("1 day ago"), TimeFormat::Simple(
146 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_1d_));
147 EXPECT_EQ(ASCIIToUTF16("1 month ago"),
148 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_ELAPSED,
149 TimeFormat::LENGTH_LONG,
150 delta_1mo_, true));
151 EXPECT_EQ(ASCIIToUTF16("1 month ago"),
152 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_ELAPSED,
153 TimeFormat::LENGTH_LONG,
154 delta_1mo10d_, true));
155 EXPECT_EQ(ASCIIToUTF16("1 year ago"),
156 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_ELAPSED,
157 TimeFormat::LENGTH_LONG,
158 delta_1y_, true));
159 EXPECT_EQ(ASCIIToUTF16("1 second ago"),
160 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
161 TimeFormat::LENGTH_LONG, delta_1s_));
162 EXPECT_EQ(ASCIIToUTF16("1 minute ago"),
163 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
164 TimeFormat::LENGTH_LONG, delta_1m_));
165 EXPECT_EQ(ASCIIToUTF16("1 hour ago"),
166 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
167 TimeFormat::LENGTH_LONG, delta_1h_));
168 EXPECT_EQ(ASCIIToUTF16("1 day ago"),
169 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
170 TimeFormat::LENGTH_LONG, delta_1d_));
171
172 // Test English strings (simple, plural).
173 EXPECT_EQ(ASCIIToUTF16("2 secs"), TimeFormat::Simple(
174 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2s_));
175 EXPECT_EQ(ASCIIToUTF16("2 mins"), TimeFormat::Simple(
176 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2m_));
177 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple(
178 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2h_));
179 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple(
180 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_2d_));
181 EXPECT_EQ(ASCIIToUTF16("2 seconds"), TimeFormat::Simple(
182 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2s_));
183 EXPECT_EQ(ASCIIToUTF16("2 minutes"), TimeFormat::Simple(
184 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2m_));
185 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple(
186 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2h_));
187 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple(
188 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, delta_2d_));
189 EXPECT_EQ(ASCIIToUTF16("30 days"),
190 TimeFormat::Simple(TimeFormat::FORMAT_DURATION,
191 TimeFormat::LENGTH_LONG, delta_1mo_));
192 EXPECT_EQ(ASCIIToUTF16("365 days"),
193 TimeFormat::Simple(TimeFormat::FORMAT_DURATION,
194 TimeFormat::LENGTH_LONG, delta_1y_));
195 EXPECT_EQ(ASCIIToUTF16("2 months"),
196 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_DURATION,
197 TimeFormat::LENGTH_LONG,
198 delta_2mo_, true));
199 EXPECT_EQ(ASCIIToUTF16("2 years"),
200 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_DURATION,
201 TimeFormat::LENGTH_LONG,
202 delta_2y_, true));
203 EXPECT_EQ(ASCIIToUTF16("2 secs left"), TimeFormat::Simple(
204 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2s_));
205 EXPECT_EQ(ASCIIToUTF16("2 mins left"), TimeFormat::Simple(
206 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2m_));
207 EXPECT_EQ(ASCIIToUTF16("2 hours left"), TimeFormat::Simple(
208 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2h_));
209 EXPECT_EQ(ASCIIToUTF16("2 days left"), TimeFormat::Simple(
210 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_SHORT, delta_2d_));
211 EXPECT_EQ(ASCIIToUTF16("2 seconds left"), TimeFormat::Simple(
212 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2s_));
213 EXPECT_EQ(ASCIIToUTF16("2 minutes left"), TimeFormat::Simple(
214 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2m_));
215 EXPECT_EQ(ASCIIToUTF16("2 hours left"), TimeFormat::Simple(
216 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2h_));
217 EXPECT_EQ(ASCIIToUTF16("2 days left"), TimeFormat::Simple(
218 TimeFormat::FORMAT_REMAINING, TimeFormat::LENGTH_LONG, delta_2d_));
219 EXPECT_EQ(ASCIIToUTF16("30 days left"),
220 TimeFormat::Simple(TimeFormat::FORMAT_REMAINING,
221 TimeFormat::LENGTH_LONG, delta_1mo_));
222 EXPECT_EQ(ASCIIToUTF16("365 days left"),
223 TimeFormat::Simple(TimeFormat::FORMAT_REMAINING,
224 TimeFormat::LENGTH_LONG, delta_1y_));
225 EXPECT_EQ(ASCIIToUTF16("2 months left"),
226 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_REMAINING,
227 TimeFormat::LENGTH_LONG,
228 delta_2mo_, true));
229 EXPECT_EQ(ASCIIToUTF16("2 years left"),
230 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_REMAINING,
231 TimeFormat::LENGTH_LONG,
232 delta_2y_, true));
233 EXPECT_EQ(ASCIIToUTF16("2 secs ago"), TimeFormat::Simple(
234 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2s_));
235 EXPECT_EQ(ASCIIToUTF16("2 mins ago"), TimeFormat::Simple(
236 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2m_));
237 EXPECT_EQ(ASCIIToUTF16("2 hours ago"), TimeFormat::Simple(
238 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2h_));
239 EXPECT_EQ(ASCIIToUTF16("2 days ago"), TimeFormat::Simple(
240 TimeFormat::FORMAT_ELAPSED, TimeFormat::LENGTH_SHORT, delta_2d_));
241 EXPECT_EQ(ASCIIToUTF16("2 seconds ago"),
242 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
243 TimeFormat::LENGTH_LONG, delta_2s_));
244 EXPECT_EQ(ASCIIToUTF16("2 minutes ago"),
245 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
246 TimeFormat::LENGTH_LONG, delta_2m_));
247 EXPECT_EQ(ASCIIToUTF16("2 hours ago"),
248 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
249 TimeFormat::LENGTH_SHORT, delta_2h_));
250 EXPECT_EQ(ASCIIToUTF16("2 days ago"),
251 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
252 TimeFormat::LENGTH_SHORT, delta_2d_));
253 EXPECT_EQ(ASCIIToUTF16("30 days ago"),
254 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
255 TimeFormat::LENGTH_LONG, delta_1mo_));
256 EXPECT_EQ(ASCIIToUTF16("365 days ago"),
257 TimeFormat::Simple(TimeFormat::FORMAT_ELAPSED,
258 TimeFormat::LENGTH_LONG, delta_1y_));
259 EXPECT_EQ(ASCIIToUTF16("2 months ago"),
260 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_ELAPSED,
261 TimeFormat::LENGTH_LONG,
262 delta_2mo_, true));
263 EXPECT_EQ(ASCIIToUTF16("2 years ago"),
264 TimeFormat::SimpleWithMonthAndYear(TimeFormat::FORMAT_ELAPSED,
265 TimeFormat::LENGTH_LONG,
266 delta_2y_, true));
267
268 // Test English strings (detailed, singular and plural).
269 EXPECT_EQ(ASCIIToUTF16("1 minute and 2 seconds"), TimeFormat::Detailed(
270 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1m2s_));
271 EXPECT_EQ(ASCIIToUTF16("2 minutes and 1 second"), TimeFormat::Detailed(
272 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2m1s_));
273 EXPECT_EQ(ASCIIToUTF16("1 hour and 2 minutes"), TimeFormat::Detailed(
274 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1h2m_));
275 EXPECT_EQ(ASCIIToUTF16("2 hours and 1 minute"), TimeFormat::Detailed(
276 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2h1m_));
277 EXPECT_EQ(ASCIIToUTF16("1 day and 2 hours"), TimeFormat::Detailed(
278 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_1d2h_));
279 EXPECT_EQ(ASCIIToUTF16("2 days and 1 hour"), TimeFormat::Detailed(
280 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 3, delta_2d1h_));
281 }
282
283 TimeDelta delta_0s_;
284 TimeDelta delta_1ms_;
285 TimeDelta delta_499ms_;
286 TimeDelta delta_500ms_;
287 TimeDelta delta_999ms_;
288 TimeDelta delta_1s_;
289 TimeDelta delta_1s499ms_;
290 TimeDelta delta_1s500ms_;
291 TimeDelta delta_2s_;
292 TimeDelta delta_29s_;
293 TimeDelta delta_30s_;
294 TimeDelta delta_59s_;
295 TimeDelta delta_59s499ms_;
296 TimeDelta delta_59s500ms_;
297 TimeDelta delta_1m_;
298 TimeDelta delta_1m2s_;
299 TimeDelta delta_1m29s999ms_;
300 TimeDelta delta_1m30s_;
301 TimeDelta delta_2m_;
302 TimeDelta delta_2m1s_;
303 TimeDelta delta_29m_;
304 TimeDelta delta_30m_;
305 TimeDelta delta_59m_;
306 TimeDelta delta_59m29s999ms_;
307 TimeDelta delta_59m30s_;
308 TimeDelta delta_59m59s499ms_;
309 TimeDelta delta_59m59s500ms_;
310 TimeDelta delta_1h_;
311 TimeDelta delta_1h2m_;
312 TimeDelta delta_1h29m59s999ms_;
313 TimeDelta delta_1h30m_;
314 TimeDelta delta_2h_;
315 TimeDelta delta_2h1m_;
316 TimeDelta delta_11h_;
317 TimeDelta delta_12h_;
318 TimeDelta delta_23h_;
319 TimeDelta delta_23h29m59s999ms_;
320 TimeDelta delta_23h30m_;
321 TimeDelta delta_23h59m29s999ms_;
322 TimeDelta delta_23h59m30s_;
323 TimeDelta delta_1d_;
324 TimeDelta delta_1d2h_;
325 TimeDelta delta_1d11h59m59s999ms_;
326 TimeDelta delta_1d12h_;
327 TimeDelta delta_2d_;
328 TimeDelta delta_2d1h_;
329 TimeDelta delta_1y_;
330 TimeDelta delta_2y_;
331 TimeDelta delta_1mo_;
332 TimeDelta delta_2mo_;
333 TimeDelta delta_1mo10d_;
334 };
335
TEST_F(TimeFormatTest,SimpleAndDetailedRounding)336 TEST_F(TimeFormatTest, SimpleAndDetailedRounding) {
337 // Test rounding behavior (simple).
338 EXPECT_EQ(ASCIIToUTF16("0 secs"), TimeFormat::Simple(
339 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_0s_));
340 EXPECT_EQ(ASCIIToUTF16("0 secs"), TimeFormat::Simple(
341 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_499ms_));
342 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple(
343 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_500ms_));
344 EXPECT_EQ(ASCIIToUTF16("1 sec"), TimeFormat::Simple(
345 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s499ms_));
346 EXPECT_EQ(ASCIIToUTF16("2 secs"), TimeFormat::Simple(
347 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1s500ms_));
348 EXPECT_EQ(ASCIIToUTF16("59 secs"), TimeFormat::Simple(
349 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59s499ms_));
350 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple(
351 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59s500ms_));
352 EXPECT_EQ(ASCIIToUTF16("1 min"), TimeFormat::Simple(
353 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT,
354 delta_1m29s999ms_));
355 EXPECT_EQ(ASCIIToUTF16("2 mins"), TimeFormat::Simple(
356 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1m30s_));
357 EXPECT_EQ(ASCIIToUTF16("59 mins"), TimeFormat::Simple(
358 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT,
359 delta_59m29s999ms_));
360 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple(
361 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_59m30s_));
362 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Simple(
363 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT,
364 delta_1h29m59s999ms_));
365 EXPECT_EQ(ASCIIToUTF16("2 hours"), TimeFormat::Simple(
366 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1h30m_));
367 EXPECT_EQ(ASCIIToUTF16("23 hours"), TimeFormat::Simple(
368 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT,
369 delta_23h29m59s999ms_));
370 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple(
371 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_23h30m_));
372 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Simple(
373 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT,
374 delta_1d11h59m59s999ms_));
375 EXPECT_EQ(ASCIIToUTF16("2 days"), TimeFormat::Simple(
376 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_SHORT, delta_1d12h_));
377
378 // Test rounding behavior (detailed).
379 EXPECT_EQ(ASCIIToUTF16("59 seconds"), TimeFormat::Detailed(
380 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 100,
381 delta_59s499ms_));
382 EXPECT_EQ(ASCIIToUTF16("1 minute and 0 seconds"), TimeFormat::Detailed(
383 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2,
384 delta_59s500ms_));
385 EXPECT_EQ(ASCIIToUTF16("1 minute"), TimeFormat::Detailed(
386 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1,
387 delta_59s500ms_));
388 EXPECT_EQ(ASCIIToUTF16("59 minutes and 59 seconds"), TimeFormat::Detailed(
389 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 60,
390 delta_59m59s499ms_));
391 EXPECT_EQ(ASCIIToUTF16("1 hour and 0 minutes"), TimeFormat::Detailed(
392 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 59,
393 delta_59m59s499ms_));
394 EXPECT_EQ(ASCIIToUTF16("1 hour and 0 minutes"), TimeFormat::Detailed(
395 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2,
396 delta_59m59s499ms_));
397 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Detailed(
398 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1,
399 delta_59m59s499ms_));
400 EXPECT_EQ(ASCIIToUTF16("1 hour"), TimeFormat::Detailed(
401 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1,
402 delta_59m59s500ms_));
403 EXPECT_EQ(ASCIIToUTF16("1 hour and 0 minutes"), TimeFormat::Detailed(
404 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2,
405 delta_59m59s500ms_));
406 EXPECT_EQ(ASCIIToUTF16("23 hours and 59 minutes"), TimeFormat::Detailed(
407 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 24,
408 delta_23h59m29s999ms_));
409 EXPECT_EQ(ASCIIToUTF16("1 day and 0 hours"), TimeFormat::Detailed(
410 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 23,
411 delta_23h59m29s999ms_));
412 EXPECT_EQ(ASCIIToUTF16("1 day and 0 hours"), TimeFormat::Detailed(
413 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2,
414 delta_23h59m29s999ms_));
415 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Detailed(
416 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1,
417 delta_23h59m29s999ms_));
418 EXPECT_EQ(ASCIIToUTF16("1 day"), TimeFormat::Detailed(
419 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 1,
420 delta_23h59m30s_));
421 EXPECT_EQ(ASCIIToUTF16("1 day and 0 hours"), TimeFormat::Detailed(
422 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, 2,
423 delta_23h59m30s_));
424 EXPECT_EQ(ASCIIToUTF16("1 day and 0 hours"), TimeFormat::Detailed(
425 TimeFormat::FORMAT_DURATION, TimeFormat::LENGTH_LONG, -1,
426 delta_23h59m30s_));
427 }
428
429 // Test strings in default code path.
TEST_F(TimeFormatTest,SimpleAndDetailedStrings)430 TEST_F(TimeFormatTest, SimpleAndDetailedStrings) {
431 TestStrings();
432 }
433
434 // Test strings in fallback path in case of translator error.
TEST_F(TimeFormatTest,SimpleAndDetailedStringFallback)435 TEST_F(TimeFormatTest, SimpleAndDetailedStringFallback) {
436 formatter_force_fallback = true;
437 g_container.Get().ResetForTesting();
438 TestStrings();
439 formatter_force_fallback = false;
440 g_container.Get().ResetForTesting();
441 }
442
443 // crbug.com/159388: This test fails when daylight savings time ends.
TEST_F(TimeFormatTest,RelativeDate)444 TEST_F(TimeFormatTest, RelativeDate) {
445 base::Time now = base::Time::Now();
446 base::string16 today_str = TimeFormat::RelativeDate(now, NULL);
447 EXPECT_EQ(ASCIIToUTF16("Today"), today_str);
448
449 base::Time yesterday = now - TimeDelta::FromDays(1);
450 base::string16 yesterday_str = TimeFormat::RelativeDate(yesterday, NULL);
451 EXPECT_EQ(ASCIIToUTF16("Yesterday"), yesterday_str);
452
453 base::Time two_days_ago = now - TimeDelta::FromDays(2);
454 base::string16 two_days_ago_str =
455 TimeFormat::RelativeDate(two_days_ago, NULL);
456 EXPECT_TRUE(two_days_ago_str.empty());
457
458 base::Time a_week_ago = now - TimeDelta::FromDays(7);
459 base::string16 a_week_ago_str = TimeFormat::RelativeDate(a_week_ago, NULL);
460 EXPECT_TRUE(a_week_ago_str.empty());
461 }
462
463 } // namespace
464 } // namespace ui
465