2 *******************************************************************************
3 * Copyright (C) 2013-2016, International Business Machines Corporation and
4 * others. All Rights Reserved.
5 *******************************************************************************
7 * File RELDATEFMTTEST.CPP
9 *******************************************************************************
16 #if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
18 #include "unicode/localpointer.h"
19 #include "unicode/numfmt.h"
20 #include "unicode/reldatefmt.h"
23 static const char *DirectionStr(UDateDirection direction
);
24 static const char *RelativeUnitStr(UDateRelativeUnit unit
);
25 static const char *AbsoluteUnitStr(UDateAbsoluteUnit unit
);
27 typedef struct WithQuantityExpected
{
29 UDateDirection direction
;
30 UDateRelativeUnit unit
;
32 } WithQuantityExpected
;
34 typedef struct WithoutQuantityExpected
{
35 UDateDirection direction
;
36 UDateAbsoluteUnit unit
;
38 } WithoutQuantityExpected
;
40 static WithQuantityExpected kEnglish
[] = {
41 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0 seconds"},
42 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 seconds"},
43 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1 second"},
44 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2 seconds"},
45 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0 minutes"},
46 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0.5 minutes"},
47 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 1 minute"},
48 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 2 minutes"},
49 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0 hours"},
50 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0.5 hours"},
51 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 1 hour"},
52 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 2 hours"},
53 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0 days"},
54 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0.5 days"},
55 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 1 day"},
56 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 2 days"},
57 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0 weeks"},
58 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0.5 weeks"},
59 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 1 week"},
60 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 2 weeks"},
61 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0 months"},
62 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0.5 months"},
63 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 1 month"},
64 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 2 months"},
65 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0 years"},
66 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0.5 years"},
67 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 1 year"},
68 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 2 years"},
70 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 seconds ago"},
71 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 seconds ago"},
72 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 second ago"},
73 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 seconds ago"},
74 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 minutes ago"},
75 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 minutes ago"},
76 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 minute ago"},
77 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 minutes ago"},
78 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hours ago"},
79 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hours ago"},
80 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hour ago"},
81 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hours ago"},
82 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
83 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
84 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
85 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
86 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 weeks ago"},
87 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 weeks ago"},
88 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 week ago"},
89 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 weeks ago"},
90 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 months ago"},
91 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 months ago"},
92 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 month ago"},
93 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 months ago"},
94 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 years ago"},
95 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 years ago"},
96 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 year ago"},
97 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 years ago"}
100 static WithQuantityExpected kEnglishCaps
[] = {
101 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 0 seconds"},
102 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 0.5 seconds"},
103 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 1 second"},
104 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "In 2 seconds"},
105 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 0 minutes"},
106 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 0.5 minutes"},
107 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 1 minute"},
108 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "In 2 minutes"},
109 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 0 hours"},
110 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 0.5 hours"},
111 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 1 hour"},
112 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "In 2 hours"},
113 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 0 days"},
114 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 0.5 days"},
115 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 1 day"},
116 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "In 2 days"},
117 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 0 weeks"},
118 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 0.5 weeks"},
119 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 1 week"},
120 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "In 2 weeks"},
121 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 0 months"},
122 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 0.5 months"},
123 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 1 month"},
124 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "In 2 months"},
125 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 0 years"},
126 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 0.5 years"},
127 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 1 year"},
128 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "In 2 years"},
130 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 seconds ago"},
131 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 seconds ago"},
132 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 second ago"},
133 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 seconds ago"},
134 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 minutes ago"},
135 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 minutes ago"},
136 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 minute ago"},
137 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 minutes ago"},
138 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hours ago"},
139 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hours ago"},
140 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hour ago"},
141 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hours ago"},
142 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
143 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
144 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
145 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
146 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 weeks ago"},
147 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 weeks ago"},
148 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 week ago"},
149 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 weeks ago"},
150 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 months ago"},
151 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 months ago"},
152 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 month ago"},
153 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 months ago"},
154 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 years ago"},
155 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 years ago"},
156 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 year ago"},
157 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 years ago"}
160 static WithQuantityExpected kEnglishShort
[] = {
161 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0 sec."},
162 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 sec."},
163 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1 sec."},
164 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2 sec."},
165 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0 min."},
166 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 0.5 min."},
167 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 1 min."},
168 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MINUTES
, "in 2 min."},
169 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0 hr."},
170 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 0.5 hr."},
171 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 1 hr."},
172 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_HOURS
, "in 2 hr."},
173 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0 days"},
174 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 0.5 days"},
175 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 1 day"},
176 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_DAYS
, "in 2 days"},
177 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0 wk."},
178 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 0.5 wk."},
179 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 1 wk."},
180 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_WEEKS
, "in 2 wk."},
181 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0 mo."},
182 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 0.5 mo."},
183 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 1 mo."},
184 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "in 2 mo."},
185 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0 yr."},
186 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 0.5 yr."},
187 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 1 yr."},
188 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_YEARS
, "in 2 yr."},
190 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0 sec. ago"},
191 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "0.5 sec. ago"},
192 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "1 sec. ago"},
193 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_SECONDS
, "2 sec. ago"},
194 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0 min. ago"},
195 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "0.5 min. ago"},
196 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "1 min. ago"},
197 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MINUTES
, "2 min. ago"},
198 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0 hr. ago"},
199 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "0.5 hr. ago"},
200 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "1 hr. ago"},
201 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_HOURS
, "2 hr. ago"},
202 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0 days ago"},
203 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "0.5 days ago"},
204 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "1 day ago"},
205 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, "2 days ago"},
206 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0 wk. ago"},
207 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "0.5 wk. ago"},
208 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "1 wk. ago"},
209 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_WEEKS
, "2 wk. ago"},
210 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0 mo. ago"},
211 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "0.5 mo. ago"},
212 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "1 mo. ago"},
213 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_MONTHS
, "2 mo. ago"},
214 {0.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0 yr. ago"},
215 {0.5, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "0.5 yr. ago"},
216 {1.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "1 yr. ago"},
217 {2.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_YEARS
, "2 yr. ago"}
220 static WithQuantityExpected kEnglishDecimal
[] = {
221 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.0 seconds"},
222 {0.5, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 0.5 seconds"},
223 {1.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 1.0 seconds"},
224 {2.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, "in 2.0 seconds"}
227 static WithQuantityExpected kSerbian
[] = {
228 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 0 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0438"},
229 {1.2, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 1,2 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0430"},
230 {21.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 21 \\u043c\\u0435\\u0441\\u0435\\u0446"}
233 static WithQuantityExpected kSerbianNarrow
[] = {
234 {0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 0 \\u043c."},
235 {1.2, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 1,2 \\u043c."},
236 {21.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, "\\u0437\\u0430 21 \\u043c."}
239 static WithoutQuantityExpected kEnglishNoQuantity
[] = {
240 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
242 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
243 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next week"},
244 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next month"},
245 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next year"},
246 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next Monday"},
247 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tuesday"},
248 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next Wednesday"},
249 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Thursday"},
250 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next Friday"},
251 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Saturday"},
252 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Sunday"},
254 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
256 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
257 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last week"},
258 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last month"},
259 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last year"},
260 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last Monday"},
261 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tuesday"},
262 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last Wednesday"},
263 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Thursday"},
264 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last Friday"},
265 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Saturday"},
266 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Sunday"},
268 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
269 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this week"},
270 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this month"},
271 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this year"},
272 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this Monday"},
273 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tuesday"},
274 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this Wednesday"},
275 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Thursday"},
276 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this Friday"},
277 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Saturday"},
278 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Sunday"},
280 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
281 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "week"},
282 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "month"},
283 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "year"},
284 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Monday"},
285 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tuesday"},
286 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "Wednesday"},
287 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Thursday"},
288 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Friday"},
289 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Saturday"},
290 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Sunday"},
292 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
295 static WithoutQuantityExpected kEnglishNoQuantityCaps
[] = {
296 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
298 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "Tomorrow"},
299 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "Next week"},
300 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "Next month"},
301 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "Next year"},
302 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "Next Monday"},
303 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "Next Tuesday"},
304 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "Next Wednesday"},
305 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "Next Thursday"},
306 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "Next Friday"},
307 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "Next Saturday"},
308 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "Next Sunday"},
310 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
312 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "Yesterday"},
313 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "Last week"},
314 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "Last month"},
315 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "Last year"},
316 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "Last Monday"},
317 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "Last Tuesday"},
318 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "Last Wednesday"},
319 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "Last Thursday"},
320 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "Last Friday"},
321 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "Last Saturday"},
322 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "Last Sunday"},
324 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "Today"},
325 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "This week"},
326 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "This month"},
327 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "This year"},
328 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "This Monday"},
329 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "This Tuesday"},
330 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "This Wednesday"},
331 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "This Thursday"},
332 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "This Friday"},
333 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "This Saturday"},
334 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "This Sunday"},
336 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "Day"},
337 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "Week"},
338 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "Month"},
339 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "Year"},
340 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Monday"},
341 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tuesday"},
342 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "Wednesday"},
343 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Thursday"},
344 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Friday"},
345 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Saturday"},
346 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Sunday"},
348 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "Now"}
351 static WithoutQuantityExpected kEnglishNoQuantityShort
[] = {
352 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
354 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
355 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next wk."},
356 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next mo."},
357 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next yr."},
358 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next Mon."},
359 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tue."},
360 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next Wed."},
361 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Thu."},
362 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next Fri."},
363 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Sat."},
364 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Sun."},
366 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
368 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
369 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last wk."},
370 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last mo."},
371 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last yr."},
372 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last Mon."},
373 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tue."},
374 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last Wed."},
375 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Thu."},
376 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last Fri."},
377 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Sat."},
378 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Sun."},
380 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
381 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this wk."},
382 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this mo."},
383 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this yr."},
384 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this Mon."},
385 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tue."},
386 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this Wed."},
387 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Thu."},
388 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this Fri."},
389 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Sat."},
390 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Sun."},
392 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
393 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "wk."},
394 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "mo."},
395 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "yr."},
396 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "Mo"},
397 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "Tu"},
398 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "We"},
399 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "Th"},
400 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "Fr"},
401 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "Sa"},
402 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "Su"},
404 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
407 static WithoutQuantityExpected kEnglishNoQuantityNarrow
[] = {
408 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, ""},
410 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_DAY
, "tomorrow"},
411 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEEK
, "next wk."},
412 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONTH
, "next mo."},
413 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, "next yr."},
414 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_MONDAY
, "next M"},
415 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_TUESDAY
, "next Tu"},
416 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_WEDNESDAY
, "next W"},
417 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_THURSDAY
, "next Th"},
418 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_FRIDAY
, "next F"},
419 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SATURDAY
, "next Sa"},
420 {UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_SUNDAY
, "next Su"},
422 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, ""},
424 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_DAY
, "yesterday"},
425 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEEK
, "last wk."},
426 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONTH
, "last mo."},
427 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_YEAR
, "last yr."},
428 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_MONDAY
, "last M"},
429 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_TUESDAY
, "last Tu"},
430 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_WEDNESDAY
, "last W"},
431 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_THURSDAY
, "last Th"},
432 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_FRIDAY
, "last F"},
433 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SATURDAY
, "last Sa"},
434 {UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_SUNDAY
, "last Su"},
436 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_DAY
, "today"},
437 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEEK
, "this wk."},
438 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONTH
, "this mo."},
439 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_YEAR
, "this yr."},
440 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_MONDAY
, "this M"},
441 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_TUESDAY
, "this Tu"},
442 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_WEDNESDAY
, "this W"},
443 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_THURSDAY
, "this Th"},
444 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_FRIDAY
, "this F"},
445 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SATURDAY
, "this Sa"},
446 {UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_SUNDAY
, "this Su"},
448 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_DAY
, "day"},
449 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEEK
, "wk."},
450 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONTH
, "mo."},
451 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_YEAR
, "yr."},
452 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_MONDAY
, "M"},
453 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_TUESDAY
, "T"},
454 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_WEDNESDAY
, "W"},
455 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_THURSDAY
, "T"},
456 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_FRIDAY
, "F"},
457 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SATURDAY
, "S"},
458 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_SUNDAY
, "S"},
460 {UDAT_DIRECTION_PLAIN
, UDAT_ABSOLUTE_NOW
, "now"}
463 static WithoutQuantityExpected kSpanishNoQuantity
[] = {
464 {UDAT_DIRECTION_NEXT_2
, UDAT_ABSOLUTE_DAY
, "pasado ma\\u00F1ana"},
465 {UDAT_DIRECTION_LAST_2
, UDAT_ABSOLUTE_DAY
, "anteayer"}
468 class RelativeDateTimeFormatterTest
: public IntlTest
{
470 RelativeDateTimeFormatterTest() {
473 void runIndexedTest(int32_t index
, UBool exec
, const char *&name
, char *par
=0);
476 void TestEnglishCaps();
477 void TestEnglishShort();
478 void TestEnglishNarrow();
480 void TestSerbianFallback();
481 void TestEnglishNoQuantity();
482 void TestEnglishNoQuantityCaps();
483 void TestEnglishNoQuantityShort();
484 void TestEnglishNoQuantityNarrow();
485 void TestSpanishNoQuantity();
486 void TestFormatWithQuantityIllegalArgument();
487 void TestFormatWithoutQuantityIllegalArgument();
488 void TestCustomNumberFormat();
490 void TestCombineDateAndTime();
491 void TestBadDisplayContext();
493 const Locale
& locale
,
494 const WithQuantityExpected
* expectedResults
,
495 int32_t expectedResultLength
);
497 const Locale
& locale
,
498 UDateRelativeDateTimeFormatterStyle style
,
499 const WithQuantityExpected
* expectedResults
,
500 int32_t expectedResultLength
);
502 const Locale
& locale
,
503 const WithoutQuantityExpected
* expectedResults
,
504 int32_t expectedResultLength
);
506 const Locale
& locale
,
507 UDateRelativeDateTimeFormatterStyle style
,
508 const WithoutQuantityExpected
* expectedResults
,
509 int32_t expectedResultLength
);
511 const RelativeDateTimeFormatter
& fmt
,
512 const WithQuantityExpected
* expectedResults
,
513 int32_t expectedResultLength
,
514 const char *description
);
516 const RelativeDateTimeFormatter
& fmt
,
517 const WithoutQuantityExpected
* expectedResults
,
518 int32_t expectedResultLength
,
519 const char *description
);
520 void CheckExpectedResult(
521 const RelativeDateTimeFormatter
& fmt
,
522 const WithQuantityExpected
& expectedResult
,
523 const char* description
);
524 void CheckExpectedResult(
525 const RelativeDateTimeFormatter
& fmt
,
526 const WithoutQuantityExpected
& expectedResult
,
527 const char* description
);
528 void VerifyIllegalArgument(
529 const RelativeDateTimeFormatter
& fmt
,
530 UDateDirection direction
,
531 UDateRelativeUnit unit
);
532 void VerifyIllegalArgument(
533 const RelativeDateTimeFormatter
& fmt
,
534 UDateDirection direction
,
535 UDateAbsoluteUnit unit
);
536 void TestSidewaysDataLoading(void);
539 void RelativeDateTimeFormatterTest::runIndexedTest(
540 int32_t index
, UBool exec
, const char *&name
, char *) {
542 logln("TestSuite RelativeDateTimeFormatterTest: ");
545 TESTCASE_AUTO(TestEnglish
);
546 TESTCASE_AUTO(TestEnglishCaps
);
547 TESTCASE_AUTO(TestEnglishShort
);
548 TESTCASE_AUTO(TestEnglishNarrow
);
549 TESTCASE_AUTO(TestSerbian
);
550 TESTCASE_AUTO(TestSerbianFallback
);
551 TESTCASE_AUTO(TestEnglishNoQuantity
);
552 TESTCASE_AUTO(TestEnglishNoQuantityCaps
);
553 TESTCASE_AUTO(TestEnglishNoQuantityShort
);
554 TESTCASE_AUTO(TestEnglishNoQuantityNarrow
);
555 TESTCASE_AUTO(TestSpanishNoQuantity
);
556 TESTCASE_AUTO(TestFormatWithQuantityIllegalArgument
);
557 TESTCASE_AUTO(TestFormatWithoutQuantityIllegalArgument
);
558 TESTCASE_AUTO(TestCustomNumberFormat
);
559 TESTCASE_AUTO(TestGetters
);
560 TESTCASE_AUTO(TestCombineDateAndTime
);
561 TESTCASE_AUTO(TestBadDisplayContext
);
562 TESTCASE_AUTO(TestSidewaysDataLoading
);
566 void RelativeDateTimeFormatterTest::TestEnglish() {
567 RunTest("en", kEnglish
, UPRV_LENGTHOF(kEnglish
));
570 void RelativeDateTimeFormatterTest::TestEnglishCaps() {
571 UErrorCode status
= U_ZERO_ERROR
;
572 RelativeDateTimeFormatter
fmt(
576 UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
,
578 if (U_FAILURE(status
)) {
579 dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_LONG, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, status); : %s", u_errorName(status
));
582 RelativeDateTimeFormatter
fmt3(status
);
584 // Test assignment and copy constructor with capitalization on.
585 RelativeDateTimeFormatter
fmt2(fmt
);
587 assertSuccess("", status
);
588 RunTest(fmt3
, kEnglishCaps
, UPRV_LENGTHOF(kEnglishCaps
), "en caps");
591 void RelativeDateTimeFormatterTest::TestEnglishShort() {
592 RunTest("en", UDAT_STYLE_SHORT
, kEnglishShort
, UPRV_LENGTHOF(kEnglishShort
));
595 void RelativeDateTimeFormatterTest::TestEnglishNarrow() {
596 RunTest("en", UDAT_STYLE_NARROW
, kEnglishShort
, UPRV_LENGTHOF(kEnglishShort
));
599 void RelativeDateTimeFormatterTest::TestSerbian() {
600 RunTest("sr", kSerbian
, UPRV_LENGTHOF(kSerbian
));
603 void RelativeDateTimeFormatterTest::TestSerbianFallback() {
604 RunTest("sr", UDAT_STYLE_NARROW
, kSerbianNarrow
, UPRV_LENGTHOF(kSerbianNarrow
));
607 void RelativeDateTimeFormatterTest::TestEnglishNoQuantity() {
608 RunTest("en", kEnglishNoQuantity
, UPRV_LENGTHOF(kEnglishNoQuantity
));
611 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityCaps() {
612 UErrorCode status
= U_ZERO_ERROR
;
613 RelativeDateTimeFormatter
fmt(
617 UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE
,
619 if (assertSuccess("RelativeDateTimeFormatter", status
, TRUE
) == FALSE
) {
624 kEnglishNoQuantityCaps
,
625 UPRV_LENGTHOF(kEnglishNoQuantityCaps
),
626 "en caps no quantity");
629 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityShort() {
633 kEnglishNoQuantityShort
,
634 UPRV_LENGTHOF(kEnglishNoQuantityShort
));
637 void RelativeDateTimeFormatterTest::TestEnglishNoQuantityNarrow() {
641 kEnglishNoQuantityNarrow
,
642 UPRV_LENGTHOF(kEnglishNoQuantityNarrow
));
645 void RelativeDateTimeFormatterTest::TestSpanishNoQuantity() {
646 RunTest("es", kSpanishNoQuantity
, UPRV_LENGTHOF(kSpanishNoQuantity
));
649 void RelativeDateTimeFormatterTest::TestFormatWithQuantityIllegalArgument() {
650 UErrorCode status
= U_ZERO_ERROR
;
651 RelativeDateTimeFormatter
fmt("en", status
);
652 if (U_FAILURE(status
)) {
653 dataerrln("Failure creating format object - %s", u_errorName(status
));
656 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_PLAIN
, UDAT_RELATIVE_DAYS
);
657 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_THIS
, UDAT_RELATIVE_DAYS
);
660 void RelativeDateTimeFormatterTest::TestFormatWithoutQuantityIllegalArgument() {
661 UErrorCode status
= U_ZERO_ERROR
;
662 RelativeDateTimeFormatter
fmt("en", status
);
663 if (U_FAILURE(status
)) {
664 dataerrln("Failure creating format object - %s", u_errorName(status
));
667 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_LAST
, UDAT_ABSOLUTE_NOW
);
668 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_NOW
);
669 VerifyIllegalArgument(fmt
, UDAT_DIRECTION_THIS
, UDAT_ABSOLUTE_NOW
);
672 void RelativeDateTimeFormatterTest::TestCustomNumberFormat() {
674 UErrorCode status
= U_ZERO_ERROR
;
676 RelativeDateTimeFormatter
fmt("en", status
);
677 if (U_FAILURE(status
)) {
679 "Failure creating format object - %s", u_errorName(status
));
682 nf
= (NumberFormat
*) fmt
.getNumberFormat().clone();
684 nf
->setMinimumFractionDigits(1);
685 nf
->setMaximumFractionDigits(1);
686 RelativeDateTimeFormatter
fmt("en", nf
, status
);
688 // Test copy constructor.
689 RelativeDateTimeFormatter
fmt2(fmt
);
690 RunTest(fmt2
, kEnglishDecimal
, UPRV_LENGTHOF(kEnglishDecimal
), "en decimal digits");
693 fmt
= RelativeDateTimeFormatter("es", status
);
694 RunTest(fmt
, kSpanishNoQuantity
, UPRV_LENGTHOF(kSpanishNoQuantity
), "assignment operator");
698 void RelativeDateTimeFormatterTest::TestGetters() {
699 UErrorCode status
= U_ZERO_ERROR
;
700 RelativeDateTimeFormatter
fmt(
704 UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE
,
706 if (U_FAILURE(status
)) {
707 dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_NARROW, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, status);) : %s", u_errorName(status
));
710 RelativeDateTimeFormatter
fmt3(status
);
712 // copy and assignment.
713 RelativeDateTimeFormatter
fmt2(fmt
);
715 assertEquals("style", UDAT_STYLE_NARROW
, fmt3
.getFormatStyle());
718 UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE
,
719 fmt3
.getCapitalizationContext());
720 assertSuccess("", status
);
723 void RelativeDateTimeFormatterTest::TestCombineDateAndTime() {
724 UErrorCode status
= U_ZERO_ERROR
;
725 RelativeDateTimeFormatter
fmt("en", status
);
726 if (U_FAILURE(status
)) {
727 dataerrln("Failure creating format object - %s", u_errorName(status
));
730 UnicodeString actual
;
731 fmt
.combineDateAndTime(
732 UnicodeString("yesterday"),
733 UnicodeString("3:50"),
736 UnicodeString
expected("yesterday, 3:50");
737 if (expected
!= actual
) {
738 errln("Expected "+expected
+", got "+actual
);
742 void RelativeDateTimeFormatterTest::TestBadDisplayContext() {
743 UErrorCode status
= U_ZERO_ERROR
;
744 RelativeDateTimeFormatter
fmt(
745 "en", NULL
, UDAT_STYLE_LONG
, UDISPCTX_STANDARD_NAMES
, status
);
746 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
747 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
753 void RelativeDateTimeFormatterTest::RunTest(
754 const Locale
& locale
,
755 const WithQuantityExpected
* expectedResults
,
756 int32_t expectedResultLength
) {
757 UErrorCode status
= U_ZERO_ERROR
;
758 RelativeDateTimeFormatter
fmt(locale
, status
);
759 if (U_FAILURE(status
)) {
760 dataerrln("Unable to create format object - %s", u_errorName(status
));
763 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
766 void RelativeDateTimeFormatterTest::RunTest(
767 const Locale
& locale
,
768 UDateRelativeDateTimeFormatterStyle style
,
769 const WithQuantityExpected
* expectedResults
,
770 int32_t expectedResultLength
) {
771 UErrorCode status
= U_ZERO_ERROR
;
772 RelativeDateTimeFormatter
fmt(
773 locale
, NULL
, style
, UDISPCTX_CAPITALIZATION_NONE
, status
);
774 if (U_FAILURE(status
)) {
775 dataerrln("Unable to create format object - %s", u_errorName(status
));
778 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
781 void RelativeDateTimeFormatterTest::RunTest(
782 const Locale
& locale
,
783 const WithoutQuantityExpected
* expectedResults
,
784 int32_t expectedResultLength
) {
785 UErrorCode status
= U_ZERO_ERROR
;
786 RelativeDateTimeFormatter
fmt(locale
, status
);
787 if (U_FAILURE(status
)) {
788 dataerrln("Unable to create format object - %s", u_errorName(status
));
791 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
794 void RelativeDateTimeFormatterTest::RunTest(
795 const Locale
& locale
,
796 UDateRelativeDateTimeFormatterStyle style
,
797 const WithoutQuantityExpected
* expectedResults
,
798 int32_t expectedResultLength
) {
799 UErrorCode status
= U_ZERO_ERROR
;
800 RelativeDateTimeFormatter
fmt(
801 locale
, NULL
, style
, UDISPCTX_CAPITALIZATION_NONE
, status
);
802 if (U_FAILURE(status
)) {
803 dataerrln("Unable to create format object - %s", u_errorName(status
));
806 RunTest(fmt
, expectedResults
, expectedResultLength
, locale
.getName());
809 void RelativeDateTimeFormatterTest::RunTest(
810 const RelativeDateTimeFormatter
& fmt
,
811 const WithQuantityExpected
* expectedResults
,
812 int32_t expectedResultLength
,
813 const char *description
) {
814 for (int32_t i
= 0; i
< expectedResultLength
; ++i
) {
815 CheckExpectedResult(fmt
, expectedResults
[i
], description
);
819 void RelativeDateTimeFormatterTest::RunTest(
820 const RelativeDateTimeFormatter
& fmt
,
821 const WithoutQuantityExpected
* expectedResults
,
822 int32_t expectedResultLength
,
823 const char *description
) {
824 for (int32_t i
= 0; i
< expectedResultLength
; ++i
) {
825 CheckExpectedResult(fmt
, expectedResults
[i
], description
);
829 void RelativeDateTimeFormatterTest::CheckExpectedResult(
830 const RelativeDateTimeFormatter
& fmt
,
831 const WithQuantityExpected
& expectedResult
,
832 const char* description
) {
833 UErrorCode status
= U_ZERO_ERROR
;
834 UnicodeString actual
;
835 fmt
.format(expectedResult
.value
, expectedResult
.direction
, expectedResult
.unit
, actual
, status
);
836 UnicodeString
expected(expectedResult
.expected
, -1, US_INV
);
837 expected
= expected
.unescape();
843 expectedResult
.value
,
844 DirectionStr(expectedResult
.direction
),
845 RelativeUnitStr(expectedResult
.unit
));
846 if (actual
!= expected
) {
847 errln(UnicodeString("Fail: Expected: ") + expected
849 + ", For: " + buffer
);
853 void RelativeDateTimeFormatterTest::CheckExpectedResult(
854 const RelativeDateTimeFormatter
& fmt
,
855 const WithoutQuantityExpected
& expectedResult
,
856 const char* description
) {
857 UErrorCode status
= U_ZERO_ERROR
;
858 UnicodeString actual
;
859 fmt
.format(expectedResult
.direction
, expectedResult
.unit
, actual
, status
);
860 UnicodeString
expected(expectedResult
.expected
, -1, US_INV
);
861 expected
= expected
.unescape();
867 DirectionStr(expectedResult
.direction
),
868 AbsoluteUnitStr(expectedResult
.unit
));
869 if (actual
!= expected
) {
870 errln(UnicodeString("Fail: Expected: ") + expected
872 + ", For: " + buffer
);
876 void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
877 const RelativeDateTimeFormatter
& fmt
,
878 UDateDirection direction
,
879 UDateRelativeUnit unit
) {
880 UnicodeString appendTo
;
881 UErrorCode status
= U_ZERO_ERROR
;
882 fmt
.format(1.0, direction
, unit
, appendTo
, status
);
883 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
884 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
888 void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
889 const RelativeDateTimeFormatter
& fmt
,
890 UDateDirection direction
,
891 UDateAbsoluteUnit unit
) {
892 UnicodeString appendTo
;
893 UErrorCode status
= U_ZERO_ERROR
;
894 fmt
.format(direction
, unit
, appendTo
, status
);
895 if (status
!= U_ILLEGAL_ARGUMENT_ERROR
) {
896 errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status
));
900 /* Add tests to check "sideways" data loading. */
901 void RelativeDateTimeFormatterTest::TestSidewaysDataLoading(void) {
902 UErrorCode status
= U_ZERO_ERROR
;
903 UnicodeString actual
;
904 UnicodeString expected
;
905 Locale
enGbLocale("en_GB");
907 RelativeDateTimeFormatter
fmt(enGbLocale
, NULL
, UDAT_STYLE_NARROW
,
908 UDISPCTX_CAPITALIZATION_NONE
, status
);
909 if (U_FAILURE(status
)) {
910 dataerrln("Unable to create RelativeDateTimeFormatter - %s", u_errorName(status
));
914 status
= U_ZERO_ERROR
;
916 fmt
.format(3.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_MONTHS
, actual
, status
);
917 expected
= "in 3 mo";
918 assertEquals("narrow in 3 mo", expected
, actual
);
920 fmt
.format(3.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, actual
.remove(), status
);
921 expected
= "3 days ago";
922 assertEquals("3 days ago (positive 3.0): ", expected
, actual
);
924 expected
= "-3 days ago";
925 fmt
.format(-3.0, UDAT_DIRECTION_LAST
, UDAT_RELATIVE_DAYS
, actual
.remove(), status
);
926 assertEquals("3 days ago (negative 3.0): ", expected
, actual
);
928 expected
= "next yr.";
929 fmt
.format(UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, actual
.remove(), status
);
930 assertEquals("next year: ", expected
, actual
);
932 // Testing the SHORT style
933 RelativeDateTimeFormatter
fmtshort(enGbLocale
, NULL
, UDAT_STYLE_SHORT
,
934 UDISPCTX_CAPITALIZATION_NONE
, status
);
936 fmtshort
.format(0.0, UDAT_DIRECTION_NEXT
, UDAT_RELATIVE_SECONDS
, actual
.remove(), status
);
938 expected
= "next yr.";
939 fmt
.format(UDAT_DIRECTION_NEXT
, UDAT_ABSOLUTE_YEAR
, actual
.remove(), status
);
940 assertEquals("next year: ", expected
, actual
);
943 static const char *kLast2
= "Last_2";
944 static const char *kLast
= "Last";
945 static const char *kThis
= "This";
946 static const char *kNext
= "Next";
947 static const char *kNext2
= "Next_2";
948 static const char *kPlain
= "Plain";
950 static const char *kSeconds
= "Seconds";
951 static const char *kMinutes
= "Minutes";
952 static const char *kHours
= "Hours";
953 static const char *kDays
= "Days";
954 static const char *kWeeks
= "Weeks";
955 static const char *kMonths
= "Months";
956 static const char *kYears
= "Years";
958 static const char *kSunday
= "Sunday";
959 static const char *kMonday
= "Monday";
960 static const char *kTuesday
= "Tuesday";
961 static const char *kWednesday
= "Wednesday";
962 static const char *kThursday
= "Thursday";
963 static const char *kFriday
= "Friday";
964 static const char *kSaturday
= "Saturday";
965 static const char *kDay
= "Day";
966 static const char *kWeek
= "Week";
967 static const char *kMonth
= "Month";
968 static const char *kYear
= "Year";
969 static const char *kNow
= "Now";
971 static const char *kUndefined
= "Undefined";
973 static const char *DirectionStr(
974 UDateDirection direction
) {
976 case UDAT_DIRECTION_LAST_2
:
978 case UDAT_DIRECTION_LAST
:
980 case UDAT_DIRECTION_THIS
:
982 case UDAT_DIRECTION_NEXT
:
984 case UDAT_DIRECTION_NEXT_2
:
986 case UDAT_DIRECTION_PLAIN
:
994 static const char *RelativeUnitStr(
995 UDateRelativeUnit unit
) {
997 case UDAT_RELATIVE_SECONDS
:
999 case UDAT_RELATIVE_MINUTES
:
1001 case UDAT_RELATIVE_HOURS
:
1003 case UDAT_RELATIVE_DAYS
:
1005 case UDAT_RELATIVE_WEEKS
:
1007 case UDAT_RELATIVE_MONTHS
:
1009 case UDAT_RELATIVE_YEARS
:
1017 static const char *AbsoluteUnitStr(
1018 UDateAbsoluteUnit unit
) {
1020 case UDAT_ABSOLUTE_SUNDAY
:
1022 case UDAT_ABSOLUTE_MONDAY
:
1024 case UDAT_ABSOLUTE_TUESDAY
:
1026 case UDAT_ABSOLUTE_WEDNESDAY
:
1028 case UDAT_ABSOLUTE_THURSDAY
:
1030 case UDAT_ABSOLUTE_FRIDAY
:
1032 case UDAT_ABSOLUTE_SATURDAY
:
1034 case UDAT_ABSOLUTE_DAY
:
1036 case UDAT_ABSOLUTE_WEEK
:
1038 case UDAT_ABSOLUTE_MONTH
:
1040 case UDAT_ABSOLUTE_YEAR
:
1042 case UDAT_ABSOLUTE_NOW
:
1050 extern IntlTest
*createRelativeDateTimeFormatterTest() {
1051 return new RelativeDateTimeFormatterTest();