+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 2014-2016, International Business Machines Corporation and *
#include "unicode/tmunit.h"
#include "unicode/plurrule.h"
#include "charstr.h"
+#include "cstr.h"
#include "unicode/reldatefmt.h"
struct ExpectedResult {
void TestCompatible55_1();
void TestCompatible56_1();
void TestCompatible57_1();
+ void TestCompatible58_1();
void TestGetAvailable();
void TestExamplesInDocs();
void TestFormatPeriodEn();
void TestManyLocaleDurations();
void TestGram();
void TestCurrencies();
+ void TestDisplayNames();
void TestFieldPosition();
void TestFieldPositionMultiple();
void TestBadArg();
const Measure *measures,
int32_t measureCount,
const char *expected);
+ void helperTestDisplayName(
+ const MeasureUnit *unit,
+ const char *localeID,
+ UMeasureFormatWidth width,
+ const char *expected);
void verifyFieldPosition(
const char *description,
const MeasureFormat &fmt,
TESTCASE_AUTO(TestCompatible55_1);
TESTCASE_AUTO(TestCompatible56_1);
TESTCASE_AUTO(TestCompatible57_1);
+ TESTCASE_AUTO(TestCompatible58_1);
TESTCASE_AUTO(TestGetAvailable);
TESTCASE_AUTO(TestExamplesInDocs);
TESTCASE_AUTO(TestFormatPeriodEn);
TESTCASE_AUTO(TestManyLocaleDurations);
TESTCASE_AUTO(TestGram);
TESTCASE_AUTO(TestCurrencies);
+ TESTCASE_AUTO(TestDisplayNames);
TESTCASE_AUTO(TestFieldPosition);
TESTCASE_AUTO(TestFieldPositionMultiple);
TESTCASE_AUTO(TestBadArg);
assertSuccess("", status);
}
+void MeasureFormatTest::TestCompatible58_1() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<MeasureUnit> measureUnit;
+ measureUnit.adoptInstead(MeasureUnit::createGForce(status));
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecondSquared(status));
+ measureUnit.adoptInstead(MeasureUnit::createArcMinute(status));
+ measureUnit.adoptInstead(MeasureUnit::createArcSecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createDegree(status));
+ measureUnit.adoptInstead(MeasureUnit::createRadian(status));
+ measureUnit.adoptInstead(MeasureUnit::createRevolutionAngle(status));
+ measureUnit.adoptInstead(MeasureUnit::createAcre(status));
+ measureUnit.adoptInstead(MeasureUnit::createHectare(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareCentimeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareFoot(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareInch(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareKilometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareMeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareMile(status));
+ measureUnit.adoptInstead(MeasureUnit::createSquareYard(status));
+ measureUnit.adoptInstead(MeasureUnit::createKarat(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilligramPerDeciliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createMillimolePerLiter(status));
+ measureUnit.adoptInstead(MeasureUnit::createPartPerMillion(status));
+ measureUnit.adoptInstead(MeasureUnit::createLiterPer100Kilometers(status));
+ measureUnit.adoptInstead(MeasureUnit::createLiterPerKilometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallon(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilePerGallonImperial(status));
+ measureUnit.adoptInstead(MeasureUnit::createEast(status));
+ measureUnit.adoptInstead(MeasureUnit::createNorth(status));
+ measureUnit.adoptInstead(MeasureUnit::createSouth(status));
+ measureUnit.adoptInstead(MeasureUnit::createWest(status));
+ measureUnit.adoptInstead(MeasureUnit::createBit(status));
+ measureUnit.adoptInstead(MeasureUnit::createByte(status));
+ measureUnit.adoptInstead(MeasureUnit::createGigabit(status));
+ measureUnit.adoptInstead(MeasureUnit::createGigabyte(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilobit(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilobyte(status));
+ measureUnit.adoptInstead(MeasureUnit::createMegabit(status));
+ measureUnit.adoptInstead(MeasureUnit::createMegabyte(status));
+ measureUnit.adoptInstead(MeasureUnit::createTerabit(status));
+ measureUnit.adoptInstead(MeasureUnit::createTerabyte(status));
+ measureUnit.adoptInstead(MeasureUnit::createCentury(status));
+ measureUnit.adoptInstead(MeasureUnit::createDay(status));
+ measureUnit.adoptInstead(MeasureUnit::createHour(status));
+ measureUnit.adoptInstead(MeasureUnit::createMicrosecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createMillisecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createMinute(status));
+ measureUnit.adoptInstead(MeasureUnit::createMonth(status));
+ measureUnit.adoptInstead(MeasureUnit::createNanosecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createSecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createWeek(status));
+ measureUnit.adoptInstead(MeasureUnit::createYear(status));
+ measureUnit.adoptInstead(MeasureUnit::createAmpere(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilliampere(status));
+ measureUnit.adoptInstead(MeasureUnit::createOhm(status));
+ measureUnit.adoptInstead(MeasureUnit::createVolt(status));
+ measureUnit.adoptInstead(MeasureUnit::createCalorie(status));
+ measureUnit.adoptInstead(MeasureUnit::createFoodcalorie(status));
+ measureUnit.adoptInstead(MeasureUnit::createJoule(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilocalorie(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilojoule(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilowattHour(status));
+ measureUnit.adoptInstead(MeasureUnit::createGigahertz(status));
+ measureUnit.adoptInstead(MeasureUnit::createHertz(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilohertz(status));
+ measureUnit.adoptInstead(MeasureUnit::createMegahertz(status));
+ measureUnit.adoptInstead(MeasureUnit::createAstronomicalUnit(status));
+ measureUnit.adoptInstead(MeasureUnit::createCentimeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createDecimeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createFathom(status));
+ measureUnit.adoptInstead(MeasureUnit::createFoot(status));
+ measureUnit.adoptInstead(MeasureUnit::createFurlong(status));
+ measureUnit.adoptInstead(MeasureUnit::createInch(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createLightYear(status));
+ measureUnit.adoptInstead(MeasureUnit::createMeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createMicrometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createMile(status));
+ measureUnit.adoptInstead(MeasureUnit::createMileScandinavian(status));
+ measureUnit.adoptInstead(MeasureUnit::createMillimeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createNanometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createNauticalMile(status));
+ measureUnit.adoptInstead(MeasureUnit::createParsec(status));
+ measureUnit.adoptInstead(MeasureUnit::createPicometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createYard(status));
+ measureUnit.adoptInstead(MeasureUnit::createLux(status));
+ measureUnit.adoptInstead(MeasureUnit::createCarat(status));
+ measureUnit.adoptInstead(MeasureUnit::createGram(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilogram(status));
+ measureUnit.adoptInstead(MeasureUnit::createMetricTon(status));
+ measureUnit.adoptInstead(MeasureUnit::createMicrogram(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilligram(status));
+ measureUnit.adoptInstead(MeasureUnit::createOunce(status));
+ measureUnit.adoptInstead(MeasureUnit::createOunceTroy(status));
+ measureUnit.adoptInstead(MeasureUnit::createPound(status));
+ measureUnit.adoptInstead(MeasureUnit::createStone(status));
+ measureUnit.adoptInstead(MeasureUnit::createTon(status));
+ measureUnit.adoptInstead(MeasureUnit::createGigawatt(status));
+ measureUnit.adoptInstead(MeasureUnit::createHorsepower(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilowatt(status));
+ measureUnit.adoptInstead(MeasureUnit::createMegawatt(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilliwatt(status));
+ measureUnit.adoptInstead(MeasureUnit::createWatt(status));
+ measureUnit.adoptInstead(MeasureUnit::createHectopascal(status));
+ measureUnit.adoptInstead(MeasureUnit::createInchHg(status));
+ measureUnit.adoptInstead(MeasureUnit::createMillibar(status));
+ measureUnit.adoptInstead(MeasureUnit::createMillimeterOfMercury(status));
+ measureUnit.adoptInstead(MeasureUnit::createPoundPerSquareInch(status));
+ measureUnit.adoptInstead(MeasureUnit::createKilometerPerHour(status));
+ measureUnit.adoptInstead(MeasureUnit::createKnot(status));
+ measureUnit.adoptInstead(MeasureUnit::createMeterPerSecond(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilePerHour(status));
+ measureUnit.adoptInstead(MeasureUnit::createCelsius(status));
+ measureUnit.adoptInstead(MeasureUnit::createFahrenheit(status));
+ measureUnit.adoptInstead(MeasureUnit::createGenericTemperature(status));
+ measureUnit.adoptInstead(MeasureUnit::createKelvin(status));
+ measureUnit.adoptInstead(MeasureUnit::createAcreFoot(status));
+ measureUnit.adoptInstead(MeasureUnit::createBushel(status));
+ measureUnit.adoptInstead(MeasureUnit::createCentiliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicCentimeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicFoot(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicInch(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicKilometer(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicMeter(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicMile(status));
+ measureUnit.adoptInstead(MeasureUnit::createCubicYard(status));
+ measureUnit.adoptInstead(MeasureUnit::createCup(status));
+ measureUnit.adoptInstead(MeasureUnit::createCupMetric(status));
+ measureUnit.adoptInstead(MeasureUnit::createDeciliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createFluidOunce(status));
+ measureUnit.adoptInstead(MeasureUnit::createGallon(status));
+ measureUnit.adoptInstead(MeasureUnit::createGallonImperial(status));
+ measureUnit.adoptInstead(MeasureUnit::createHectoliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createLiter(status));
+ measureUnit.adoptInstead(MeasureUnit::createMegaliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createMilliliter(status));
+ measureUnit.adoptInstead(MeasureUnit::createPint(status));
+ measureUnit.adoptInstead(MeasureUnit::createPintMetric(status));
+ measureUnit.adoptInstead(MeasureUnit::createQuart(status));
+ measureUnit.adoptInstead(MeasureUnit::createTablespoon(status));
+ measureUnit.adoptInstead(MeasureUnit::createTeaspoon(status));
+ assertSuccess("", status);
+}
+
void MeasureFormatTest::TestBasic() {
UErrorCode status = U_ZERO_ERROR;
MeasureUnit *ptr1 = MeasureUnit::createArcMinute(status);
if (!assertSuccess("Error creating formatters", status)) {
return;
}
- Measure measureC(23, MeasureUnit::createCelsius(status), status);
- Measure measureF(70, MeasureUnit::createFahrenheit(status), status);
+ Measure measureC((double)23, MeasureUnit::createCelsius(status), status);
+ Measure measureF((double)70, MeasureUnit::createFahrenheit(status), status);
Measure feetAndInches[] = {
- Measure(70, MeasureUnit::createFoot(status), status),
- Measure(5.3, MeasureUnit::createInch(status), status)};
+ Measure((double)70, MeasureUnit::createFoot(status), status),
+ Measure((double)5.3, MeasureUnit::createInch(status), status)};
Measure footAndInch[] = {
- Measure(1, MeasureUnit::createFoot(status), status),
- Measure(1, MeasureUnit::createInch(status), status)};
+ Measure((double)1, MeasureUnit::createFoot(status), status),
+ Measure((double)1, MeasureUnit::createInch(status), status)};
Measure inchAndFeet[] = {
- Measure(1, MeasureUnit::createInch(status), status),
- Measure(2, MeasureUnit::createFoot(status), status)};
+ Measure((double)1, MeasureUnit::createInch(status), status),
+ Measure((double)2, MeasureUnit::createFoot(status), status)};
if (!assertSuccess("Error creating measurements.", status)) {
return;
}
void MeasureFormatTest::TestFormatPeriodEn() {
UErrorCode status = U_ZERO_ERROR;
- Measure t_19m[] = {Measure(19, MeasureUnit::createMinute(status), status)};
+ Measure t_19m[] = {Measure((double)19, MeasureUnit::createMinute(status), status)};
Measure t_1h_23_5s[] = {
- Measure(1.0, MeasureUnit::createHour(status), status),
- Measure(23.5, MeasureUnit::createSecond(status), status)
+ Measure((double)1.0, MeasureUnit::createHour(status), status),
+ Measure((double)23.5, MeasureUnit::createSecond(status), status)
};
Measure t_1h_23_5m[] = {
- Measure(1.0, MeasureUnit::createHour(status), status),
- Measure(23.5, MeasureUnit::createMinute(status), status)
+ Measure((double)1.0, MeasureUnit::createHour(status), status),
+ Measure((double)23.5, MeasureUnit::createMinute(status), status)
};
Measure t_1h_0m_23s[] = {
Measure(
- 1.0,
+ (double)1.0,
TimeUnit::createInstance(
TimeUnit::UTIMEUNIT_HOUR, status),
status),
Measure(
- 0.0,
+ (double)0.0,
TimeUnit::createInstance(
TimeUnit::UTIMEUNIT_MINUTE, status),
status),
Measure(
- 23,
+ (double)23.0,
TimeUnit::createInstance(
TimeUnit::UTIMEUNIT_SECOND, status),
status)
{t_3h_5h, UPRV_LENGTHOF(t_3h_5h), "3h 5h"}};
ExpectedResult fullDataDe[] = {
- {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 Minute und 59,9996 Sekunden"},
+ {t_1m_59_9996s, UPRV_LENGTHOF(t_1m_59_9996s), "1 Minute, 59,9996 Sekunden"},
{t_19m, UPRV_LENGTHOF(t_19m), "19 Minuten"},
- {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 Stunde und 23,5 Sekunden"},
- {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 Stunde und 23,5 Minuten"},
+ {t_1h_23_5s, UPRV_LENGTHOF(t_1h_23_5s), "1 Stunde, 23,5 Sekunden"},
+ {t_1h_23_5m, UPRV_LENGTHOF(t_1h_23_5m), "1 Stunde, 23,5 Minuten"},
{t_1h_0m_23s, UPRV_LENGTHOF(t_1h_0m_23s), "1 Stunde, 0 Minuten und 23 Sekunden"},
{t_2y_5M_3w_4d, UPRV_LENGTHOF(t_2y_5M_3w_4d), "2 Jahre, 5 Monate, 3 Wochen und 4 Tage"}};
return;
}
UnicodeString buffer;
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
fmt.format(
new Measure(3.5, MeasureUnit::createFoot(status), status),
buffer,
UMeasureFormatWidth width,
const char *expected) {
UErrorCode status = U_ZERO_ERROR;
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
MeasureFormat fmt(locale, width, status);
if (!assertSuccess("Error creating format object", status)) {
return;
}
Measure measures[] = {
- Measure(2, MeasureUnit::createMile(status), status),
- Measure(1, MeasureUnit::createFoot(status), status),
+ Measure(2.0, MeasureUnit::createMile(status), status),
+ Measure(1.0, MeasureUnit::createFoot(status), status),
Measure(2.3, MeasureUnit::createInch(status), status)};
if (!assertSuccess("Error creating measures", status)) {
return;
void MeasureFormatTest::TestManyLocaleDurations() {
UErrorCode status = U_ZERO_ERROR;
Measure measures[] = {
- Measure(5, MeasureUnit::createHour(status), status),
- Measure(37, MeasureUnit::createMinute(status), status)};
+ Measure(5.0, MeasureUnit::createHour(status), status),
+ Measure(37.0, MeasureUnit::createMinute(status), status)};
if (!assertSuccess("Error creating measures", status)) {
return;
}
helperTestManyLocaleDurations("fr", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "05:37");
helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 klst. og 37 m\\u00EDn.");
helperTestManyLocaleDurations("is", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
- helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5\\u6642\\u959337\\u5206");
+ helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h37m");
helperTestManyLocaleDurations("ja", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5t, 37m");
- helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37");
+ helperTestManyLocaleDurations("nb", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 u, 37 m");
helperTestManyLocaleDurations("nl", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5 h og 37 min");
- helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5.37");
+ helperTestManyLocaleDurations("nn", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5h 37m");
helperTestManyLocaleDurations("sv", UMEASFMT_WIDTH_NUMERIC, measures, UPRV_LENGTHOF(measures), "5:37");
helperTestManyLocaleDurations("zh", UMEASFMT_WIDTH_NARROW, measures, UPRV_LENGTHOF(measures), "5\\u5C0F\\u65F637\\u5206\\u949F");
return;
}
UnicodeString buffer;
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
fmt.formatMeasures(measures, measureCount, buffer, pos, status);
if (U_FAILURE(status)) {
errln("MeasureFormat::formatMeasures failed for locale %s, width %d, status: %s", localeID, (int)width, u_errorName(status));
if (!assertSuccess("Error creating format object", status)) {
return;
}
- Measure gram(1, MeasureUnit::createGram(status), status);
- Measure gforce(1, MeasureUnit::createGForce(status), status);
+ Measure gram((double)1, MeasureUnit::createGram(status), status);
+ Measure gforce((double)1, MeasureUnit::createGForce(status), status);
if (!assertSuccess("Error creating measures", status)) {
return;
}
}
void MeasureFormatTest::TestCurrencies() {
- UChar USD[] = {'U', 'S', 'D', 0};
+ UChar USD[4];
+ u_uastrcpy(USD, "USD");
UErrorCode status = U_ZERO_ERROR;
CurrencyAmount USD_1(1.0, USD, status);
+ assertEquals("Currency Code", USD, USD_1.getISOCurrency());
CurrencyAmount USD_2(2.0, USD, status);
CurrencyAmount USD_NEG_1(-1.0, USD, status);
- if (!assertSuccess("Error creating measures", status)) {
+ if (!assertSuccess("Error creating currencies", status)) {
return;
}
Locale en("en");
verifyFormat("TestCurrenciesNumeric", fmt, &USD_2, 1, "$2.00");
}
+void MeasureFormatTest::TestDisplayNames() {
+ UErrorCode status = U_ZERO_ERROR;
+ helperTestDisplayName( MeasureUnit::createYear(status), "en", UMEASFMT_WIDTH_WIDE, "years" );
+ helperTestDisplayName( MeasureUnit::createYear(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u5E74" );
+ helperTestDisplayName( MeasureUnit::createYear(status), "es", UMEASFMT_WIDTH_WIDE, "a\\u00F1os" );
+ helperTestDisplayName( MeasureUnit::createYear(status), "pt", UMEASFMT_WIDTH_WIDE, "anos" );
+ helperTestDisplayName( MeasureUnit::createYear(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "anos" );
+ helperTestDisplayName( MeasureUnit::createAmpere(status), "en", UMEASFMT_WIDTH_WIDE, "amperes" );
+ helperTestDisplayName( MeasureUnit::createAmpere(status), "ja", UMEASFMT_WIDTH_WIDE, "\\u30A2\\u30F3\\u30DA\\u30A2" );
+ helperTestDisplayName( MeasureUnit::createAmpere(status), "es", UMEASFMT_WIDTH_WIDE, "amperios" );
+ helperTestDisplayName( MeasureUnit::createAmpere(status), "pt", UMEASFMT_WIDTH_WIDE, "amperes" );
+ helperTestDisplayName( MeasureUnit::createAmpere(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "amperes" );
+ helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt", UMEASFMT_WIDTH_WIDE, "metros por segundo ao quadrado" );
+ helperTestDisplayName( MeasureUnit::createMeterPerSecondSquared(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "metros por segundo quadrado" );
+ helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_NARROW, "km\\u00B2" );
+ helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_SHORT, "km\\u00B2" );
+ helperTestDisplayName( MeasureUnit::createSquareKilometer(status), "pt", UMEASFMT_WIDTH_WIDE, "quil\\u00F4metros quadrados" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_NARROW, "s" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_SHORT, "s" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt-PT", UMEASFMT_WIDTH_WIDE, "segundos" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_NARROW, "seg" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_SHORT, "segs" );
+ helperTestDisplayName( MeasureUnit::createSecond(status), "pt", UMEASFMT_WIDTH_WIDE, "segundos" );
+ assertSuccess("Error creating measure units", status);
+}
+
+void MeasureFormatTest::helperTestDisplayName(const MeasureUnit *unit,
+ const char *localeID,
+ UMeasureFormatWidth width,
+ const char *expected) {
+ UErrorCode status = U_ZERO_ERROR;
+ MeasureFormat fmt(Locale(localeID), width, status);
+ if (U_FAILURE(status)) {
+ errln("Could not create MeasureFormat for locale %s, width %d, status: %s",
+ localeID, (int)width, u_errorName(status));
+ return;
+ }
+
+ UnicodeString dnam = fmt.getUnitDisplayName(*unit, status);
+ if (U_FAILURE(status)) {
+ errln("MeasureFormat::getUnitDisplayName failed for unit %s-%s, locale %s, width %d, status: %s",
+ unit->getType(), unit->getSubtype(), localeID, (int)width, u_errorName(status));
+ return;
+ }
+
+ UnicodeString expStr(UnicodeString(expected).unescape());
+ if (dnam != expStr) {
+ errln("MeasureFormat::getUnitDisplayName for unit %s-%s, locale %s, width %d: expected \"%s\", got \"%s\"",
+ unit->getType(), unit->getSubtype(), localeID, (int)width, CStr(expStr)(), CStr(dnam)());
+ }
+
+ // Delete the measure unit
+ delete unit;
+}
+
void MeasureFormatTest::TestFieldPosition() {
UErrorCode status = U_ZERO_ERROR;
MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
NumberFormat::kDecimalSeparatorField,
10,
11);
- measure = Measure(43, MeasureUnit::createFoot(status), status);
+ measure = Measure(43.0, MeasureUnit::createFoot(status), status);
if (!assertSuccess("Error creating measure object 2", status)) {
return;
}
return;
}
Measure first[] = {
- Measure(354, MeasureUnit::createMeter(status), status),
- Measure(23, MeasureUnit::createCentimeter(status), status)};
+ Measure((double)354, MeasureUnit::createMeter(status), status),
+ Measure((double)23, MeasureUnit::createCentimeter(status), status)};
Measure second[] = {
- Measure(354, MeasureUnit::createMeter(status), status),
- Measure(23, MeasureUnit::createCentimeter(status), status),
- Measure(5.4, MeasureUnit::createMillimeter(status), status)};
+ Measure((double)354, MeasureUnit::createMeter(status), status),
+ Measure((double)23, MeasureUnit::createCentimeter(status), status),
+ Measure((double)5.4, MeasureUnit::createMillimeter(status), status)};
Measure third[] = {
- Measure(3, MeasureUnit::createMeter(status), status),
- Measure(23, MeasureUnit::createCentimeter(status), status),
- Measure(5, MeasureUnit::createMillimeter(status), status)};
+ Measure((double)3, MeasureUnit::createMeter(status), status),
+ Measure((double)23, MeasureUnit::createCentimeter(status), status),
+ Measure((double)5, MeasureUnit::createMillimeter(status), status)};
if (!assertSuccess("Error creating measure objects", status)) {
return;
}
if (!assertSuccess("Error creating format object", status)) {
return;
}
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
UnicodeString buffer;
fmt.format(
9.3,
Measure ms[] = {
Measure((int32_t)INT32_MAX, MeasureUnit::createYear(status), status),
Measure((int32_t)INT32_MIN, MeasureUnit::createMonth(status), status),
- Measure(-987, MeasureUnit::createDay(status), status),
- Measure(1362, MeasureUnit::createHour(status), status),
- Measure(987, MeasureUnit::createMinute(status), status)};
+ Measure(-987.0, MeasureUnit::createDay(status), status),
+ Measure(1362.0, MeasureUnit::createHour(status), status),
+ Measure(987.0, MeasureUnit::createMinute(status), status)};
FieldPosition pos(NumberFormat::kGroupingSeparatorField);
UnicodeString appendTo;
fmt.formatMeasures(ms, 5, appendTo, pos, status);
UErrorCode status = U_ZERO_ERROR;
Measure measures[] = {
Measure(4.7, MeasureUnit::createHour(status), status),
- Measure(23, MeasureUnit::createMinute(status), status),
- Measure(16, MeasureUnit::createSecond(status), status)};
+ Measure(23.0, MeasureUnit::createMinute(status), status),
+ Measure(16.0, MeasureUnit::createSecond(status), status)};
Locale en("en");
NumberFormat *nf = NumberFormat::createInstance(en, status);
MeasureFormat fmt("en", UMEASFMT_WIDTH_WIDE, nf, status);
UErrorCode status = U_ZERO_ERROR;
Locale en("en");
MeasureFormat fmt("en", UMEASFMT_WIDTH_SHORT, status);
- Measure measure(50, MeasureUnit::createPound(status), status);
+ Measure measure(50.0, MeasureUnit::createPound(status), status);
LocalPointer<MeasureUnit> sqInch(MeasureUnit::createSquareInch(status));
if (!assertSuccess("Create of format unit and per unit", status)) {
return;
}
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
UnicodeString actual;
fmt.formatMeasurePerUnit(
measure,
IcuTestErrorCode errorCode(*this, "TestIndividualPluralFallback");
MeasureFormat mf("fr_CA", UMEASFMT_WIDTH_SHORT, errorCode);
LocalPointer<Measure> twoDeg(
- new Measure(2, MeasureUnit::createGenericTemperature(errorCode), errorCode), errorCode);
+ new Measure(2.0, MeasureUnit::createGenericTemperature(errorCode), errorCode), errorCode);
UnicodeString expected = UNICODE_STRING_SIMPLE("2\\u00B0").unescape();
UnicodeString actual;
assertEquals("2 deg temp in fr_CA", expected, mf.format(twoDeg.orphan(), actual, errorCode), TRUE);
int32_t measureCount,
const char *expected) {
UnicodeString result(prefix);
- FieldPosition pos(0);
+ FieldPosition pos(FieldPosition::DONT_CARE);
UErrorCode status = U_ZERO_ERROR;
fmt.formatMeasures(measures, measureCount, result, pos, status);
if (!assertSuccess("Error formatting", status)) {
return;
}
- assertEquals(description, UnicodeString(expected).unescape(), result);
+ assertEquals(description, ctou(expected), result);
}
void MeasureFormatTest::verifyFormat(