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