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