time_formatting_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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 "base/i18n/time_formatting.h" 6 7#include "base/i18n/rtl.h" 8#include "base/strings/utf_string_conversions.h" 9#include "base/time/time.h" 10#include "testing/gtest/include/gtest/gtest.h" 11#include "third_party/icu/source/common/unicode/uversion.h" 12 13namespace base { 14namespace { 15 16const Time::Exploded kTestDateTimeExploded = { 17 2011, 4, 6, 30, // Sat, Apr 30, 2011 18 15, 42, 7, 0 // 15:42:07.000 19}; 20 21TEST(TimeFormattingTest, TimeFormatTimeOfDayDefault12h) { 22 // Test for a locale defaulted to 12h clock. 23 // As an instance, we use third_party/icu/source/data/locales/en.txt. 24 i18n::SetICUDefaultLocale("en_US"); 25 26 Time time(Time::FromLocalExploded(kTestDateTimeExploded)); 27 string16 clock24h(ASCIIToUTF16("15:42")); 28 string16 clock12h_pm(ASCIIToUTF16("3:42 PM")); 29 string16 clock12h(ASCIIToUTF16("3:42")); 30 31 // The default is 12h clock. 32 EXPECT_EQ(clock12h_pm, TimeFormatTimeOfDay(time)); 33 EXPECT_EQ(k12HourClock, GetHourClockType()); 34 // k{Keep,Drop}AmPm should not affect for 24h clock. 35 EXPECT_EQ(clock24h, 36 TimeFormatTimeOfDayWithHourClockType(time, 37 k24HourClock, 38 kKeepAmPm)); 39 EXPECT_EQ(clock24h, 40 TimeFormatTimeOfDayWithHourClockType(time, 41 k24HourClock, 42 kDropAmPm)); 43 // k{Keep,Drop}AmPm affects for 12h clock. 44 EXPECT_EQ(clock12h_pm, 45 TimeFormatTimeOfDayWithHourClockType(time, 46 k12HourClock, 47 kKeepAmPm)); 48 EXPECT_EQ(clock12h, 49 TimeFormatTimeOfDayWithHourClockType(time, 50 k12HourClock, 51 kDropAmPm)); 52} 53 54TEST(TimeFormattingTest, TimeFormatTimeOfDayDefault24h) { 55 // Test for a locale defaulted to 24h clock. 56 // As an instance, we use third_party/icu/source/data/locales/en_GB.txt. 57 i18n::SetICUDefaultLocale("en_GB"); 58 59 Time time(Time::FromLocalExploded(kTestDateTimeExploded)); 60 string16 clock24h(ASCIIToUTF16("15:42")); 61#if U_ICU_VERSION_MAJOR_NUM >= 50 62 string16 clock12h_pm(ASCIIToUTF16("3:42 pm")); 63#else 64 // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50. 65 string16 clock12h_pm(ASCIIToUTF16("3:42 PM")); 66#endif 67 string16 clock12h(ASCIIToUTF16("3:42")); 68 69 // The default is 24h clock. 70 EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time)); 71 EXPECT_EQ(k24HourClock, GetHourClockType()); 72 // k{Keep,Drop}AmPm should not affect for 24h clock. 73 EXPECT_EQ(clock24h, 74 TimeFormatTimeOfDayWithHourClockType(time, 75 k24HourClock, 76 kKeepAmPm)); 77 EXPECT_EQ(clock24h, 78 TimeFormatTimeOfDayWithHourClockType(time, 79 k24HourClock, 80 kDropAmPm)); 81 // k{Keep,Drop}AmPm affects for 12h clock. 82 EXPECT_EQ(clock12h_pm, 83 TimeFormatTimeOfDayWithHourClockType(time, 84 k12HourClock, 85 kKeepAmPm)); 86 EXPECT_EQ(clock12h, 87 TimeFormatTimeOfDayWithHourClockType(time, 88 k12HourClock, 89 kDropAmPm)); 90} 91 92TEST(TimeFormattingTest, TimeFormatTimeOfDayJP) { 93 // Test for a locale that uses different mark than "AM" and "PM". 94 // As an instance, we use third_party/icu/source/data/locales/ja.txt. 95 i18n::SetICUDefaultLocale("ja_JP"); 96 97 Time time(Time::FromLocalExploded(kTestDateTimeExploded)); 98 string16 clock24h(ASCIIToUTF16("15:42")); 99 string16 clock12h_pm(WideToUTF16(L"\x5348\x5f8c" L"3:42")); 100 string16 clock12h(ASCIIToUTF16("3:42")); 101 102 // The default is 24h clock. 103 EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time)); 104 EXPECT_EQ(k24HourClock, GetHourClockType()); 105 // k{Keep,Drop}AmPm should not affect for 24h clock. 106 EXPECT_EQ(clock24h, 107 TimeFormatTimeOfDayWithHourClockType(time, 108 k24HourClock, 109 kKeepAmPm)); 110 EXPECT_EQ(clock24h, 111 TimeFormatTimeOfDayWithHourClockType(time, 112 k24HourClock, 113 kDropAmPm)); 114 // k{Keep,Drop}AmPm affects for 12h clock. 115 EXPECT_EQ(clock12h_pm, 116 TimeFormatTimeOfDayWithHourClockType(time, 117 k12HourClock, 118 kKeepAmPm)); 119 EXPECT_EQ(clock12h, 120 TimeFormatTimeOfDayWithHourClockType(time, 121 k12HourClock, 122 kDropAmPm)); 123} 124 125TEST(TimeFormattingTest, TimeFormatDateUS) { 126 // See third_party/icu/source/data/locales/en.txt. 127 // The date patterns are "EEEE, MMMM d, y", "MMM d, y", and "M/d/yy". 128 i18n::SetICUDefaultLocale("en_US"); 129 130 Time time(Time::FromLocalExploded(kTestDateTimeExploded)); 131 132 EXPECT_EQ(ASCIIToUTF16("Apr 30, 2011"), TimeFormatShortDate(time)); 133 EXPECT_EQ(ASCIIToUTF16("4/30/11"), TimeFormatShortDateNumeric(time)); 134 135#if U_ICU_VERSION_MAJOR_NUM >= 50 136 EXPECT_EQ(ASCIIToUTF16("4/30/11, 3:42:07 PM"), 137 TimeFormatShortDateAndTime(time)); 138#else 139 // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50. 140 EXPECT_EQ(ASCIIToUTF16("4/30/11 3:42:07 PM"), 141 TimeFormatShortDateAndTime(time)); 142#endif 143 144#if U_ICU_VERSION_MAJOR_NUM >= 50 145 EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 at 3:42:07 PM"), 146 TimeFormatFriendlyDateAndTime(time)); 147#else 148 // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50. 149 EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 3:42:07 PM"), 150 TimeFormatFriendlyDateAndTime(time)); 151#endif 152 153 EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011"), 154 TimeFormatFriendlyDate(time)); 155} 156 157TEST(TimeFormattingTest, TimeFormatDateGB) { 158 // See third_party/icu/source/data/locales/en_GB.txt. 159 // The date patterns are "EEEE, d MMMM y", "d MMM y", and "dd/MM/yyyy". 160 i18n::SetICUDefaultLocale("en_GB"); 161 162 Time time(Time::FromLocalExploded(kTestDateTimeExploded)); 163 164 EXPECT_EQ(ASCIIToUTF16("30 Apr 2011"), TimeFormatShortDate(time)); 165 EXPECT_EQ(ASCIIToUTF16("30/04/2011"), TimeFormatShortDateNumeric(time)); 166 EXPECT_EQ(ASCIIToUTF16("30/04/2011 15:42:07"), 167 TimeFormatShortDateAndTime(time)); 168 EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011 15:42:07"), 169 TimeFormatFriendlyDateAndTime(time)); 170 EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011"), 171 TimeFormatFriendlyDate(time)); 172} 173 174} // namespace 175} // namespace base 176