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