1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
4 *******************************************************************************
5 * Copyright (C) 2013-2016, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 *******************************************************************************
9 * File RELDATEFMTTEST.CPP
11 *******************************************************************************
18 #if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
20 #include "unicode/localpointer.h"
21 #include "unicode/numfmt.h"
22 #include "unicode/reldatefmt.h"
25 static const char *DirectionStr(UDateDirection direction
);
26 static const char *RelativeUnitStr(UDateRelativeUnit unit
);
27 static const char *AbsoluteUnitStr(UDateAbsoluteUnit unit
);
29 typedef struct WithQuantityExpected
{
31 UDateDirection direction
;
32 UDateRelativeUnit unit
;
34 } WithQuantityExpected
;
36 typedef struct WithoutQuantityExpected
{
37 UDateDirection direction
;
38 UDateAbsoluteUnit unit
;
40 } WithoutQuantityExpected
;
42 static WithQuantityExpected kEnglish
[] = {
43 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0 seconds"},
44 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 seconds"},
45 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1 second"},
46 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2 seconds"},
47 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0 minutes"},
48 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0.5 minutes"},
49 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 1 minute"},
50 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 2 minutes"},
51 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0 hours"},
52 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0.5 hours"},
53 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 1 hour"},
54 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 2 hours"},
55 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0 days"},
56 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0.5 days"},
57 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 1 day"},
58 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 2 days"},
59 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0 weeks"},
60 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0.5 weeks"},
61 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 1 week"},
62 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 2 weeks"},
63 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0 months"},
64 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0.5 months"},
65 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 1 month"},
66 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 2 months"},
67 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0 years"},
68 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0.5 years"},
69 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 1 year"},
70 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 2 years"},
72 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 seconds ago"},
73 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 seconds ago"},
74 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 second ago"},
75 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 seconds ago"},
76 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 minutes ago"},
77 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 minutes ago"},
78 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 minute ago"},
79 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 minutes ago"},
80 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hours ago"},
81 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hours ago"},
82 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hour ago"},
83 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hours ago"},
84 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
85 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
86 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
87 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
88 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 weeks ago"},
89 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 weeks ago"},
90 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 week ago"},
91 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 weeks ago"},
92 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 months ago"},
93 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 months ago"},
94 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 month ago"},
95 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 months ago"},
96 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 years ago"},
97 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 years ago"},
98 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 year ago"},
99 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 years ago"}
102 static WithQuantityExpected kEnglishCaps
[] = {
103 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 0 seconds"},
104 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 0.5 seconds"},
105 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 1 second"},
106 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 2 seconds"},
107 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 0 minutes"},
108 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 0.5 minutes"},
109 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 1 minute"},
110 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 2 minutes"},
111 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 0 hours"},
112 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 0.5 hours"},
113 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 1 hour"},
114 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 2 hours"},
115 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 0 days"},
116 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 0.5 days"},
117 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 1 day"},
118 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 2 days"},
119 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 0 weeks"},
120 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 0.5 weeks"},
121 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 1 week"},
122 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 2 weeks"},
123 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 0 months"},
124 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 0.5 months"},
125 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 1 month"},
126 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 2 months"},
127 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 0 years"},
128 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 0.5 years"},
129 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 1 year"},
130 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 2 years"},
132 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 seconds ago"},
133 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 seconds ago"},
134 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 second ago"},
135 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 seconds ago"},
136 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 minutes ago"},
137 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 minutes ago"},
138 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 minute ago"},
139 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 minutes ago"},
140 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hours ago"},
141 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hours ago"},
142 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hour ago"},
143 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hours ago"},
144 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
145 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
146 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
147 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
148 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 weeks ago"},
149 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 weeks ago"},
150 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 week ago"},
151 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 weeks ago"},
152 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 months ago"},
153 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 months ago"},
154 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 month ago"},
155 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 months ago"},
156 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 years ago"},
157 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 years ago"},
158 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 year ago"},
159 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 years ago"}
162 static WithQuantityExpected kEnglishShort
[] = {
163 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0 sec."},
164 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 sec."},
165 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1 sec."},
166 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2 sec."},
167 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0 min."},
168 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0.5 min."},
169 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 1 min."},
170 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 2 min."},
171 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0 hr."},
172 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0.5 hr."},
173 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 1 hr."},
174 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 2 hr."},
175 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0 days"},
176 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0.5 days"},
177 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 1 day"},
178 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 2 days"},
179 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0 wk."},
180 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0.5 wk."},
181 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 1 wk."},
182 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 2 wk."},
183 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0 mo."},
184 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0.5 mo."},
185 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 1 mo."},
186 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 2 mo."},
187 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0 yr."},
188 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0.5 yr."},
189 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 1 yr."},
190 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 2 yr."},
192 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 sec. ago"},
193 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 sec. ago"},
194 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 sec. ago"},
195 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 sec. ago"},
196 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 min. ago"},
197 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 min. ago"},
198 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 min. ago"},
199 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 min. ago"},
200 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hr. ago"},
201 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hr. ago"},
202 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hr. ago"},
203 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hr. ago"},
204 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
205 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
206 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
207 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
208 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 wk. ago"},
209 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 wk. ago"},
210 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 wk. ago"},
211 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 wk. ago"},
212 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 mo. ago"},
213 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 mo. ago"},
214 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 mo. ago"},
215 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 mo. ago"},
216 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 yr. ago"},
217 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 yr. ago"},
218 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 yr. ago"},
219 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 yr. ago"}
222 static WithQuantityExpected kEnglishDecimal
[] = {
223 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.0 seconds"},
224 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 seconds"},
225 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1.0 seconds"},
226 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2.0 seconds"}
229 static WithQuantityExpected kSerbian
[] = {
230 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 0 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0438"},
231 {1.2, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 1,2 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0430"},
232 {21.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 21 \\u043c\\u0435\\u0441\\u0435\\u0446"}
235 static WithQuantityExpected kSerbianNarrow
[] = {
236 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 0 \\u043c."},
237 {1.2, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 1,2 \\u043c."},
238 {21.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 21 \\u043c."}
241 static WithoutQuantityExpected kEnglishNoQuantity
[] = {
242 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
244 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
245 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next week"},
246 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next month"},
247 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next year"},
248 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next Monday"},
249 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tuesday"},
250 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next Wednesday"},
251 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Thursday"},
252 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next Friday"},
253 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Saturday"},
254 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Sunday"},
256 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
258 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
259 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last week"},
260 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last month"},
261 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last year"},
262 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last Monday"},
263 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tuesday"},
264 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last Wednesday"},
265 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Thursday"},
266 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last Friday"},
267 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Saturday"},
268 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Sunday"},
270 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
271 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this week"},
272 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this month"},
273 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this year"},
274 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this Monday"},
275 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tuesday"},
276 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this Wednesday"},
277 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Thursday"},
278 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this Friday"},
279 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Saturday"},
280 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Sunday"},
282 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
283 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "week"},
284 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "month"},
285 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "year"},
286 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Monday"},
287 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tuesday"},
288 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "Wednesday"},
289 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Thursday"},
290 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Friday"},
291 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Saturday"},
292 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Sunday"},
294 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
297 static WithoutQuantityExpected kEnglishNoQuantityCaps
[] = {
298 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
300 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "Tomorrow"},
301 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "Next week"},
302 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "Next month"},
303 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "Next year"},
304 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "Next Monday"},
305 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "Next Tuesday"},
306 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "Next Wednesday"},
307 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "Next Thursday"},
308 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "Next Friday"},
309 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "Next Saturday"},
310 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "Next Sunday"},
312 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
314 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "Yesterday"},
315 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "Last week"},
316 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "Last month"},
317 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "Last year"},
318 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "Last Monday"},
319 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "Last Tuesday"},
320 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "Last Wednesday"},
321 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "Last Thursday"},
322 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "Last Friday"},
323 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "Last Saturday"},
324 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "Last Sunday"},
326 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "Today"},
327 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "This week"},
328 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "This month"},
329 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "This year"},
330 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "This Monday"},
331 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "This Tuesday"},
332 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "This Wednesday"},
333 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "This Thursday"},
334 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "This Friday"},
335 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "This Saturday"},
336 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "This Sunday"},
338 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "Day"},
339 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "Week"},
340 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "Month"},
341 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "Year"},
342 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Monday"},
343 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tuesday"},
344 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "Wednesday"},
345 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Thursday"},
346 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Friday"},
347 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Saturday"},
348 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Sunday"},
350 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "Now"}
353 static WithoutQuantityExpected kEnglishNoQuantityShort
[] = {
354 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
356 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
357 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next wk."},
358 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next mo."},
359 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next yr."},
360 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next Mon."},
361 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tue."},
362 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next Wed."},
363 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Thu."},
364 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next Fri."},
365 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Sat."},
366 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Sun."},
368 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
370 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
371 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last wk."},
372 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last mo."},
373 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last yr."},
374 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last Mon."},
375 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tue."},
376 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last Wed."},
377 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Thu."},
378 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last Fri."},
379 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Sat."},
380 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Sun."},
382 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
383 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this wk."},
384 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this mo."},
385 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this yr."},
386 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this Mon."},
387 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tue."},
388 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this Wed."},
389 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Thu."},
390 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this Fri."},
391 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Sat."},
392 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Sun."},
394 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
395 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "wk."},
396 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "mo."},
397 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "yr."},
398 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Mo"},
399 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tu"},
400 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "We"},
401 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Th"},
402 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Fr"},
403 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Sa"},
404 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Su"},
406 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
409 static WithoutQuantityExpected kEnglishNoQuantityNarrow
[] = {
410 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
412 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
413 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next wk."},
414 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next mo."},
415 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next yr."},
416 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next M"},
417 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tu"},
418 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next W"},
419 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Th"},
420 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next F"},
421 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Sa"},
422 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Su"},
424 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
426 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
427 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last wk."},
428 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last mo."},
429 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last yr."},
430 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last M"},
431 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tu"},
432 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last W"},
433 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Th"},
434 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last F"},
435 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Sa"},
436 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Su"},
438 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
439 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this wk."},
440 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this mo."},
441 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this yr."},
442 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this M"},
443 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tu"},
444 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this W"},
445 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Th"},
446 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this F"},
447 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Sa"},
448 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Su"},
450 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
451 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "wk."},
452 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "mo."},
453 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "yr."},
454 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "M"},
455 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "T"},
456 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "W"},
457 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "T"},
458 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "F"},
459 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "S"},
460 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "S"},
462 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
465 static WithoutQuantityExpected kSpanishNoQuantity
[] = {
466 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, "pasado ma\\u00F1ana"},
467 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, "anteayer"}
470 class RelativeDateTimeFormatterTest
: public IntlTest
{
472 RelativeDateTimeFormatterTest() {
475 void runIndexedTest(int32_t index
, UBool exec
, const char *&name
, char *par
=0);
478 void TestEnglishCaps();
479 void TestEnglishShort();
480 void TestEnglishNarrow();
482 void TestSerbianFallback();
483 void TestEnglishNoQuantity();
484 void TestEnglishNoQuantityCaps();
485 void TestEnglishNoQuantityShort();
486 void TestEnglishNoQuantityNarrow();
487 void TestSpanishNoQuantity();
488 void TestFormatWithQuantityIllegalArgument();
489 void TestFormatWithoutQuantityIllegalArgument();
490 void TestCustomNumberFormat();
492 void TestCombineDateAndTime();
493 void TestBadDisplayContext();
495 const Locale
& locale
,
496 const WithQuantityExpected
* expectedResults
,
497 int32_t expectedResultLength
);
499 const Locale
& locale
,
500 UDateRelativeDateTimeFormatterStyle style
,
501 const WithQuantityExpected
* expectedResults
,
502 int32_t expectedResultLength
);
504 const Locale
& locale
,
505 const WithoutQuantityExpected
* expectedResults
,
506 int32_t expectedResultLength
);
508 const Locale
& locale
,
509 UDateRelativeDateTimeFormatterStyle style
,
510 const WithoutQuantityExpected
* expectedResults
,
511 int32_t expectedResultLength
);
513 const RelativeDateTimeFormatter
& fmt
,
514 const WithQuantityExpected
* expectedResults
,
515 int32_t expectedResultLength
,
516 const char *description
);
518 const RelativeDateTimeFormatter
& fmt
,
519 const WithoutQuantityExpected
* expectedResults
,
520 int32_t expectedResultLength
,
521 const char *description
);
522 void CheckExpectedResult(
523 const RelativeDateTimeFormatter
& fmt
,
524 const WithQuantityExpected
& expectedResult
,
525 const char* description
);
526 void CheckExpectedResult(
527 const RelativeDateTimeFormatter
& fmt
,
528 const WithoutQuantityExpected
& expectedResult
,
529 const char* description
);
530 void VerifyIllegalArgument(
531 const RelativeDateTimeFormatter
& fmt
,
532 UDateDirection direction
,
533 UDateRelativeUnit unit
);
534 void VerifyIllegalArgument(
535 const RelativeDateTimeFormatter
& fmt
,
536 UDateDirection direction
,
537 UDateAbsoluteUnit unit
);
538 void TestSidewaysDataLoading(void);
541 void RelativeDateTimeFormatterTest::runIndexedTest(
542 int32_t index
, UBool exec
, const char *&name
, char *) {
544 logln("TestSuite RelativeDateTimeFormatterTest: ");
547 TESTCASE_AUTO(TestEnglish
);
548 TESTCASE_AUTO(TestEnglishCaps
);
549 TESTCASE_AUTO(TestEnglishShort
);
550 TESTCASE_AUTO(TestEnglishNarrow
);
551 TESTCASE_AUTO(TestSerbian
);
552 TESTCASE_AUTO(TestSerbianFallback
);
553 TESTCASE_AUTO(TestEnglishNoQuantity
);
554 TESTCASE_AUTO(TestEnglishNoQuantityCaps
);
555 TESTCASE_AUTO(TestEnglishNoQuantityShort
);
556 TESTCASE_AUTO(TestEnglishNoQuantityNarrow
);
557 TESTCASE_AUTO(TestSpanishNoQuantity
);
558 TESTCASE_AUTO(TestFormatWithQuantityIllegalArgument
);
559 TESTCASE_AUTO(TestFormatWithoutQuantityIllegalArgument
);
560 TESTCASE_AUTO(TestCustomNumberFormat
);
561 TESTCASE_AUTO(TestGetters
);
562 TESTCASE_AUTO(TestCombineDateAndTime
);
563 TESTCASE_AUTO(TestBadDisplayContext
);
564 TESTCASE_AUTO(TestSidewaysDataLoading
);
568 void RelativeDateTimeFormatterTest::TestEnglish() {
569 RunTest("en", kEnglish
, UPRV_LENGTHOF(kEnglish
));
572 void RelativeDateTimeFormatterTest::TestEnglishCaps() {
573 UErrorCode status
= U_ZERO_ERROR
;
574 RelativeDateTimeFormatter
fmt(
578 UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
,
580 if (U_FAILURE(status
)) {
581 dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_LONG, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, status); : %s", u_errorName(status
));
584 RelativeDateTimeFormatter
fmt3(status
);
586 // Test assignment and copy constructor with capitalization on.
587 RelativeDateTimeFormatter
fmt2(fmt
);
589 assertSuccess("", status
);
590 RunTest(fmt3
, kEnglishCaps
, UPRV_LENGTHOF(kEnglishCaps
), "en caps");
593 void RelativeDateTimeFormatterTest::TestEnglishShort() {
594 RunTest("en", UDAT_STYLE_SHORT
, kEnglishShort
, UPRV_LENGTHOF(kEnglishShort
));
597 void RelativeDateTimeFormatterTest::TestEnglishNarrow() {
598 RunTest("en", UDAT_STYLE_NARROW
, kEnglishShort
, UPRV_LENGTHOF(kEnglishShort
));
601 void RelativeDateTimeFormatterTest::TestSerbian() {
602 RunTest("sr", kSerbian
, UPRV_LENGTHOF(kSerbian
));
605 void RelativeDateTimeFormatterTest::TestSerbianFallback() {
606 RunTest("sr", UDAT_STYLE_NARROW
, kSerbianNarrow
, UPRV_LENGTHOF(kSerbianNarrow
));
609 void RelativeDateTimeFormatterTest::TestEnglishNoQuantity() {
610 RunTest("en", kEnglishNoQuantity
, UPRV_LENGTHOF(kEnglishNoQuantity
));
613 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityCaps() {
614 UErrorCode status
= U_ZERO_ERROR
;
615 RelativeDateTimeFormatter
fmt(
619 UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
,
621 if (assertSuccess("RelativeDateTimeFormatter", status
, TRUE
) == FALSE
) {
626 kEnglishNoQuantityCaps
,
627 UPRV_LENGTHOF(kEnglishNoQuantityCaps
),
628 "en caps no quantity");
631 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityShort() {
635 kEnglishNoQuantityShort
,
636 UPRV_LENGTHOF(kEnglishNoQuantityShort
));
639 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityNarrow() {
643 kEnglishNoQuantityNarrow
,
644 UPRV_LENGTHOF(kEnglishNoQuantityNarrow
));
647 void RelativeDateTimeFormatterTest::TestSpanishNoQuantity() {
648 RunTest("es", kSpanishNoQuantity
, UPRV_LENGTHOF(kSpanishNoQuantity
));
651 void RelativeDateTimeFormatterTest::TestFormatWithQuantityIllegalArgument() {
652 UErrorCode status
= U_ZERO_ERROR
;
653 RelativeDateTimeFormatter
fmt("en", status
);
654 if (U_FAILURE(status
)) {
655 dataerrln("Failure creating format object - %s", u_errorName(status
));
658 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_PLAIN
, UDAT_RELATIVE_DAYS
);
659 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_THIS
, UDAT_RELATIVE_DAYS
);
662 void RelativeDateTimeFormatterTest::TestFormatWithoutQuantityIllegalArgument() {
663 UErrorCode status
= U_ZERO_ERROR
;
664 RelativeDateTimeFormatter
fmt("en", status
);
665 if (U_FAILURE(status
)) {
666 dataerrln("Failure creating format object - %s", u_errorName(status
));
669 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_NOW
);
670 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_NOW
);
671 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_NOW
);
674 void RelativeDateTimeFormatterTest::TestCustomNumberFormat() {
676 UErrorCode status
= U_ZERO_ERROR
;
678 RelativeDateTimeFormatter
fmt("en", status
);
679 if (U_FAILURE(status
)) {
681 "Failure creating format object - %s", u_errorName(status
));
684 nf
= (NumberFormat
*) fmt
.getNumberFormat().clone();
686 nf
->setMinimumFractionDigits(1);
687 nf
->setMaximumFractionDigits(1);
688 RelativeDateTimeFormatter
fmt("en", nf
, status
);
690 // Test copy constructor.
691 RelativeDateTimeFormatter
fmt2(fmt
);
692 RunTest(fmt2
, kEnglishDecimal
, UPRV_LENGTHOF(kEnglishDecimal
), "en decimal digits");
695 fmt
= RelativeDateTimeFormatter("es", status
);
696 RunTest(fmt
, kSpanishNoQuantity
, UPRV_LENGTHOF(kSpanishNoQuantity
), "assignment operator");
700 void RelativeDateTimeFormatterTest::TestGetters() {
701 UErrorCode status
= U_ZERO_ERROR
;
702 RelativeDateTimeFormatter
fmt(
706 UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE
,
708 if (U_FAILURE(status
)) {
709 dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_NARROW, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, status);) : %s", u_errorName(status
));
712 RelativeDateTimeFormatter
fmt3(status
);
714 // copy and assignment.
715 RelativeDateTimeFormatter
fmt2(fmt
);
717 assertEquals("style", (int32_t)UDAT_STYLE_NARROW
, fmt3
.getFormatStyle());
720 (int32_t)UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE
,
721 fmt3
.getCapitalizationContext());
722 assertSuccess("", status
);
725 void RelativeDateTimeFormatterTest::TestCombineDateAndTime() {
726 UErrorCode status
= U_ZERO_ERROR
;
727 RelativeDateTimeFormatter
fmt("en", status
);
728 if (U_FAILURE(status
)) {
729 dataerrln("Failure creating format object - %s", u_errorName(status
));
732 UnicodeString actual
;
733 fmt
.combineDateAndTime(
734 UnicodeString("yesterday"),
735 UnicodeString("3:50"),
738 UnicodeString
expected("yesterday, 3:50");
739 if (expected
!= actual
) {
740 errln("Expected "+expected
+", got "+actual
);
744 void RelativeDateTimeFormatterTest::TestBadDisplayContext() {
745 UErrorCode status
= U_ZERO_ERROR
;
746 RelativeDateTimeFormatter
fmt(
747 "en", NULL
, UDAT_STYLE_LONG
, UDISPCTX_STANDARD_NAMES
, status
);
748 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
749 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
755 void RelativeDateTimeFormatterTest::RunTest(
756 const Locale
& locale
,
757 const WithQuantityExpected
* expectedResults
,
758 int32_t expectedResultLength
) {
759 UErrorCode status
= U_ZERO_ERROR
;
760 RelativeDateTimeFormatter
fmt(locale
, status
);
761 if (U_FAILURE(status
)) {
762 dataerrln("Unable to create format object - %s", u_errorName(status
));
765 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
768 void RelativeDateTimeFormatterTest::RunTest(
769 const Locale
& locale
,
770 UDateRelativeDateTimeFormatterStyle style
,
771 const WithQuantityExpected
* expectedResults
,
772 int32_t expectedResultLength
) {
773 UErrorCode status
= U_ZERO_ERROR
;
774 RelativeDateTimeFormatter
fmt(
775 locale
, NULL
, style
, UDISPCTX_CAPITALIZATION_NONE
, status
);
776 if (U_FAILURE(status
)) {
777 dataerrln("Unable to create format object - %s", u_errorName(status
));
780 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
783 void RelativeDateTimeFormatterTest::RunTest(
784 const Locale
& locale
,
785 const WithoutQuantityExpected
* expectedResults
,
786 int32_t expectedResultLength
) {
787 UErrorCode status
= U_ZERO_ERROR
;
788 RelativeDateTimeFormatter
fmt(locale
, status
);
789 if (U_FAILURE(status
)) {
790 dataerrln("Unable to create format object - %s", u_errorName(status
));
793 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
796 void RelativeDateTimeFormatterTest::RunTest(
797 const Locale
& locale
,
798 UDateRelativeDateTimeFormatterStyle style
,
799 const WithoutQuantityExpected
* expectedResults
,
800 int32_t expectedResultLength
) {
801 UErrorCode status
= U_ZERO_ERROR
;
802 RelativeDateTimeFormatter
fmt(
803 locale
, NULL
, style
, UDISPCTX_CAPITALIZATION_NONE
, status
);
804 if (U_FAILURE(status
)) {
805 dataerrln("Unable to create format object - %s", u_errorName(status
));
808 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
811 void RelativeDateTimeFormatterTest::RunTest(
812 const RelativeDateTimeFormatter
& fmt
,
813 const WithQuantityExpected
* expectedResults
,
814 int32_t expectedResultLength
,
815 const char *description
) {
816 for (int32_t i
= 0; i
< expectedResultLength
; ++i
) {
817 CheckExpectedResult(fmt
, expectedResults
[i
], description
);
821 void RelativeDateTimeFormatterTest::RunTest(
822 const RelativeDateTimeFormatter
& fmt
,
823 const WithoutQuantityExpected
* expectedResults
,
824 int32_t expectedResultLength
,
825 const char *description
) {
826 for (int32_t i
= 0; i
< expectedResultLength
; ++i
) {
827 CheckExpectedResult(fmt
, expectedResults
[i
], description
);
831 void RelativeDateTimeFormatterTest::CheckExpectedResult(
832 const RelativeDateTimeFormatter
& fmt
,
833 const WithQuantityExpected
& expectedResult
,
834 const char* description
) {
835 UErrorCode status
= U_ZERO_ERROR
;
836 UnicodeString actual
;
837 fmt
.format(expectedResult
.value
, expectedResult
.direction
, expectedResult
.unit
, actual
, status
);
838 UnicodeString
expected(expectedResult
.expected
, -1, US_INV
);
839 expected
= expected
.unescape();
845 expectedResult
.value
,
846 DirectionStr(expectedResult
.direction
),
847 RelativeUnitStr(expectedResult
.unit
));
848 if (actual
!= expected
) {
849 errln(UnicodeString("Fail: Expected: ") + expected
851 + ", For: " + buffer
);
855 void RelativeDateTimeFormatterTest::CheckExpectedResult(
856 const RelativeDateTimeFormatter
& fmt
,
857 const WithoutQuantityExpected
& expectedResult
,
858 const char* description
) {
859 UErrorCode status
= U_ZERO_ERROR
;
860 UnicodeString actual
;
861 fmt
.format(expectedResult
.direction
, expectedResult
.unit
, actual
, status
);
862 UnicodeString
expected(expectedResult
.expected
, -1, US_INV
);
863 expected
= expected
.unescape();
869 DirectionStr(expectedResult
.direction
),
870 AbsoluteUnitStr(expectedResult
.unit
));
871 if (actual
!= expected
) {
872 errln(UnicodeString("Fail: Expected: ") + expected
874 + ", For: " + buffer
);
878 void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
879 const RelativeDateTimeFormatter
& fmt
,
880 UDateDirection direction
,
881 UDateRelativeUnit unit
) {
882 UnicodeString appendTo
;
883 UErrorCode status
= U_ZERO_ERROR
;
884 fmt
.format(1.0, direction
, unit
, appendTo
, status
);
885 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
886 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
890 void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
891 const RelativeDateTimeFormatter
& fmt
,
892 UDateDirection direction
,
893 UDateAbsoluteUnit unit
) {
894 UnicodeString appendTo
;
895 UErrorCode status
= U_ZERO_ERROR
;
896 fmt
.format(direction
, unit
, appendTo
, status
);
897 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
898 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
902 /* Add tests to check "sideways" data loading. */
903 void RelativeDateTimeFormatterTest::TestSidewaysDataLoading(void) {
904 UErrorCode status
= U_ZERO_ERROR
;
905 UnicodeString actual
;
906 UnicodeString expected
;
907 Locale
enGbLocale("en_GB");
909 RelativeDateTimeFormatter
fmt(enGbLocale
, NULL
, UDAT_STYLE_NARROW
,
910 UDISPCTX_CAPITALIZATION_NONE
, status
);
911 if (U_FAILURE(status
)) {
912 dataerrln("Unable to create RelativeDateTimeFormatter - %s", u_errorName(status
));
916 status
= U_ZERO_ERROR
;
918 fmt
.format(3.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, actual
, status
);
919 expected
= "in 3 mo";
920 assertEquals("narrow in 3 mo", expected
, actual
);
922 fmt
.format(3.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, actual
.remove(), status
);
923 expected
= "3 days ago";
924 assertEquals("3 days ago (positive 3.0): ", expected
, actual
);
926 expected
= "-3 days ago";
927 fmt
.format(-3.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, actual
.remove(), status
);
928 assertEquals("3 days ago (negative 3.0): ", expected
, actual
);
930 expected
= "next yr.";
931 fmt
.format(UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, actual
.remove(), status
);
932 assertEquals("next year: ", expected
, actual
);
934 // Testing the SHORT style
935 RelativeDateTimeFormatter
fmtshort(enGbLocale
, NULL
, UDAT_STYLE_SHORT
,
936 UDISPCTX_CAPITALIZATION_NONE
, status
);
938 fmtshort
.format(0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, actual
.remove(), status
);
940 expected
= "next yr.";
941 fmt
.format(UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, actual
.remove(), status
);
942 assertEquals("next year: ", expected
, actual
);
945 static const char *kLast2
= "Last_2";
946 static const char *kLast
= "Last";
947 static const char *kThis
= "This";
948 static const char *kNext
= "Next";
949 static const char *kNext2
= "Next_2";
950 static const char *kPlain
= "Plain";
952 static const char *kSeconds
= "Seconds";
953 static const char *kMinutes
= "Minutes";
954 static const char *kHours
= "Hours";
955 static const char *kDays
= "Days";
956 static const char *kWeeks
= "Weeks";
957 static const char *kMonths
= "Months";
958 static const char *kYears
= "Years";
960 static const char *kSunday
= "Sunday";
961 static const char *kMonday
= "Monday";
962 static const char *kTuesday
= "Tuesday";
963 static const char *kWednesday
= "Wednesday";
964 static const char *kThursday
= "Thursday";
965 static const char *kFriday
= "Friday";
966 static const char *kSaturday
= "Saturday";
967 static const char *kDay
= "Day";
968 static const char *kWeek
= "Week";
969 static const char *kMonth
= "Month";
970 static const char *kYear
= "Year";
971 static const char *kNow
= "Now";
973 static const char *kUndefined
= "Undefined";
975 static const char *DirectionStr(
976 UDateDirection direction
) {
978 case UDAT_DIRECTION_LAST_2
:
980 case UDAT_DIRECTION_LAST
:
982 case UDAT_DIRECTION_THIS
:
984 case UDAT_DIRECTION_NEXT
:
986 case UDAT_DIRECTION_NEXT_2
:
988 case UDAT_DIRECTION_PLAIN
:
996 static const char *RelativeUnitStr(
997 UDateRelativeUnit unit
) {
999 case UDAT_RELATIVE_SECONDS
:
1001 case UDAT_RELATIVE_MINUTES
:
1003 case UDAT_RELATIVE_HOURS
:
1005 case UDAT_RELATIVE_DAYS
:
1007 case UDAT_RELATIVE_WEEKS
:
1009 case UDAT_RELATIVE_MONTHS
:
1011 case UDAT_RELATIVE_YEARS
:
1019 static const char *AbsoluteUnitStr(
1020 UDateAbsoluteUnit unit
) {
1022 case UDAT_ABSOLUTE_SUNDAY
:
1024 case UDAT_ABSOLUTE_MONDAY
:
1026 case UDAT_ABSOLUTE_TUESDAY
:
1028 case UDAT_ABSOLUTE_WEDNESDAY
:
1030 case UDAT_ABSOLUTE_THURSDAY
:
1032 case UDAT_ABSOLUTE_FRIDAY
:
1034 case UDAT_ABSOLUTE_SATURDAY
:
1036 case UDAT_ABSOLUTE_DAY
:
1038 case UDAT_ABSOLUTE_WEEK
:
1040 case UDAT_ABSOLUTE_MONTH
:
1042 case UDAT_ABSOLUTE_YEAR
:
1044 case UDAT_ABSOLUTE_NOW
:
1052 extern IntlTest
*createRelativeDateTimeFormatterTest() {
1053 return new RelativeDateTimeFormatterTest();