time_formatting_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12f1efd639c8659582d0df2b8f927a018b057037fJeffrey Yasskin// Copyright (c) 2011 The Chromium Authors. All rights reserved.
22bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson// Use of this source code is governed by a BSD-style license that can be
32bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson// found in the LICENSE file.
42bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson
52bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson#include "base/i18n/time_formatting.h"
62bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson
72bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson#include "base/i18n/rtl.h"
82bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson#include "base/time.h"
95217007006e91fa4bbfe88fde5149f5db293b247Owen Anderson#include "base/utf_string_conversions.h"
105217007006e91fa4bbfe88fde5149f5db293b247Owen Anderson#include "testing/gtest/include/gtest/gtest.h"
115217007006e91fa4bbfe88fde5149f5db293b247Owen Anderson#include "third_party/icu/public/common/unicode/uversion.h"
125217007006e91fa4bbfe88fde5149f5db293b247Owen Anderson
135217007006e91fa4bbfe88fde5149f5db293b247Owen Andersonnamespace base {
142bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Andersonnamespace {
152bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson
162bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Andersonconst Time::Exploded kTestDateTimeExploded = {
172bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson  2011, 4, 6, 30, // Sat, Apr 30, 2011
181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner  15, 42, 7, 0    // 15:42:07.000
1948b2f3e4850cd27d54224cd42da8a160d6b95984Owen Anderson};
20c34ebf65af0139eaf5cb0969fabcd32c0b6e1710Owen Anderson
21eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen AndersonTEST(TimeFormattingTest, TimeFormatTimeOfDayDefault12h) {
22f53c371983908f02678b0e12c5d18466dcc70ffdOwen Anderson  // Test for a locale defaulted to 12h clock.
23b4cc66d7b71357d379257930f96929e26697805dJeffrey Yasskin  // As an instance, we use third_party/icu/source/data/locales/en.txt.
24081134741b40b342fb2f85722c9cea5d412489a8Chris Lattner  i18n::SetICUDefaultLocale("en_US");
25914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson
26001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  Time time(Time::FromLocalExploded(kTestDateTimeExploded));
272a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad  string16 clock24h(ASCIIToUTF16("15:42"));
28001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  string16 clock12h_pm(ASCIIToUTF16("3:42 PM"));
29ce032b483ca96093b84f69178cdb2d047e124332Owen Anderson  string16 clock12h(ASCIIToUTF16("3:42"));
30ad715f86c90b06cc4ab9e1336d1bc3bf13ecb16dJeffrey Yasskin
31aad3fb7362aff151e97ad457005ea3f2872fe868Owen Anderson  // The default is 12h clock.
32006c77df8cc7f6a9dac575600b797b8ba32b29ebOwen Anderson  EXPECT_EQ(clock12h_pm, TimeFormatTimeOfDay(time));
3316e298f98024bcff5c7219a96cac216114c30dadOwen Anderson  EXPECT_EQ(k12HourClock, GetHourClockType());
342bc29dc0bcb3c1441477a062e4a5cffff175c8caOwen Anderson  // k{Keep,Drop}AmPm should not affect for 24h clock.
35eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  EXPECT_EQ(clock24h,
36001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
37914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 k24HourClock,
3812ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramer                                                 kKeepAmPm));
39001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  EXPECT_EQ(clock24h,
40ce032b483ca96093b84f69178cdb2d047e124332Owen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
41001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 k24HourClock,
42001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 kDropAmPm));
43001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // k{Keep,Drop}AmPm affects for 12h clock.
44001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  EXPECT_EQ(clock12h_pm,
45001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
46001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 k12HourClock,
47001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 kKeepAmPm));
48001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  EXPECT_EQ(clock12h,
49001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
50001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 k12HourClock,
51001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson                                                 kDropAmPm));
52001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson}
53001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson
54001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen AndersonTEST(TimeFormattingTest, TimeFormatTimeOfDayDefault24h) {
55001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // Test for a locale defaulted to 24h clock.
56001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // As an instance, we use third_party/icu/source/data/locales/en_GB.txt.
57001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  i18n::SetICUDefaultLocale("en_GB");
58001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson
59001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  Time time(Time::FromLocalExploded(kTestDateTimeExploded));
60001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  string16 clock24h(ASCIIToUTF16("15:42"));
61001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson#if U_ICU_VERSION_MAJOR_NUM >= 50
62001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  string16 clock12h_pm(ASCIIToUTF16("3:42 pm"));
63001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson#else
64001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
65001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  string16 clock12h_pm(ASCIIToUTF16("3:42 PM"));
66914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson#endif
67914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  string16 clock12h(ASCIIToUTF16("3:42"));
68914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson
69914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  // The default is 24h clock.
70914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time));
71914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(k24HourClock, GetHourClockType());
72914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  // k{Keep,Drop}AmPm should not affect for 24h clock.
73914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(clock24h,
74914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
75914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 k24HourClock,
76914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 kKeepAmPm));
77914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(clock24h,
78914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
79914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 k24HourClock,
80914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 kDropAmPm));
81914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  // k{Keep,Drop}AmPm affects for 12h clock.
82914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(clock12h_pm,
83914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
84914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 k12HourClock,
85914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 kKeepAmPm));
86914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  EXPECT_EQ(clock12h,
87914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
88914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 k12HourClock,
89914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson                                                 kDropAmPm));
90914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson}
91914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson
92b227925fa313428045f554187b0136d084d723f6Chris LattnerTEST(TimeFormattingTest, TimeFormatTimeOfDayJP) {
93b227925fa313428045f554187b0136d084d723f6Chris Lattner  // Test for a locale that uses different mark than "AM" and "PM".
94b227925fa313428045f554187b0136d084d723f6Chris Lattner  // As an instance, we use third_party/icu/source/data/locales/ja.txt.
95b227925fa313428045f554187b0136d084d723f6Chris Lattner  i18n::SetICUDefaultLocale("ja_JP");
96b227925fa313428045f554187b0136d084d723f6Chris Lattner
97b227925fa313428045f554187b0136d084d723f6Chris Lattner  Time time(Time::FromLocalExploded(kTestDateTimeExploded));
98b227925fa313428045f554187b0136d084d723f6Chris Lattner  string16 clock24h(ASCIIToUTF16("15:42"));
99b227925fa313428045f554187b0136d084d723f6Chris Lattner  string16 clock12h_pm(WideToUTF16(L"\x5348\x5f8c" L"3:42"));
100b227925fa313428045f554187b0136d084d723f6Chris Lattner  string16 clock12h(ASCIIToUTF16("3:42"));
101b227925fa313428045f554187b0136d084d723f6Chris Lattner
102b227925fa313428045f554187b0136d084d723f6Chris Lattner  // The default is 24h clock.
103b227925fa313428045f554187b0136d084d723f6Chris Lattner  EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time));
104b227925fa313428045f554187b0136d084d723f6Chris Lattner  EXPECT_EQ(k24HourClock, GetHourClockType());
105b227925fa313428045f554187b0136d084d723f6Chris Lattner  // k{Keep,Drop}AmPm should not affect for 24h clock.
106b227925fa313428045f554187b0136d084d723f6Chris Lattner  EXPECT_EQ(clock24h,
107b227925fa313428045f554187b0136d084d723f6Chris Lattner            TimeFormatTimeOfDayWithHourClockType(time,
108b227925fa313428045f554187b0136d084d723f6Chris Lattner                                                 k24HourClock,
109b227925fa313428045f554187b0136d084d723f6Chris Lattner                                                 kKeepAmPm));
110b227925fa313428045f554187b0136d084d723f6Chris Lattner  EXPECT_EQ(clock24h,
111b227925fa313428045f554187b0136d084d723f6Chris Lattner            TimeFormatTimeOfDayWithHourClockType(time,
112b227925fa313428045f554187b0136d084d723f6Chris Lattner                                                 k24HourClock,
113b227925fa313428045f554187b0136d084d723f6Chris Lattner                                                 kDropAmPm));
114b227925fa313428045f554187b0136d084d723f6Chris Lattner  // k{Keep,Drop}AmPm affects for 12h clock.
11512ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramer  EXPECT_EQ(clock12h_pm,
11612ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramer            TimeFormatTimeOfDayWithHourClockType(time,
11730268be89df6444f5ffb585439b3fbfec9055197Owen Anderson                                                 k12HourClock,
11830268be89df6444f5ffb585439b3fbfec9055197Owen Anderson                                                 kKeepAmPm));
11930268be89df6444f5ffb585439b3fbfec9055197Owen Anderson  EXPECT_EQ(clock12h,
12030268be89df6444f5ffb585439b3fbfec9055197Owen Anderson            TimeFormatTimeOfDayWithHourClockType(time,
1214afa12890f679034e9741a687a6ce33f2846f129Chris Lattner                                                 k12HourClock,
1224afa12890f679034e9741a687a6ce33f2846f129Chris Lattner                                                 kDropAmPm));
12342a4ee0a35b4672311c1b988bd883167de9f88cdChris Lattner}
124001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson
12548b2f3e4850cd27d54224cd42da8a160d6b95984Owen AndersonTEST(TimeFormattingTest, TimeFormatDateUS) {
126001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // See third_party/icu/source/data/locales/en.txt.
127001dbfebcbbded8c8e74b19e838b50da2b6c6fb5Owen Anderson  // The date patterns are "EEEE, MMMM d, y", "MMM d, y", and "M/d/yy".
128914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  i18n::SetICUDefaultLocale("en_US");
12948b2f3e4850cd27d54224cd42da8a160d6b95984Owen Anderson
130914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson  Time time(Time::FromLocalExploded(kTestDateTimeExploded));
131914e50c841bbc248ab94144c11813b5785b1292dOwen Anderson
132aad3fb7362aff151e97ad457005ea3f2872fe868Owen Anderson  EXPECT_EQ(ASCIIToUTF16("Apr 30, 2011"), TimeFormatShortDate(time));
133aad3fb7362aff151e97ad457005ea3f2872fe868Owen Anderson  EXPECT_EQ(ASCIIToUTF16("4/30/11"), TimeFormatShortDateNumeric(time));
1345f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel
1356f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin#if U_ICU_VERSION_MAJOR_NUM >= 50
1366f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin  EXPECT_EQ(ASCIIToUTF16("4/30/11, 3:42:07 PM"),
1376f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin            TimeFormatShortDateAndTime(time));
1386f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin#else
1396f555ca2cd0bba50542adcbb131f541ae70d34cdJeffrey Yasskin  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
1405f4ac848d94b0a92e19ac7f2b3d0284d7d323173Devang Patel  EXPECT_EQ(ASCIIToUTF16("4/30/11 3:42:07 PM"),
1412a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad            TimeFormatShortDateAndTime(time));
1420631fce85050f8f633e5fd032875d9151e0db4daOwen Anderson#endif
1432a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad
1442a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad#if U_ICU_VERSION_MAJOR_NUM >= 50
145eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 at 3:42:07 PM"),
14616e298f98024bcff5c7219a96cac216114c30dadOwen Anderson            TimeFormatFriendlyDateAndTime(time));
1472a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad#else
1482a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
149eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 3:42:07 PM"),
150006c77df8cc7f6a9dac575600b797b8ba32b29ebOwen Anderson            TimeFormatFriendlyDateAndTime(time));
1512a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad#endif
1522a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad
153eed707b1e6097aac2bb6b3d47271f6300ace7f2eOwen Anderson  EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011"),
1545bd68393ed87bcedc53f5998f1af9c906f5a1b4eOwen Anderson            TimeFormatFriendlyDate(time));
1552a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad}
1562a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad
1572a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay FoadTEST(TimeFormattingTest, TimeFormatDateGB) {
1587e3142b0126abc86dc4da350e8b84b001c3eeddeOwen Anderson  // See third_party/icu/source/data/locales/en_GB.txt.
1592ee11eccdde14c95c78773be76b02bb5fd09d7eeChris Lattner  // The date patterns are "EEEE, d MMMM y", "d MMM y", and "dd/MM/yyyy".
1602a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad  i18n::SetICUDefaultLocale("en_GB");
1612a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad
162bf48a9b6db111fc14a8faef1adefbce5d807aaefJeffrey Yasskin  Time time(Time::FromLocalExploded(kTestDateTimeExploded));
1632a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad
1642a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad  EXPECT_EQ(ASCIIToUTF16("30 Apr 2011"), TimeFormatShortDate(time));
165d03eecd063a18ce0c505a87afcb04db26c035bc9Owen Anderson  EXPECT_EQ(ASCIIToUTF16("30/04/2011"), TimeFormatShortDateNumeric(time));
166f53c371983908f02678b0e12c5d18466dcc70ffdOwen Anderson  EXPECT_EQ(ASCIIToUTF16("30/04/2011 15:42:07"),
167f53c371983908f02678b0e12c5d18466dcc70ffdOwen Anderson            TimeFormatShortDateAndTime(time));
168f53c371983908f02678b0e12c5d18466dcc70ffdOwen Anderson  EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011 15:42:07"),
169c34ebf65af0139eaf5cb0969fabcd32c0b6e1710Owen Anderson            TimeFormatFriendlyDateAndTime(time));
170c34ebf65af0139eaf5cb0969fabcd32c0b6e1710Owen Anderson  EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011"),
17163a03cf58505aa839f721f212cd1518ebf133979Dan Gohman            TimeFormatFriendlyDate(time));
1721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner}
1731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner
1741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner}  // namespace
1759233b15d01ca62445bfc638f782243988c672e01Jeffrey Yasskin}  // namespace base
176ba3ddf391f5149b8fca073adc3cbca361353929cChris Lattner