blob: df0c1ed5ea1ec121b7e7d77b1cfbf1e89e36f088 [file] [log] [blame]
[email protected]60e6c842011-05-30 11:45:431// 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
[email protected]3c8fe0632011-10-07 20:16:317#include "base/i18n/rtl.h"
jww62c6b3e2015-02-08 19:35:228#include "base/memory/scoped_ptr.h"
[email protected]a4ea1f12013-06-07 18:37:079#include "base/strings/utf_string_conversions.h"
[email protected]99084f62013-06-28 00:49:0710#include "base/time/time.h"
[email protected]60e6c842011-05-30 11:45:4311#include "testing/gtest/include/gtest/gtest.h"
[email protected]8bbf6192013-07-18 11:14:0412#include "third_party/icu/source/common/unicode/uversion.h"
jww62c6b3e2015-02-08 19:35:2213#include "third_party/icu/source/i18n/unicode/calendar.h"
14#include "third_party/icu/source/i18n/unicode/timezone.h"
[email protected]60e6c842011-05-30 11:45:4315
[email protected]3c8fe0632011-10-07 20:16:3116namespace base {
[email protected]60e6c842011-05-30 11:45:4317namespace {
18
[email protected]3c8fe0632011-10-07 20:16:3119const Time::Exploded kTestDateTimeExploded = {
[email protected]60e6c842011-05-30 11:45:4320 2011, 4, 6, 30, // Sat, Apr 30, 2011
21 15, 42, 7, 0 // 15:42:07.000
22};
23
jww62c6b3e2015-02-08 19:35:2224base::string16 GetShortTimeZone() {
25 scoped_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
jww62c6b3e2015-02-08 19:35:2226 icu::UnicodeString name;
27 zone->getDisplayName(true, icu::TimeZone::SHORT, name);
28 return base::string16(name.getBuffer(), name.length());
29}
30
[email protected]60e6c842011-05-30 11:45:4331TEST(TimeFormattingTest, TimeFormatTimeOfDayDefault12h) {
32 // Test for a locale defaulted to 12h clock.
33 // As an instance, we use third_party/icu/source/data/locales/en.txt.
[email protected]3c8fe0632011-10-07 20:16:3134 i18n::SetICUDefaultLocale("en_US");
[email protected]60e6c842011-05-30 11:45:4335
[email protected]3c8fe0632011-10-07 20:16:3136 Time time(Time::FromLocalExploded(kTestDateTimeExploded));
[email protected]60e6c842011-05-30 11:45:4337 string16 clock24h(ASCIIToUTF16("15:42"));
38 string16 clock12h_pm(ASCIIToUTF16("3:42 PM"));
39 string16 clock12h(ASCIIToUTF16("3:42"));
40
41 // The default is 12h clock.
[email protected]3c8fe0632011-10-07 20:16:3142 EXPECT_EQ(clock12h_pm, TimeFormatTimeOfDay(time));
43 EXPECT_EQ(k12HourClock, GetHourClockType());
[email protected]60e6c842011-05-30 11:45:4344 // k{Keep,Drop}AmPm should not affect for 24h clock.
45 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:3146 TimeFormatTimeOfDayWithHourClockType(time,
47 k24HourClock,
48 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:4349 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:3150 TimeFormatTimeOfDayWithHourClockType(time,
51 k24HourClock,
52 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:4353 // k{Keep,Drop}AmPm affects for 12h clock.
54 EXPECT_EQ(clock12h_pm,
[email protected]3c8fe0632011-10-07 20:16:3155 TimeFormatTimeOfDayWithHourClockType(time,
56 k12HourClock,
57 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:4358 EXPECT_EQ(clock12h,
[email protected]3c8fe0632011-10-07 20:16:3159 TimeFormatTimeOfDayWithHourClockType(time,
60 k12HourClock,
61 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:4362}
63
[email protected]60e6c842011-05-30 11:45:4364TEST(TimeFormattingTest, TimeFormatTimeOfDayDefault24h) {
65 // Test for a locale defaulted to 24h clock.
66 // As an instance, we use third_party/icu/source/data/locales/en_GB.txt.
[email protected]3c8fe0632011-10-07 20:16:3167 i18n::SetICUDefaultLocale("en_GB");
[email protected]60e6c842011-05-30 11:45:4368
[email protected]3c8fe0632011-10-07 20:16:3169 Time time(Time::FromLocalExploded(kTestDateTimeExploded));
[email protected]60e6c842011-05-30 11:45:4370 string16 clock24h(ASCIIToUTF16("15:42"));
[email protected]5ece8042013-01-03 19:00:2971 string16 clock12h_pm(ASCIIToUTF16("3:42 pm"));
[email protected]60e6c842011-05-30 11:45:4372 string16 clock12h(ASCIIToUTF16("3:42"));
73
74 // The default is 24h clock.
[email protected]3c8fe0632011-10-07 20:16:3175 EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time));
76 EXPECT_EQ(k24HourClock, GetHourClockType());
[email protected]60e6c842011-05-30 11:45:4377 // k{Keep,Drop}AmPm should not affect for 24h clock.
78 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:3179 TimeFormatTimeOfDayWithHourClockType(time,
80 k24HourClock,
81 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:4382 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:3183 TimeFormatTimeOfDayWithHourClockType(time,
84 k24HourClock,
85 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:4386 // k{Keep,Drop}AmPm affects for 12h clock.
87 EXPECT_EQ(clock12h_pm,
[email protected]3c8fe0632011-10-07 20:16:3188 TimeFormatTimeOfDayWithHourClockType(time,
89 k12HourClock,
90 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:4391 EXPECT_EQ(clock12h,
[email protected]3c8fe0632011-10-07 20:16:3192 TimeFormatTimeOfDayWithHourClockType(time,
93 k12HourClock,
94 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:4395}
96
97TEST(TimeFormattingTest, TimeFormatTimeOfDayJP) {
98 // Test for a locale that uses different mark than "AM" and "PM".
99 // As an instance, we use third_party/icu/source/data/locales/ja.txt.
[email protected]3c8fe0632011-10-07 20:16:31100 i18n::SetICUDefaultLocale("ja_JP");
[email protected]60e6c842011-05-30 11:45:43101
[email protected]3c8fe0632011-10-07 20:16:31102 Time time(Time::FromLocalExploded(kTestDateTimeExploded));
[email protected]60e6c842011-05-30 11:45:43103 string16 clock24h(ASCIIToUTF16("15:42"));
[email protected]fdbb5c7e2013-03-15 15:48:43104 string16 clock12h_pm(WideToUTF16(L"\x5348\x5f8c" L"3:42"));
[email protected]60e6c842011-05-30 11:45:43105 string16 clock12h(ASCIIToUTF16("3:42"));
106
107 // The default is 24h clock.
[email protected]3c8fe0632011-10-07 20:16:31108 EXPECT_EQ(clock24h, TimeFormatTimeOfDay(time));
109 EXPECT_EQ(k24HourClock, GetHourClockType());
[email protected]60e6c842011-05-30 11:45:43110 // k{Keep,Drop}AmPm should not affect for 24h clock.
111 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:31112 TimeFormatTimeOfDayWithHourClockType(time,
113 k24HourClock,
114 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:43115 EXPECT_EQ(clock24h,
[email protected]3c8fe0632011-10-07 20:16:31116 TimeFormatTimeOfDayWithHourClockType(time,
117 k24HourClock,
118 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:43119 // k{Keep,Drop}AmPm affects for 12h clock.
120 EXPECT_EQ(clock12h_pm,
[email protected]3c8fe0632011-10-07 20:16:31121 TimeFormatTimeOfDayWithHourClockType(time,
122 k12HourClock,
123 kKeepAmPm));
[email protected]60e6c842011-05-30 11:45:43124 EXPECT_EQ(clock12h,
[email protected]3c8fe0632011-10-07 20:16:31125 TimeFormatTimeOfDayWithHourClockType(time,
126 k12HourClock,
127 kDropAmPm));
[email protected]60e6c842011-05-30 11:45:43128}
129
130TEST(TimeFormattingTest, TimeFormatDateUS) {
131 // See third_party/icu/source/data/locales/en.txt.
132 // The date patterns are "EEEE, MMMM d, y", "MMM d, y", and "M/d/yy".
[email protected]3c8fe0632011-10-07 20:16:31133 i18n::SetICUDefaultLocale("en_US");
[email protected]60e6c842011-05-30 11:45:43134
[email protected]3c8fe0632011-10-07 20:16:31135 Time time(Time::FromLocalExploded(kTestDateTimeExploded));
[email protected]60e6c842011-05-30 11:45:43136
[email protected]3c8fe0632011-10-07 20:16:31137 EXPECT_EQ(ASCIIToUTF16("Apr 30, 2011"), TimeFormatShortDate(time));
138 EXPECT_EQ(ASCIIToUTF16("4/30/11"), TimeFormatShortDateNumeric(time));
[email protected]5ece8042013-01-03 19:00:29139
[email protected]5ece8042013-01-03 19:00:29140 EXPECT_EQ(ASCIIToUTF16("4/30/11, 3:42:07 PM"),
141 TimeFormatShortDateAndTime(time));
jww62c6b3e2015-02-08 19:35:22142 EXPECT_EQ(ASCIIToUTF16("4/30/11, 3:42:07 PM ") + GetShortTimeZone(),
143 TimeFormatShortDateAndTimeWithTimeZone(time));
[email protected]5ece8042013-01-03 19:00:29144
[email protected]5ece8042013-01-03 19:00:29145 EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 at 3:42:07 PM"),
146 TimeFormatFriendlyDateAndTime(time));
[email protected]5ece8042013-01-03 19:00:29147
[email protected]60e6c842011-05-30 11:45:43148 EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011"),
[email protected]3c8fe0632011-10-07 20:16:31149 TimeFormatFriendlyDate(time));
[email protected]60e6c842011-05-30 11:45:43150}
151
152TEST(TimeFormattingTest, TimeFormatDateGB) {
153 // See third_party/icu/source/data/locales/en_GB.txt.
154 // The date patterns are "EEEE, d MMMM y", "d MMM y", and "dd/MM/yyyy".
[email protected]3c8fe0632011-10-07 20:16:31155 i18n::SetICUDefaultLocale("en_GB");
[email protected]60e6c842011-05-30 11:45:43156
[email protected]3c8fe0632011-10-07 20:16:31157 Time time(Time::FromLocalExploded(kTestDateTimeExploded));
[email protected]60e6c842011-05-30 11:45:43158
[email protected]3c8fe0632011-10-07 20:16:31159 EXPECT_EQ(ASCIIToUTF16("30 Apr 2011"), TimeFormatShortDate(time));
160 EXPECT_EQ(ASCIIToUTF16("30/04/2011"), TimeFormatShortDateNumeric(time));
jshin8fe2fe9a2015-02-20 01:37:58161 EXPECT_EQ(ASCIIToUTF16("30/04/2011, 15:42:07"),
[email protected]3c8fe0632011-10-07 20:16:31162 TimeFormatShortDateAndTime(time));
jshin8fe2fe9a2015-02-20 01:37:58163 EXPECT_EQ(ASCIIToUTF16("30/04/2011, 15:42:07 ") + GetShortTimeZone(),
jww62c6b3e2015-02-08 19:35:22164 TimeFormatShortDateAndTimeWithTimeZone(time));
jshin8fe2fe9a2015-02-20 01:37:58165 EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011 at 15:42:07"),
[email protected]3c8fe0632011-10-07 20:16:31166 TimeFormatFriendlyDateAndTime(time));
[email protected]60e6c842011-05-30 11:45:43167 EXPECT_EQ(ASCIIToUTF16("Saturday, 30 April 2011"),
[email protected]3c8fe0632011-10-07 20:16:31168 TimeFormatFriendlyDate(time));
[email protected]60e6c842011-05-30 11:45:43169}
[email protected]3c8fe0632011-10-07 20:16:31170
171} // namespace
172} // namespace base