Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1031)

Side by Side Diff: source/test/intltest/measfmttest.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/test/intltest/loctest.cpp ('k') | source/test/intltest/nptrans.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 *******************************************************************************
3 * Copyright (C) 2014, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
6 *
7 * File MEASFMTTEST.CPP
8 *
9 *******************************************************************************
10 */
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 #include "intltest.h"
15
16 #if !UCONFIG_NO_FORMATTING
17
18 #include "unicode/decimfmt.h"
19 #include "unicode/measfmt.h"
20 #include "unicode/measure.h"
21 #include "unicode/measunit.h"
22 #include "unicode/tmunit.h"
23 #include "unicode/plurrule.h"
24 #include "charstr.h"
25 #include "unicode/reldatefmt.h"
26
27 struct ExpectedResult {
28 const Measure *measures;
29 int32_t count;
30 const char *expected;
31 };
32
33 class MeasureFormatTest : public IntlTest {
34 public:
35 MeasureFormatTest() {
36 }
37
38 void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par= 0);
39 private:
40 void TestBasic();
41 void TestCompatible53_1();
42 void TestCompatible54_1();
43 void TestGetAvailable();
44 void TestExamplesInDocs();
45 void TestFormatPeriodEn();
46 void Test10219FractionalPlurals();
47 void TestGreek();
48 void TestFormatSingleArg();
49 void TestFormatMeasuresZeroArg();
50 void TestMultiplesWithPer();
51 void TestSimplePer();
52 void TestNumeratorPlurals();
53 void TestMultiples();
54 void TestGram();
55 void TestCurrencies();
56 void TestFieldPosition();
57 void TestFieldPositionMultiple();
58 void TestFieldPositionMultipleWithPer();
59 void TestBadArg();
60 void TestEquality();
61 void TestGroupingSeparator();
62 void TestDoubleZero();
63 void verifyFormat(
64 const char *description,
65 const MeasureFormat &fmt,
66 const Measure *measures,
67 int32_t measureCount,
68 const char *expected);
69 void verifyFormatWithPrefix(
70 const char *description,
71 const MeasureFormat &fmt,
72 const UnicodeString &prefix,
73 const Measure *measures,
74 int32_t measureCount,
75 const char *expected);
76 void verifyFormat(
77 const char *description,
78 const MeasureFormat &fmt,
79 const ExpectedResult *expectedResults,
80 int32_t count);
81 void helperTestSimplePer(
82 const Locale &locale,
83 UMeasureFormatWidth width,
84 double value,
85 const MeasureUnit &unit,
86 const MeasureUnit &perUnit,
87 const char *expected);
88 void helperTestMultiplesWithPer(
89 const Locale &locale,
90 UMeasureFormatWidth width,
91 const MeasureUnit &unit,
92 const char *expected);
93 void helperTestMultiples(
94 const Locale &locale,
95 UMeasureFormatWidth width,
96 const char *expected);
97 void verifyFieldPosition(
98 const char *description,
99 const MeasureFormat &fmt,
100 const UnicodeString &prefix,
101 const Measure *measures,
102 int32_t measureCount,
103 NumberFormat::EAlignmentFields field,
104 int32_t start,
105 int32_t end);
106 void verifyFieldPositionWithPer(
107 const char *description,
108 const MeasureFormat &fmt,
109 const UnicodeString &prefix,
110 const Measure *measures,
111 int32_t measureCount,
112 const MeasureUnit &perUnit,
113 NumberFormat::EAlignmentFields field,
114 int32_t start,
115 int32_t end);
116 };
117
118 void MeasureFormatTest::runIndexedTest(
119 int32_t index, UBool exec, const char *&name, char *) {
120 if (exec) {
121 logln("TestSuite MeasureFormatTest: ");
122 }
123 TESTCASE_AUTO_BEGIN;
124 TESTCASE_AUTO(TestBasic);
125 TESTCASE_AUTO(TestCompatible53_1);
126 TESTCASE_AUTO(TestCompatible54_1);
127 TESTCASE_AUTO(TestGetAvailable);
128 TESTCASE_AUTO(TestExamplesInDocs);
129 TESTCASE_AUTO(TestFormatPeriodEn);
130 TESTCASE_AUTO(Test10219FractionalPlurals);
131 TESTCASE_AUTO(TestGreek);
132 TESTCASE_AUTO(TestFormatSingleArg);
133 TESTCASE_AUTO(TestFormatMeasuresZeroArg);
134 TESTCASE_AUTO(TestMultiplesWithPer);
135 TESTCASE_AUTO(TestSimplePer);
136 TESTCASE_AUTO(TestNumeratorPlurals);
137 TESTCASE_AUTO(TestMultiples);
138 TESTCASE_AUTO(TestGram);
139 TESTCASE_AUTO(TestCurrencies);
140 TESTCASE_AUTO(TestFieldPosition);
141 TESTCASE_AUTO(TestFieldPositionMultiple);
142 TESTCASE_AUTO(TestFieldPositionMultipleWithPer);
143 TESTCASE_AUTO(TestBadArg);
144 TESTCASE_AUTO(TestEquality);
145 TESTCASE_AUTO(TestGroupingSeparator);
146 TESTCASE_AUTO(TestDoubleZero);
147 TESTCASE_AUTO_END;
148 }
149
150 void MeasureFormatTest::TestCompatible53_1() {
151 UErrorCode status = U_ZERO_ERROR;
152 LocalPointer<MeasureUnit> measureUnit;
153 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
154 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
155 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
156 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
157 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
158 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
159 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
160 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
161 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
162 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
163 measureUnit.adoptInstead(MeasureUnit::createDay(status));
164 measureUnit.adoptInstead(MeasureUnit::createHour(status));
165 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
166 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
167 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
168 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
169 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
170 measureUnit.adoptInstead(MeasureUnit::createYear(status));
171 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
172 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
173 measureUnit.adoptInstead(MeasureUnit::createInch(status));
174 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
175 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
176 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
177 measureUnit.adoptInstead(MeasureUnit::createMile(status));
178 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
179 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
180 measureUnit.adoptInstead(MeasureUnit::createYard(status));
181 measureUnit.adoptInstead(MeasureUnit::createGram(status));
182 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
183 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
184 measureUnit.adoptInstead(MeasureUnit::createPound(status));
185 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
186 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
187 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
188 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
189 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
190 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
191 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
192 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
193 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
194 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
195 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
196 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
197 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
198 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
199 assertSuccess("", status);
200 }
201
202 void MeasureFormatTest::TestCompatible54_1() {
203 UErrorCode status = U_ZERO_ERROR;
204 LocalPointer<MeasureUnit> measureUnit;
205 measureUnit.adoptInstead(MeasureUnit::createGForce(status));
206 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
207 measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
208 measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
209 measureUnit.adoptInstead(MeasureUnit::createDegree(status));
210 measureUnit.adoptInstead(MeasureUnit::createRadian(status));
211 measureUnit.adoptInstead(MeasureUnit::createAcre(status));
212 measureUnit.adoptInstead(MeasureUnit::createHectare(status));
213 measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
214 measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
215 measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
216 measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
217 measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
218 measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
219 measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
220 measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
221 measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
222 measureUnit.adoptInstead(MeasureUnit::createBit(status));
223 measureUnit.adoptInstead(MeasureUnit::createByte(status));
224 measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
225 measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
226 measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
227 measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
228 measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
229 measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
230 measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
231 measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
232 measureUnit.adoptInstead(MeasureUnit::createDay(status));
233 measureUnit.adoptInstead(MeasureUnit::createHour(status));
234 measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
235 measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
236 measureUnit.adoptInstead(MeasureUnit::createMinute(status));
237 measureUnit.adoptInstead(MeasureUnit::createMonth(status));
238 measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
239 measureUnit.adoptInstead(MeasureUnit::createSecond(status));
240 measureUnit.adoptInstead(MeasureUnit::createWeek(status));
241 measureUnit.adoptInstead(MeasureUnit::createYear(status));
242 measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
243 measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
244 measureUnit.adoptInstead(MeasureUnit::createOhm(status));
245 measureUnit.adoptInstead(MeasureUnit::createVolt(status));
246 measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
247 measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
248 measureUnit.adoptInstead(MeasureUnit::createJoule(status));
249 measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
250 measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
251 measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
252 measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
253 measureUnit.adoptInstead(MeasureUnit::createHertz(status));
254 measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
255 measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
256 measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
257 measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
258 measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
259 measureUnit.adoptInstead(MeasureUnit::createFathom(status));
260 measureUnit.adoptInstead(MeasureUnit::createFoot(status));
261 measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
262 measureUnit.adoptInstead(MeasureUnit::createInch(status));
263 measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
264 measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
265 measureUnit.adoptInstead(MeasureUnit::createMeter(status));
266 measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
267 measureUnit.adoptInstead(MeasureUnit::createMile(status));
268 measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
269 measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
270 measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
271 measureUnit.adoptInstead(MeasureUnit::createParsec(status));
272 measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
273 measureUnit.adoptInstead(MeasureUnit::createYard(status));
274 measureUnit.adoptInstead(MeasureUnit::createLux(status));
275 measureUnit.adoptInstead(MeasureUnit::createCarat(status));
276 measureUnit.adoptInstead(MeasureUnit::createGram(status));
277 measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
278 measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
279 measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
280 measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
281 measureUnit.adoptInstead(MeasureUnit::createOunce(status));
282 measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
283 measureUnit.adoptInstead(MeasureUnit::createPound(status));
284 measureUnit.adoptInstead(MeasureUnit::createStone(status));
285 measureUnit.adoptInstead(MeasureUnit::createTon(status));
286 measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
287 measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
288 measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
289 measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
290 measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
291 measureUnit.adoptInstead(MeasureUnit::createWatt(status));
292 measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
293 measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
294 measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
295 measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
296 measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
297 measureUnit.adoptInstead(MeasureUnit::createKarat(status));
298 measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
299 measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
300 measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
301 measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
302 measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
303 measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
304 measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
305 measureUnit.adoptInstead(MeasureUnit::createBushel(status));
306 measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
307 measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
308 measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
309 measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
310 measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
311 measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
312 measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
313 measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
314 measureUnit.adoptInstead(MeasureUnit::createCup(status));
315 measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
316 measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
317 measureUnit.adoptInstead(MeasureUnit::createGallon(status));
318 measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
319 measureUnit.adoptInstead(MeasureUnit::createLiter(status));
320 measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
321 measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
322 measureUnit.adoptInstead(MeasureUnit::createPint(status));
323 measureUnit.adoptInstead(MeasureUnit::createQuart(status));
324 measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
325 measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
326 assertSuccess("", status);
327 }
328
329 void MeasureFormatTest::TestBasic() {
330 UErrorCode status = U_ZERO_ERROR;
331 MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status);
332 MeasureUnit *ptr2 = MeasureUnit::createArcMinute(status);
333 if (!(*ptr1 == *ptr2)) {
334 errln("Expect == to work.");
335 }
336 if (*ptr1 != *ptr2) {
337 errln("Expect != to work.");
338 }
339 MeasureUnit *ptr3 = MeasureUnit::createMeter(status);
340 if (*ptr1 == *ptr3) {
341 errln("Expect == to work.");
342 }
343 if (!(*ptr1 != *ptr3)) {
344 errln("Expect != to work.");
345 }
346 MeasureUnit *ptr4 = (MeasureUnit *) ptr1->clone();
347 if (*ptr1 != *ptr4) {
348 errln("Expect clone to work.");
349 }
350 MeasureUnit stack;
351 stack = *ptr1;
352 if (*ptr1 != stack) {
353 errln("Expect assignment to work.");
354 }
355
356 delete ptr1;
357 delete ptr2;
358 delete ptr3;
359 delete ptr4;
360 }
361
362 void MeasureFormatTest::TestGetAvailable() {
363 MeasureUnit *units = NULL;
364 UErrorCode status = U_ZERO_ERROR;
365 int32_t totalCount = MeasureUnit::getAvailable(units, 0, status);
366 while (status == U_BUFFER_OVERFLOW_ERROR) {
367 status = U_ZERO_ERROR;
368 delete [] units;
369 units = new MeasureUnit[totalCount];
370 totalCount = MeasureUnit::getAvailable(units, totalCount, status);
371 }
372 if (U_FAILURE(status)) {
373 dataerrln("Failure creating format object - %s", u_errorName(status));
374 delete [] units;
375 return;
376 }
377 if (totalCount < 200) {
378 errln("Expect at least 200 measure units including currencies.");
379 }
380 delete [] units;
381 StringEnumeration *types = MeasureUnit::getAvailableTypes(status);
382 if (U_FAILURE(status)) {
383 dataerrln("Failure getting types - %s", u_errorName(status));
384 delete types;
385 return;
386 }
387 if (types->count(status) < 10) {
388 errln("Expect at least 10 distinct unit types.");
389 }
390 units = NULL;
391 int32_t unitCapacity = 0;
392 int32_t unitCountSum = 0;
393 for (
394 const char* type = types->next(NULL, status);
395 type != NULL;
396 type = types->next(NULL, status)) {
397 int32_t unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, status);
398 while (status == U_BUFFER_OVERFLOW_ERROR) {
399 status = U_ZERO_ERROR;
400 delete [] units;
401 units = new MeasureUnit[unitCount];
402 unitCapacity = unitCount;
403 unitCount = MeasureUnit::getAvailable(type, units, unitCapacity, sta tus);
404 }
405 if (U_FAILURE(status)) {
406 dataerrln("Failure getting units - %s", u_errorName(status));
407 delete [] units;
408 delete types;
409 return;
410 }
411 if (unitCount < 1) {
412 errln("Expect at least one unit count per type.");
413 }
414 unitCountSum += unitCount;
415 }
416 if (unitCountSum != totalCount) {
417 errln("Expected total unit count to equal sum of unit counts by type.");
418 }
419 delete [] units;
420 delete types;
421 }
422
423 void MeasureFormatTest::TestExamplesInDocs() {
424 UErrorCode status = U_ZERO_ERROR;
425 MeasureFormat fmtFr(Locale::getFrench(), UMEASFMT_WIDTH_SHORT, status);
426 MeasureFormat fmtFrFull(
427 Locale::getFrench(), UMEASFMT_WIDTH_WIDE, status);
428 MeasureFormat fmtFrNarrow(
429 Locale::getFrench(), UMEASFMT_WIDTH_NARROW, status);
430 MeasureFormat fmtEn(Locale::getUS(), UMEASFMT_WIDTH_WIDE, status);
431 if (!assertSuccess("Error creating formatters", status)) {
432 return;
433 }
434 Measure measureC(23, MeasureUnit::createCelsius(status), status);
435 Measure measureF(70, MeasureUnit::createFahrenheit(status), status);
436 Measure feetAndInches[] = {
437 Measure(70, MeasureUnit::createFoot(status), status),
438 Measure(5.3, MeasureUnit::createInch(status), status)};
439 Measure footAndInch[] = {
440 Measure(1, MeasureUnit::createFoot(status), status),
441 Measure(1, MeasureUnit::createInch(status), status)};
442 Measure inchAndFeet[] = {
443 Measure(1, MeasureUnit::createInch(status), status),
444 Measure(2, MeasureUnit::createFoot(status), status)};
445 if (!assertSuccess("Error creating measurements.", status)) {
446 return;
447 }
448 verifyFormat(
449 "Celsius",
450 fmtFr,
451 &measureC,
452 1,
453 "23 \\u00B0C");
454 verifyFormatWithPrefix(
455 "Celsius",
456 fmtFr,
457 "Prefix: ",
458 &measureC,
459 1,
460 "Prefix: 23 \\u00B0C");
461 verifyFormat(
462 "Fahrenheit",
463 fmtFr,
464 &measureF,
465 1,
466 "70 \\u00B0F");
467 verifyFormat(
468 "Feet and inches",
469 fmtFrFull,
470 feetAndInches,
471 UPRV_LENGTHOF(feetAndInches),
472 "70 pieds et 5,3 pouces");
473 verifyFormatWithPrefix(
474 "Feet and inches",
475 fmtFrFull,
476 "Prefix: ",
477 feetAndInches,
478 UPRV_LENGTHOF(feetAndInches),
479 "Prefix: 70 pieds et 5,3 pouces");
480 verifyFormat(
481 "Foot and inch",
482 fmtFrFull,
483 footAndInch,
484 UPRV_LENGTHOF(footAndInch),
485 "1 pied et 1 pouce");
486 verifyFormat(
487 "Foot and inch narrow",
488 fmtFrNarrow,
489 footAndInch,
490 UPRV_LENGTHOF(footAndInch),
491 "1\\u2032 1\\u2033");
492 verifyFormat(
493 "Inch and feet",
494 fmtEn,
495 inchAndFeet,
496 UPRV_LENGTHOF(inchAndFeet),
497 "1 inch, 2 feet");
498 }
499
500 void MeasureFormatTest::TestFormatPeriodEn() {
501 UErrorCode status = U_ZERO_ERROR;
502 Measure t_19m[] = {Measure(19, MeasureUnit::createMinute(status), status)};
503 Measure t_1h_23_5s[] = {
504 Measure(1.0, MeasureUnit::createHour(status), status),
505 Measure(23.5, MeasureUnit::createSecond(status), status)
506 };
507 Measure t_1h_23_5m[] = {
508 Measure(1.0, MeasureUnit::createHour(status), status),
509 Measure(23.5, MeasureUnit::createMinute(status), status)
510 };
511 Measure t_1h_0m_23s[] = {
512 Measure(
513 1.0,
514 TimeUnit::createInstance(
515 TimeUnit::UTIMEUNIT_HOUR, status),
516 status),
517 Measure(
518 0.0,
519 TimeUnit::createInstance(
520 TimeUnit::UTIMEUNIT_MINUTE, status),
521 status),
522 Measure(
523 23,
524 TimeUnit::createInstance(
525 TimeUnit::UTIMEUNIT_SECOND, status),
526 status)
527 };
528 Measure t_2y_5M_3w_4d[] = {
529 Measure(2.0, MeasureUnit::createYear(status), status),
530 Measure(5.0, MeasureUnit::createMonth(status), status),
531 Measure(3.0, MeasureUnit::createWeek(status), status),
532 Measure(4.0, MeasureUnit::createDay(status), status)
533 };
534 Measure t_1m_59_9996s[] = {
535 Measure(1.0, MeasureUnit::createMinute(status), status),
536 Measure(59.9996, MeasureUnit::createSecond(status), status)
537 };
538 Measure t_5h_17m[] = {
539 Measure(5.0, MeasureUnit::createHour(status), status),
540 Measure(17.0, MeasureUnit::createMinute(status), status)
541 };
542 Measure t_neg5h_17m[] = {
543 Measure(-5.0, MeasureUnit::createHour(status), status),
544 Measure(17.0, MeasureUnit::createMinute(status), status)
545 };
546 Measure t_19m_28s[] = {
547 Measure(19.0, MeasureUnit::createMinute(status), status),
548 Measure(28.0, MeasureUnit::createSecond(status), status)
549 };
550 Measure t_0h_0m_9s[] = {
551 Measure(0.0, MeasureUnit::createHour(status), status),
552 Measure(0.0, MeasureUnit::createMinute(status), status),
553 Measure(9.0, MeasureUnit::createSecond(status), status)
554 };
555 Measure t_0h_0m_17s[] = {
556 Measure(0.0, MeasureUnit::createHour(status), status),
557 Measure(0.0, MeasureUnit::createMinute(status), status),
558 Measure(17.0, MeasureUnit::createSecond(status), status)
559 };
560 Measure t_6h_56_92m[] = {
561 Measure(6.0, MeasureUnit::createHour(status), status),
562 Measure(56.92, MeasureUnit::createMinute(status), status)
563 };
564 Measure t_3h_4s_5m[] = {
565 Measure(3.0, MeasureUnit::createHour(status), status),
566 Measure(4.0, MeasureUnit::createSecond(status), status),
567 Measure(5.0, MeasureUnit::createMinute(status), status)
568 };
569 Measure t_6_7h_56_92m[] = {
570 Measure(6.7, MeasureUnit::createHour(status), status),
571 Measure(56.92, MeasureUnit::createMinute(status), status)
572 };
573
574 Measure t_3h_5h[] = {
575 Measure(3.0, MeasureUnit::createHour(status), status),
576 Measure(5.0, MeasureUnit::createHour(status), status)
577 };
578
579 if (!assertSuccess("Error creating Measure objects", status)) {
580 return;
581 }
582
583 ExpectedResult fullData[] = {
584 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 minute, 59.9996 sec onds"},
585 {t_19m, UPRV_LENGTHOF(t_19m), "19 minutes"},
586 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hour, 23.5 seconds"},
587 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hour, 23.5 minutes"},
588 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hour, 0 minutes, 23 sec onds"},
589 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 years, 5 months, 3 weeks, 4 days"}};
590
591 ExpectedResult abbrevData[] = {
592 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 min, 59.9996 secs"} ,
593 {t_19m, UPRV_LENGTHOF(t_19m), "19 mins"},
594 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 hr, 23.5 secs"},
595 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 hr, 23.5 mins"},
596 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 hr, 0 mins, 23 secs"},
597 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 yrs, 5 mths, 3 wks, 4 days"}};
598
599 ExpectedResult narrowData[] = {
600 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1m 59.9996s"},
601 {t_19m, UPRV_LENGTHOF(t_19m), "19m"},
602 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1h 23.5s"},
603 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1h 23.5m"},
604 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1h 0m 23s"},
605 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"}};
606
607 ExpectedResult numericData[] = {
608 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59.9996"},
609 {t_19m, UPRV_LENGTHOF(t_19m), "19m"},
610 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23.5"},
611 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23.5"},
612 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"},
613 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"},
614 {t_neg5h_17m, UPRV_LENGTHOF(t_neg5h_17m), "-5h 17m"},
615 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"},
616 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2y 5m 3w 4d"},
617 {t_0h_0m_9s, UPRV_LENGTHOF(t_0h_0m_9s), "0:00:09"},
618 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56.92"},
619 {t_6_7h_56_92m, UPRV_LENGTHOF(t_6_7h_56_92m), "6:56.92"},
620 {t_3h_4s_5m, UPRV_LENGTHOF(t_3h_4s_5m), "3h 4s 5m"},
621 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3h 5h"}};
622
623 ExpectedResult fullDataDe[] = {
624 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 Minute und 59,9996 Sekunden"},
625 {t_19m, UPRV_LENGTHOF(t_19m), "19 Minuten"},
626 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 Stunde und 23,5 Sekunden" },
627 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 Stunde und 23,5 Minuten"} ,
628 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 Stunde, 0 Minuten und 2 3 Sekunden"},
629 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 Jahre, 5 Monate, 3 Wochen und 4 Tage"}};
630
631 ExpectedResult numericDataDe[] = {
632 {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1:59,9996"},
633 {t_19m, UPRV_LENGTHOF(t_19m), "19 Min."},
634 {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1:00:23,5"},
635 {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1:23,5"},
636 {t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1:00:23"},
637 {t_5h_17m, UPRV_LENGTHOF(t_5h_17m), "5:17"},
638 {t_19m_28s, UPRV_LENGTHOF(t_19m_28s), "19:28"},
639 {t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 J, 5 M, 3 W und 4 T "},
640 {t_0h_0m_17s, UPRV_LENGTHOF(t_0h_0m_17s), "0:00:17"},
641 {t_6h_56_92m, UPRV_LENGTHOF(t_6h_56_92m), "6:56,92"},
642 {t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3 Std., 5 Std."}};
643
644 Locale en(Locale::getEnglish());
645 LocalPointer<NumberFormat> nf(NumberFormat::createInstance(en, status));
646 if (U_FAILURE(status)) {
647 dataerrln("Error creating number format en object - %s", u_errorName(sta tus));
648 return;
649 }
650 nf->setMaximumFractionDigits(4);
651 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, (NumberFormat *) nf->clone(), stat us);
652 if (!assertSuccess("Error creating measure format en WIDE", status)) {
653 return;
654 }
655 verifyFormat("en WIDE", mf, fullData, UPRV_LENGTHOF(fullData));
656
657 // exercise copy constructor
658 {
659 MeasureFormat mf2(mf);
660 verifyFormat("en WIDE copy", mf2, fullData, UPRV_LENGTHOF(fullData));
661 }
662 // exercise clone
663 {
664 MeasureFormat *mf3 = (MeasureFormat *) mf.clone();
665 verifyFormat("en WIDE copy", *mf3, fullData, UPRV_LENGTHOF(fullData));
666 delete mf3;
667 }
668 mf = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, (NumberFormat *) nf->clone(), s tatus);
669 if (!assertSuccess("Error creating measure format en SHORT", status)) {
670 return;
671 }
672 verifyFormat("en SHORT", mf, abbrevData, UPRV_LENGTHOF(abbrevData));
673 mf = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, (NumberFormat *) nf->clone(), status);
674 if (!assertSuccess("Error creating measure format en NARROW", status)) {
675 return;
676 }
677 verifyFormat("en NARROW", mf, narrowData, UPRV_LENGTHOF(narrowData));
678 mf = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, (NumberFormat *) nf->clone(), status);
679 if (!assertSuccess("Error creating measure format en NUMERIC", status)) {
680 return;
681 }
682 verifyFormat("en NUMERIC", mf, numericData, UPRV_LENGTHOF(numericData));
683
684 Locale de(Locale::getGerman());
685 nf.adoptInstead(NumberFormat::createInstance(de, status));
686 if (!assertSuccess("Error creating number format de object", status)) {
687 return;
688 }
689 nf->setMaximumFractionDigits(4);
690 mf = MeasureFormat(de, UMEASFMT_WIDTH_WIDE, (NumberFormat *) nf->clone(), st atus);
691 if (!assertSuccess("Error creating measure format de WIDE", status)) {
692 return;
693 }
694 verifyFormat("de WIDE", mf, fullDataDe, UPRV_LENGTHOF(fullDataDe));
695 mf = MeasureFormat(de, UMEASFMT_WIDTH_NUMERIC, (NumberFormat *) nf->clone(), status);
696 if (!assertSuccess("Error creating measure format de NUMERIC", status)) {
697 return;
698 }
699 verifyFormat("de NUMERIC", mf, numericDataDe, UPRV_LENGTHOF(numericDataDe));
700 }
701
702 void MeasureFormatTest::Test10219FractionalPlurals() {
703 Locale en(Locale::getEnglish());
704 double values[] = {1.588, 1.011};
705 const char *expected[2][3] = {
706 {"1 minute", "1.5 minutes", "1.58 minutes"},
707 {"1 minute", "1.0 minutes", "1.01 minutes"}
708 };
709 UErrorCode status = U_ZERO_ERROR;
710 for (int j = 0; j < UPRV_LENGTHOF(values); j++) {
711 for (int i = 0; i < UPRV_LENGTHOF(expected[j]); i++) {
712 DecimalFormat *df =
713 (DecimalFormat *) NumberFormat::createInstance(en, status);
714 if (U_FAILURE(status)) {
715 dataerrln("Error creating Number format - %s", u_errorName(statu s));
716 return;
717 }
718 df->setRoundingMode(DecimalFormat::kRoundDown);
719 df->setMinimumFractionDigits(i);
720 df->setMaximumFractionDigits(i);
721 MeasureFormat mf(en, UMEASFMT_WIDTH_WIDE, df, status);
722 if (!assertSuccess("Error creating Measure format", status)) {
723 return;
724 }
725 Measure measure(values[j], MeasureUnit::createMinute(status), status );
726 if (!assertSuccess("Error creating Measure unit", status)) {
727 return;
728 }
729 verifyFormat("Test10219", mf, &measure, 1, expected[j][i]);
730 }
731 }
732 }
733
734 static MeasureUnit toMeasureUnit(MeasureUnit *adopted) {
735 MeasureUnit result(*adopted);
736 delete adopted;
737 return result;
738 }
739
740 void MeasureFormatTest::TestGreek() {
741 Locale locales[] = {Locale("el_GR"), Locale("el")};
742 UErrorCode status = U_ZERO_ERROR;
743 MeasureUnit units[] = {
744 toMeasureUnit(MeasureUnit::createSecond(status)),
745 toMeasureUnit(MeasureUnit::createMinute(status)),
746 toMeasureUnit(MeasureUnit::createHour(status)),
747 toMeasureUnit(MeasureUnit::createDay(status)),
748 toMeasureUnit(MeasureUnit::createWeek(status)),
749 toMeasureUnit(MeasureUnit::createMonth(status)),
750 toMeasureUnit(MeasureUnit::createYear(status))};
751 if (!assertSuccess("Error creating Measure units", status)) {
752 return;
753 }
754 UMeasureFormatWidth styles[] = {
755 UMEASFMT_WIDTH_WIDE,
756 UMEASFMT_WIDTH_SHORT};
757 int32_t numbers[] = {1, 7};
758 const char *expected[] = {
759 // "el_GR" 1 wide
760 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C 0\\u03C4\\u03BF",
761 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC",
762 "1 \\u03CE\\u03C1\\u03B1",
763 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
764 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1",
765 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2",
766 "1 \\u03AD\\u03C4\\u03BF\\u03C2",
767 // "el_GR" 1 short
768 "1 \\u03B4\\u03B5\\u03C5\\u03C4.",
769 "1 \\u03BB\\u03B5\\u03C0.",
770 "1 \\u03CE\\u03C1\\u03B1",
771 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
772 "1 \\u03B5\\u03B2\\u03B4.",
773 "1 \\u03BC\\u03AE\\u03BD.",
774 "1 \\u03AD\\u03C4.", // year (one)
775 // "el_GR" 7 wide
776 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C 0\\u03C4\\u03B1",
777 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC",
778 "7 \\u03CE\\u03C1\\u03B5\\u03C2",
779 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
780 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2",
781 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2",
782 "7 \\u03AD\\u03C4\\u03B7",
783 // "el_GR" 7 short
784 "7 \\u03B4\\u03B5\\u03C5\\u03C4.",
785 "7 \\u03BB\\u03B5\\u03C0.",
786 "7 \\u03CE\\u03C1.", // hour (other)
787 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
788 "7 \\u03B5\\u03B2\\u03B4.",
789 "7 \\u03BC\\u03AE\\u03BD.",
790 "7 \\u03AD\\u03C4.", // year (other)
791
792 // "el" 1 wide
793 "1 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C 0\\u03C4\\u03BF",
794 "1 \\u03BB\\u03B5\\u03C0\\u03C4\\u03CC",
795 "1 \\u03CE\\u03C1\\u03B1",
796 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
797 "1 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B1",
798 "1 \\u03BC\\u03AE\\u03BD\\u03B1\\u03C2",
799 "1 \\u03AD\\u03C4\\u03BF\\u03C2",
800 // "el" 1 short
801 "1 \\u03B4\\u03B5\\u03C5\\u03C4.",
802 "1 \\u03BB\\u03B5\\u03C0.",
803 "1 \\u03CE\\u03C1\\u03B1",
804 "1 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B1",
805 "1 \\u03B5\\u03B2\\u03B4.",
806 "1 \\u03BC\\u03AE\\u03BD.",
807 "1 \\u03AD\\u03C4.", // year (one)
808 // "el" 7 wide
809 "7 \\u03B4\\u03B5\\u03C5\\u03C4\\u03B5\\u03C1\\u03CC\\u03BB\\u03B5\\u03C 0\\u03C4\\u03B1",
810 "7 \\u03BB\\u03B5\\u03C0\\u03C4\\u03AC",
811 "7 \\u03CE\\u03C1\\u03B5\\u03C2",
812 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
813 "7 \\u03B5\\u03B2\\u03B4\\u03BF\\u03BC\\u03AC\\u03B4\\u03B5\\u03C2",
814 "7 \\u03BC\\u03AE\\u03BD\\u03B5\\u03C2",
815 "7 \\u03AD\\u03C4\\u03B7",
816 // "el" 7 short
817 "7 \\u03B4\\u03B5\\u03C5\\u03C4.",
818 "7 \\u03BB\\u03B5\\u03C0.",
819 "7 \\u03CE\\u03C1.", // hour (other)
820 "7 \\u03B7\\u03BC\\u03AD\\u03C1\\u03B5\\u03C2",
821 "7 \\u03B5\\u03B2\\u03B4.",
822 "7 \\u03BC\\u03AE\\u03BD.",
823 "7 \\u03AD\\u03C4."}; // year (other)
824
825 int32_t counter = 0;
826 for (int32_t locIndex = 0; locIndex < UPRV_LENGTHOF(locales); ++locIndex ) {
827 for( int32_t numIndex = 0; numIndex < UPRV_LENGTHOF(numbers); ++numIndex ) {
828 for ( int32_t styleIndex = 0; styleIndex < UPRV_LENGTHOF(styles); ++ styleIndex ) {
829 for ( int32_t unitIndex = 0; unitIndex < UPRV_LENGTHOF(units); + +unitIndex ) {
830 Measure measure(numbers[numIndex], new MeasureUnit(units[uni tIndex]), status);
831 if (!assertSuccess("Error creating Measure", status)) {
832 return;
833 }
834 MeasureFormat fmt(locales[locIndex], styles[styleIndex], sta tus);
835 if (!assertSuccess("Error creating Measure format", status)) {
836 return;
837 }
838 verifyFormat("TestGreek", fmt, &measure, 1, expected[counter ]);
839 ++counter;
840 }
841 }
842 }
843 }
844 }
845
846 void MeasureFormatTest::TestFormatSingleArg() {
847 UErrorCode status = U_ZERO_ERROR;
848 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status);
849 if (!assertSuccess("Error creating formatter", status)) {
850 return;
851 }
852 UnicodeString buffer;
853 FieldPosition pos(0);
854 fmt.format(
855 new Measure(3.5, MeasureUnit::createFoot(status), status),
856 buffer,
857 pos,
858 status);
859 if (!assertSuccess("Error formatting", status)) {
860 return;
861 }
862 assertEquals(
863 "TestFormatSingleArg",
864 UnicodeString("3.5 feet"),
865 buffer);
866 }
867
868 void MeasureFormatTest::TestFormatMeasuresZeroArg() {
869 UErrorCode status = U_ZERO_ERROR;
870 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, status);
871 verifyFormat("TestFormatMeasuresZeroArg", fmt, NULL, 0, "");
872 }
873
874 void MeasureFormatTest::TestMultiplesWithPer() {
875 Locale en("en");
876 UErrorCode status = U_ZERO_ERROR;
877 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status));
878 LocalPointer<MeasureUnit> minute(MeasureUnit::createMinute(status));
879 if (!assertSuccess("", status)) {
880 return;
881 }
882
883 // Per unit test.
884 helperTestMultiplesWithPer(
885 en, UMEASFMT_WIDTH_WIDE, *second, "2 miles, 1 foot, 2.3 inches per s econd");
886 helperTestMultiplesWithPer(
887 en, UMEASFMT_WIDTH_SHORT, *second, "2 mi, 1 ft, 2.3 inps");
888 helperTestMultiplesWithPer(
889 en, UMEASFMT_WIDTH_NARROW, *second, "2mi 1\\u2032 2.3\\u2033/s");
890
891 // Fallback compound per test
892 helperTestMultiplesWithPer(
893 en, UMEASFMT_WIDTH_WIDE, *minute, "2 miles, 1 foot, 2.3 inches per m inute");
894 helperTestMultiplesWithPer(
895 en, UMEASFMT_WIDTH_SHORT, *minute, "2 mi, 1 ft, 2.3 in/min");
896 helperTestMultiplesWithPer(
897 en, UMEASFMT_WIDTH_NARROW, *minute, "2mi 1\\u2032 2.3\\u2033/m");
898 }
899
900 void MeasureFormatTest::TestSimplePer() {
901 Locale en("en");
902 UErrorCode status = U_ZERO_ERROR;
903 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status));
904 LocalPointer<MeasureUnit> minute(MeasureUnit::createMinute(status));
905 LocalPointer<MeasureUnit> pound(MeasureUnit::createPound(status));
906 if (!assertSuccess("", status)) {
907 return;
908 }
909
910 helperTestSimplePer(
911 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *second, "1 lbps");
912 helperTestSimplePer(
913 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *second, "2 lbps");
914 helperTestSimplePer(
915 en, UMEASFMT_WIDTH_SHORT, 1.0, *pound, *minute, "1 lb/min");
916 helperTestSimplePer(
917 en, UMEASFMT_WIDTH_SHORT, 2.0, *pound, *minute, "2 lb/min");
918 }
919
920 void MeasureFormatTest::TestNumeratorPlurals() {
921 Locale pl("pl");
922 UErrorCode status = U_ZERO_ERROR;
923 LocalPointer<MeasureUnit> second(MeasureUnit::createSecond(status));
924 LocalPointer<MeasureUnit> foot(MeasureUnit::createFoot(status));
925 if (!assertSuccess("", status)) {
926 return;
927 }
928
929 helperTestSimplePer(
930 pl, UMEASFMT_WIDTH_WIDE, 1.0, *foot, *second, "1 stopa na sekund\\u0 119");
931 helperTestSimplePer(
932 pl, UMEASFMT_WIDTH_WIDE, 2.0, *foot, *second, "2 stopy na sekund\\u0 119");
933 helperTestSimplePer(
934 pl, UMEASFMT_WIDTH_WIDE, 5.0, *foot, *second, "5 st\\u00f3p na sekun d\\u0119");
935 helperTestSimplePer(
936 pl, UMEASFMT_WIDTH_WIDE, 1.5, *foot, *second, "1,5 stopy na sekund\\ u0119");
937 }
938
939 void MeasureFormatTest::helperTestSimplePer(
940 const Locale &locale,
941 UMeasureFormatWidth width,
942 double value,
943 const MeasureUnit &unit,
944 const MeasureUnit &perUnit,
945 const char *expected) {
946 UErrorCode status = U_ZERO_ERROR;
947 FieldPosition pos(0);
948 MeasureFormat fmt(locale, width, status);
949 if (!assertSuccess("Error creating format object", status)) {
950 return;
951 }
952 Measure measure(value, (MeasureUnit *) unit.clone(), status);
953 if (!assertSuccess("Error creating measure object", status)) {
954 return;
955 }
956 UnicodeString buffer;
957 fmt.formatMeasuresPer(
958 &measure,
959 1,
960 perUnit,
961 buffer,
962 pos,
963 status);
964 if (!assertSuccess("Error formatting measures with per", status)) {
965 return;
966 }
967 assertEquals(
968 "TestSimplePer",
969 UnicodeString(expected).unescape(),
970 buffer);
971 }
972
973 void MeasureFormatTest::helperTestMultiplesWithPer(
974 const Locale &locale,
975 UMeasureFormatWidth width,
976 const MeasureUnit &perUnit,
977 const char *expected) {
978 UErrorCode status = U_ZERO_ERROR;
979 FieldPosition pos(0);
980 MeasureFormat fmt(locale, width, status);
981 if (!assertSuccess("Error creating format object", status)) {
982 return;
983 }
984 Measure measures[] = {
985 Measure(2, MeasureUnit::createMile(status), status),
986 Measure(1, MeasureUnit::createFoot(status), status),
987 Measure(2.3, MeasureUnit::createInch(status), status)};
988 if (!assertSuccess("Error creating measures", status)) {
989 return;
990 }
991 UnicodeString buffer;
992 fmt.formatMeasuresPer(
993 measures,
994 UPRV_LENGTHOF(measures),
995 perUnit,
996 buffer,
997 pos,
998 status);
999 if (!assertSuccess("Error formatting measures with per", status)) {
1000 return;
1001 }
1002 assertEquals(
1003 "TestMultiplesWithPer",
1004 UnicodeString(expected).unescape(),
1005 buffer);
1006 }
1007
1008 void MeasureFormatTest::TestMultiples() {
1009 Locale ru("ru");
1010 Locale en("en");
1011 helperTestMultiples(en, UMEASFMT_WIDTH_WIDE, "2 miles, 1 foot, 2.3 inches");
1012 helperTestMultiples(en, UMEASFMT_WIDTH_SHORT, "2 mi, 1 ft, 2.3 in");
1013 helperTestMultiples(en, UMEASFMT_WIDTH_NARROW, "2mi 1\\u2032 2.3\\u2033");
1014 helperTestMultiples(ru, UMEASFMT_WIDTH_WIDE, "2 \\u043C\\u0438\\u043B\\u0438 , 1 \\u0444\\u0443\\u0442 \\u0438 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
1015 helperTestMultiples(ru, UMEASFMT_WIDTH_SHORT, "2 \\u043C\\u0438\\u043B\\u043 8, 1 \\u0444\\u0443\\u0442, 2,3 \\u0434\\u044E\\u0439\\u043C.");
1016 helperTestMultiples(ru, UMEASFMT_WIDTH_NARROW, "2 \\u043C\\u0438\\u043B\\u04 4C 1 \\u0444\\u0443\\u0442 2,3 \\u0434\\u044E\\u0439\\u043C\\u0430");
1017 }
1018
1019 void MeasureFormatTest::helperTestMultiples(
1020 const Locale &locale,
1021 UMeasureFormatWidth width,
1022 const char *expected) {
1023 UErrorCode status = U_ZERO_ERROR;
1024 FieldPosition pos(0);
1025 MeasureFormat fmt(locale, width, status);
1026 if (!assertSuccess("Error creating format object", status)) {
1027 return;
1028 }
1029 Measure measures[] = {
1030 Measure(2, MeasureUnit::createMile(status), status),
1031 Measure(1, MeasureUnit::createFoot(status), status),
1032 Measure(2.3, MeasureUnit::createInch(status), status)};
1033 if (!assertSuccess("Error creating measures", status)) {
1034 return;
1035 }
1036 UnicodeString buffer;
1037 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), buffer, pos, status);
1038 if (!assertSuccess("Error formatting measures", status)) {
1039 return;
1040 }
1041 assertEquals("TestMultiples", UnicodeString(expected).unescape(), buffer);
1042 }
1043
1044 void MeasureFormatTest::TestGram() {
1045 UErrorCode status = U_ZERO_ERROR;
1046 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1047 if (!assertSuccess("Error creating format object", status)) {
1048 return;
1049 }
1050 Measure gram(1, MeasureUnit::createGram(status), status);
1051 Measure gforce(1, MeasureUnit::createGForce(status), status);
1052 if (!assertSuccess("Error creating measures", status)) {
1053 return;
1054 }
1055 verifyFormat("TestGram", fmt, &gram, 1, "1 g");
1056 verifyFormat("TestGram", fmt, &gforce, 1, "1 G");
1057 }
1058
1059 void MeasureFormatTest::TestCurrencies() {
1060 UChar USD[] = {'U', 'S', 'D', 0};
1061 UErrorCode status = U_ZERO_ERROR;
1062 CurrencyAmount USD_1(1.0, USD, status);
1063 CurrencyAmount USD_2(2.0, USD, status);
1064 CurrencyAmount USD_NEG_1(-1.0, USD, status);
1065 if (!assertSuccess("Error creating measures", status)) {
1066 return;
1067 }
1068 Locale en("en");
1069 MeasureFormat fmt(en, UMEASFMT_WIDTH_WIDE, status);
1070 if (!assertSuccess("Error creating format object", status)) {
1071 return;
1072 }
1073 verifyFormat("TestCurrenciesWide", fmt, &USD_NEG_1, 1, "-1.00 US dollars");
1074 verifyFormat("TestCurrenciesWide", fmt, &USD_1, 1, "1.00 US dollars");
1075 verifyFormat("TestCurrenciesWide", fmt, &USD_2, 1, "2.00 US dollars");
1076 fmt = MeasureFormat(en, UMEASFMT_WIDTH_SHORT, status);
1077 if (!assertSuccess("Error creating format object", status)) {
1078 return;
1079 }
1080 verifyFormat("TestCurrenciesShort", fmt, &USD_NEG_1, 1, "-USD1.00");
1081 verifyFormat("TestCurrenciesShort", fmt, &USD_1, 1, "USD1.00");
1082 verifyFormat("TestCurrenciesShort", fmt, &USD_2, 1, "USD2.00");
1083 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NARROW, status);
1084 if (!assertSuccess("Error creating format object", status)) {
1085 return;
1086 }
1087 verifyFormat("TestCurrenciesNarrow", fmt, &USD_NEG_1, 1, "-$1.00");
1088 verifyFormat("TestCurrenciesNarrow", fmt, &USD_1, 1, "$1.00");
1089 verifyFormat("TestCurrenciesNarrow", fmt, &USD_2, 1, "$2.00");
1090 fmt = MeasureFormat(en, UMEASFMT_WIDTH_NUMERIC, status);
1091 if (!assertSuccess("Error creating format object", status)) {
1092 return;
1093 }
1094 verifyFormat("TestCurrenciesNumeric", fmt, &USD_NEG_1, 1, "-$1.00");
1095 verifyFormat("TestCurrenciesNumeric", fmt, &USD_1, 1, "$1.00");
1096 verifyFormat("TestCurrenciesNumeric", fmt, &USD_2, 1, "$2.00");
1097 }
1098
1099 void MeasureFormatTest::TestFieldPosition() {
1100 UErrorCode status = U_ZERO_ERROR;
1101 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1102 if (!assertSuccess("Error creating format object", status)) {
1103 return;
1104 }
1105 Measure measure(43.5, MeasureUnit::createFoot(status), status);
1106 if (!assertSuccess("Error creating measure object 1", status)) {
1107 return;
1108 }
1109 UnicodeString prefix("123456: ");
1110 verifyFieldPosition(
1111 "",
1112 fmt,
1113 prefix,
1114 &measure,
1115 1,
1116 NumberFormat::kDecimalSeparatorField,
1117 10,
1118 11);
1119 measure = Measure(43, MeasureUnit::createFoot(status), status);
1120 if (!assertSuccess("Error creating measure object 2", status)) {
1121 return;
1122 }
1123 verifyFieldPosition(
1124 "",
1125 fmt,
1126 prefix,
1127 &measure,
1128 1,
1129 NumberFormat::kDecimalSeparatorField,
1130 0,
1131 0);
1132 }
1133
1134 void MeasureFormatTest::TestFieldPositionMultiple() {
1135 UErrorCode status = U_ZERO_ERROR;
1136 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1137 if (!assertSuccess("Error creating format object", status)) {
1138 return;
1139 }
1140 Measure first[] = {
1141 Measure(354, MeasureUnit::createMeter(status), status),
1142 Measure(23, MeasureUnit::createCentimeter(status), status)};
1143 Measure second[] = {
1144 Measure(354, MeasureUnit::createMeter(status), status),
1145 Measure(23, MeasureUnit::createCentimeter(status), status),
1146 Measure(5.4, MeasureUnit::createMillimeter(status), status)};
1147 Measure third[] = {
1148 Measure(3, MeasureUnit::createMeter(status), status),
1149 Measure(23, MeasureUnit::createCentimeter(status), status),
1150 Measure(5, MeasureUnit::createMillimeter(status), status)};
1151 if (!assertSuccess("Error creating measure objects", status)) {
1152 return;
1153 }
1154 UnicodeString prefix("123456: ");
1155 verifyFieldPosition(
1156 "Integer",
1157 fmt,
1158 prefix,
1159 first,
1160 UPRV_LENGTHOF(first),
1161 NumberFormat::kIntegerField,
1162 8,
1163 11);
1164 verifyFieldPosition(
1165 "Decimal separator",
1166 fmt,
1167 prefix,
1168 second,
1169 UPRV_LENGTHOF(second),
1170 NumberFormat::kDecimalSeparatorField,
1171 23,
1172 24);
1173 verifyFieldPosition(
1174 "no decimal separator",
1175 fmt,
1176 prefix,
1177 third,
1178 UPRV_LENGTHOF(third),
1179 NumberFormat::kDecimalSeparatorField,
1180 0,
1181 0);
1182 }
1183
1184 void MeasureFormatTest::TestFieldPositionMultipleWithPer() {
1185 UErrorCode status = U_ZERO_ERROR;
1186 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1187 if (!assertSuccess("Error creating format object", status)) {
1188 return;
1189 }
1190 Measure first[] = {
1191 Measure(354, MeasureUnit::createMeter(status), status),
1192 Measure(23, MeasureUnit::createCentimeter(status), status)};
1193 Measure second[] = {
1194 Measure(354, MeasureUnit::createMeter(status), status),
1195 Measure(23, MeasureUnit::createCentimeter(status), status),
1196 Measure(5.4, MeasureUnit::createMillimeter(status), status)};
1197 Measure third[] = {
1198 Measure(3, MeasureUnit::createMeter(status), status),
1199 Measure(23, MeasureUnit::createCentimeter(status), status),
1200 Measure(5, MeasureUnit::createMillimeter(status), status)};
1201 if (!assertSuccess("Error creating measure objects", status)) {
1202 return;
1203 }
1204 UnicodeString prefix("123456: ");
1205
1206 LocalPointer<MeasureUnit> secondUnit(MeasureUnit::createSecond(status));
1207 LocalPointer<MeasureUnit> minuteUnit(MeasureUnit::createMinute(status));
1208 if (!assertSuccess("Error creating format object", status)) {
1209 return;
1210 }
1211
1212 // per unit test
1213 verifyFieldPositionWithPer(
1214 "Integer",
1215 fmt,
1216 prefix,
1217 first,
1218 UPRV_LENGTHOF(first),
1219 *secondUnit,
1220 NumberFormat::kIntegerField,
1221 8,
1222 11);
1223 verifyFieldPositionWithPer(
1224 "Decimal separator",
1225 fmt,
1226 prefix,
1227 second,
1228 UPRV_LENGTHOF(second),
1229 *secondUnit,
1230 NumberFormat::kDecimalSeparatorField,
1231 23,
1232 24);
1233 verifyFieldPositionWithPer(
1234 "no decimal separator",
1235 fmt,
1236 prefix,
1237 third,
1238 UPRV_LENGTHOF(third),
1239 *secondUnit,
1240 NumberFormat::kDecimalSeparatorField,
1241 0,
1242 0);
1243
1244 // Fallback to compound per test
1245 verifyFieldPositionWithPer(
1246 "Integer",
1247 fmt,
1248 prefix,
1249 first,
1250 UPRV_LENGTHOF(first),
1251 *minuteUnit,
1252 NumberFormat::kIntegerField,
1253 8,
1254 11);
1255 verifyFieldPositionWithPer(
1256 "Decimal separator",
1257 fmt,
1258 prefix,
1259 second,
1260 UPRV_LENGTHOF(second),
1261 *minuteUnit,
1262 NumberFormat::kDecimalSeparatorField,
1263 23,
1264 24);
1265 verifyFieldPositionWithPer(
1266 "no decimal separator",
1267 fmt,
1268 prefix,
1269 third,
1270 UPRV_LENGTHOF(third),
1271 *minuteUnit,
1272 NumberFormat::kDecimalSeparatorField,
1273 0,
1274 0);
1275 }
1276
1277 void MeasureFormatTest::TestBadArg() {
1278 UErrorCode status = U_ZERO_ERROR;
1279 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1280 if (!assertSuccess("Error creating format object", status)) {
1281 return;
1282 }
1283 FieldPosition pos(0);
1284 UnicodeString buffer;
1285 fmt.format(
1286 9.3,
1287 buffer,
1288 pos,
1289 status);
1290 if (status != U_ILLEGAL_ARGUMENT_ERROR) {
1291 errln("Expected ILLEGAL_ARGUMENT_ERROR");
1292 }
1293 }
1294
1295 void MeasureFormatTest::TestEquality() {
1296 UErrorCode status = U_ZERO_ERROR;
1297 NumberFormat* nfeq = NumberFormat::createInstance("en", status);
1298 NumberFormat* nfne = NumberFormat::createInstance("fr", status);
1299 MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
1300 MeasureFormat fmtEq2("en", UMEASFMT_WIDTH_SHORT, nfeq, status);
1301 MeasureFormat fmtne1("en", UMEASFMT_WIDTH_WIDE, status);
1302 MeasureFormat fmtne2("fr", UMEASFMT_WIDTH_SHORT, status);
1303 MeasureFormat fmtne3("en", UMEASFMT_WIDTH_SHORT, nfne, status);
1304 if (U_FAILURE(status)) {
1305 dataerrln("Error creating MeasureFormats - %s", u_errorName(status));
1306 return;
1307 }
1308 MeasureFormat fmtEq(fmt);
1309 assertTrue("Equal", fmt == fmtEq);
1310 assertTrue("Equal2", fmt == fmtEq2);
1311 assertFalse("Equal Neg", fmt != fmtEq);
1312 assertTrue("Not Equal 1", fmt != fmtne1);
1313 assertFalse("Not Equal Neg 1", fmt == fmtne1);
1314 assertTrue("Not Equal 2", fmt != fmtne2);
1315 assertTrue("Not Equal 3", fmt != fmtne3);
1316 }
1317
1318 void MeasureFormatTest::TestGroupingSeparator() {
1319 UErrorCode status = U_ZERO_ERROR;
1320 Locale en("en");
1321 MeasureFormat fmt(en, UMEASFMT_WIDTH_SHORT, status);
1322 if (!assertSuccess("Error creating format object", status)) {
1323 return;
1324 }
1325 Measure ms[] = {
1326 Measure(INT32_MAX, MeasureUnit::createYear(status), status),
1327 Measure(INT32_MIN, MeasureUnit::createMonth(status), status),
1328 Measure(-987, MeasureUnit::createDay(status), status),
1329 Measure(1362, MeasureUnit::createHour(status), status),
1330 Measure(987, MeasureUnit::createMinute(status), status)};
1331 FieldPosition pos(NumberFormat::kGroupingSeparatorField);
1332 UnicodeString appendTo;
1333 fmt.formatMeasures(ms, 5, appendTo, pos, status);
1334 if (!assertSuccess("Error formatting", status)) {
1335 return;
1336 }
1337 assertEquals(
1338 "grouping separator",
1339 "2,147,483,647 yrs, -2,147,483,648 mths, -987 days, 1,362 hrs, 987 m ins",
1340 appendTo);
1341 assertEquals("begin index", 9, pos.getBeginIndex());
1342 assertEquals("end index", 10, pos.getEndIndex());
1343 }
1344
1345 void MeasureFormatTest::TestDoubleZero() {
1346 UErrorCode status = U_ZERO_ERROR;
1347 Measure measures[] = {
1348 Measure(4.7, MeasureUnit::createHour(status), status),
1349 Measure(23, MeasureUnit::createMinute(status), status),
1350 Measure(16, MeasureUnit::createSecond(status), status)};
1351 Locale en("en");
1352 NumberFormat *nf = NumberFormat::createInstance(en, status);
1353 MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, nf, status);
1354 UnicodeString appendTo;
1355 FieldPosition pos(FieldPosition::DONT_CARE);
1356 if (U_FAILURE(status)) {
1357 dataerrln("Error creating formatter - %s", u_errorName(status));
1358 return;
1359 }
1360 nf->setMinimumFractionDigits(2);
1361 nf->setMaximumFractionDigits(2);
1362 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status) ;
1363 if (!assertSuccess("Error formatting", status)) {
1364 return;
1365 }
1366 assertEquals(
1367 "TestDoubleZero",
1368 UnicodeString("4 hours, 23 minutes, 16.00 seconds"),
1369 appendTo);
1370 measures[0] = Measure(-4.7, MeasureUnit::createHour(status), status);
1371 appendTo.remove();
1372 fmt.formatMeasures(measures, UPRV_LENGTHOF(measures), appendTo, pos, status) ;
1373 if (!assertSuccess("Error formatting", status)) {
1374 return;
1375 }
1376 assertEquals(
1377 "TestDoubleZero",
1378 UnicodeString("-4 hours, 23 minutes, 16.00 seconds"),
1379 appendTo);
1380 }
1381
1382 void MeasureFormatTest::verifyFieldPosition(
1383 const char *description,
1384 const MeasureFormat &fmt,
1385 const UnicodeString &prefix,
1386 const Measure *measures,
1387 int32_t measureCount,
1388 NumberFormat::EAlignmentFields field,
1389 int32_t start,
1390 int32_t end) {
1391 // 8 char lead
1392 UnicodeString result(prefix);
1393 FieldPosition pos(field);
1394 UErrorCode status = U_ZERO_ERROR;
1395 CharString ch;
1396 const char *descPrefix = ch.append(description, status)
1397 .append(": ", status).data();
1398 CharString beginIndex;
1399 beginIndex.append(descPrefix, status).append("beginIndex", status);
1400 CharString endIndex;
1401 endIndex.append(descPrefix, status).append("endIndex", status);
1402 fmt.formatMeasures(measures, measureCount, result, pos, status);
1403 if (!assertSuccess("Error formatting", status)) {
1404 return;
1405 }
1406 assertEquals(beginIndex.data(), start, pos.getBeginIndex());
1407 assertEquals(endIndex.data(), end, pos.getEndIndex());
1408 }
1409
1410 void MeasureFormatTest::verifyFieldPositionWithPer(
1411 const char *description,
1412 const MeasureFormat &fmt,
1413 const UnicodeString &prefix,
1414 const Measure *measures,
1415 int32_t measureCount,
1416 const MeasureUnit &perUnit,
1417 NumberFormat::EAlignmentFields field,
1418 int32_t start,
1419 int32_t end) {
1420 UnicodeString result(prefix);
1421 FieldPosition pos(field);
1422 UErrorCode status = U_ZERO_ERROR;
1423 CharString ch;
1424 const char *descPrefix = ch.append(description, status)
1425 .append(": ", status).data();
1426 CharString beginIndex;
1427 beginIndex.append(descPrefix, status).append("beginIndex", status);
1428 CharString endIndex;
1429 endIndex.append(descPrefix, status).append("endIndex", status);
1430 fmt.formatMeasuresPer(
1431 measures,
1432 measureCount,
1433 perUnit,
1434 result,
1435 pos,
1436 status);
1437 if (!assertSuccess("Error formatting", status)) {
1438 return;
1439 }
1440 assertEquals(beginIndex.data(), start, pos.getBeginIndex());
1441 assertEquals(endIndex.data(), end, pos.getEndIndex());
1442 }
1443
1444 void MeasureFormatTest::verifyFormat(
1445 const char *description,
1446 const MeasureFormat &fmt,
1447 const Measure *measures,
1448 int32_t measureCount,
1449 const char *expected) {
1450 verifyFormatWithPrefix(
1451 description,
1452 fmt,
1453 "",
1454 measures,
1455 measureCount,
1456 expected);
1457 }
1458
1459 void MeasureFormatTest::verifyFormatWithPrefix(
1460 const char *description,
1461 const MeasureFormat &fmt,
1462 const UnicodeString &prefix,
1463 const Measure *measures,
1464 int32_t measureCount,
1465 const char *expected) {
1466 UnicodeString result(prefix);
1467 FieldPosition pos(0);
1468 UErrorCode status = U_ZERO_ERROR;
1469 fmt.formatMeasures(measures, measureCount, result, pos, status);
1470 if (!assertSuccess("Error formatting", status)) {
1471 return;
1472 }
1473 assertEquals(description, UnicodeString(expected).unescape(), result);
1474 }
1475
1476 void MeasureFormatTest::verifyFormat(
1477 const char *description,
1478 const MeasureFormat &fmt,
1479 const ExpectedResult *expectedResults,
1480 int32_t count) {
1481 for (int32_t i = 0; i < count; ++i) {
1482 verifyFormat(description, fmt, expectedResults[i].measures, expectedResu lts[i].count, expectedResults[i].expected);
1483 }
1484 }
1485
1486 extern IntlTest *createMeasureFormatTest() {
1487 return new MeasureFormatTest();
1488 }
1489
1490 #endif
1491
OLDNEW
« no previous file with comments | « source/test/intltest/loctest.cpp ('k') | source/test/intltest/nptrans.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698