From: Shane Carr Date: Sat, 28 Apr 2018 06:15:41 +0000 (+0000) Subject: ICU-12175 Adding tests for compact currency support in ICU4C CompactDecimalFormat. X-Git-Tag: release-62-rc~180 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d90be53c5b73a19b9848d2d4c86019e10532683e;p=icu ICU-12175 Adding tests for compact currency support in ICU4C CompactDecimalFormat. X-SVN-Rev: 41290 --- diff --git a/icu4c/source/test/intltest/compactdecimalformattest.cpp b/icu4c/source/test/intltest/compactdecimalformattest.cpp index 8987f63a2b2..dd8d9892ce8 100644 --- a/icu4c/source/test/intltest/compactdecimalformattest.cpp +++ b/icu4c/source/test/intltest/compactdecimalformattest.cpp @@ -167,6 +167,58 @@ static ExpectedResult kSwahiliShortNegative[] = { static ExpectedResult kArabicLong[] = { {-5300.0, "\\u061C-\\u0665\\u066B\\u0663 \\u0623\\u0644\\u0641"}}; +static ExpectedResult kChineseCurrencyTestData[] = { + {1.0, "\\uFFE51"}, + {12.0, "\\uFFE512"}, + {123.0, "\\uFFE5120"}, + {1234.0, "\\uFFE51200"}, + {12345.0, "\\uFFE51.2\\u4E07"}, + {123456.0, "\\uFFE512\\u4E07"}, + {1234567.0, "\\uFFE5120\\u4E07"}, + {12345678.0, "\\uFFE51200\\u4E07"}, + {123456789.0, "\\uFFE51.2\\u4EBF"}, + {1234567890.0, "\\uFFE512\\u4EBF"}, + {12345678901.0, "\\uFFE5120\\u4EBF"}, + {123456789012.0, "\\uFFE51200\\u4EBF"}, + {1234567890123.0, "\\uFFE51.2\\u5146"}, + {12345678901234.0, "\\uFFE512\\u5146"}, + {123456789012345.0, "\\uFFE5120\\u5146"}, +}; +static ExpectedResult kGermanCurrencyTestData[] = { + {1.0, u8"1\\u00A0\\u20AC"}, + {12.0, u8"12\\u00A0\\u20AC"}, + {123.0, u8"120\\u00A0\\u20AC"}, + {1234.0, u8"1200\\u00A0\\u20AC"}, + {12345.0, u8"12.000\\u00A0\\u20AC"}, + {123456.0, u8"120.000\\u00A0\\u20AC"}, + {1234567.0, u8"1,2\\u00A0Mio.\\u00A0\\u20AC"}, + {12345678.0, u8"12\\u00A0Mio.\\u00A0\\u20AC"}, + {123456789.0, u8"120\\u00A0Mio.\\u00A0\\u20AC"}, + {1234567890.0, u8"1,2\\u00A0Mrd.\\u00A0\\u20AC"}, + {12345678901.0, u8"12\\u00A0Mrd.\\u00A0\\u20AC"}, + {123456789012.0, u8"120\\u00A0Mrd.\\u00A0\\u20AC"}, + {1234567890123.0, u8"1,2\\u00A0Bio.\\u00A0\\u20AC"}, + {12345678901234.0, u8"12\\u00A0Bio.\\u00A0\\u20AC"}, + {123456789012345.0, u8"120\\u00A0Bio.\\u00A0\\u20AC"}, +}; +static ExpectedResult kEnglishCurrencyTestData[] = { + {1.0, u8"$1"}, + {12.0, u8"$12"}, + {123.0, u8"$120"}, + {1234.0, u8"$1.2K"}, + {12345.0, u8"$12K"}, + {123456.0, u8"$120K"}, + {1234567.0, u8"$1.2M"}, + {12345678.0, u8"$12M"}, + {123456789.0, u8"$120M"}, + {1234567890.0, u8"$1.2B"}, + {12345678901.0, u8"$12B"}, + {123456789012.0, u8"$120B"}, + {1234567890123.0, u8"$1.2T"}, + {12345678901234.0, u8"$12T"}, + {123456789012345.0, u8"$120T"}, +}; + class CompactDecimalFormatTest : public IntlTest { public: @@ -184,13 +236,18 @@ private: void TestCsShort(); void TestSkLong(); void TestSwahiliShortNegative(); + void TestEnglishCurrency(); + void TestGermanCurrency(); + void TestChineseCurrency(); void TestArabicLong(); void TestFieldPosition(); void TestSignificantDigits(); void TestAPIVariants(); void CheckLocale( const Locale& locale, UNumberCompactStyle style, - const ExpectedResult* expectedResult, int32_t expectedResultLength); + const ExpectedResult* expectedResults, int32_t expectedResultLength); + void CheckLocaleWithCurrency(const Locale& locale, UNumberCompactStyle style, const UChar* currency, + const ExpectedResult* expectedResults, int32_t expectedResultLength); void CheckExpectedResult( const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult, const char* description); @@ -210,6 +267,9 @@ void CompactDecimalFormatTest::runIndexedTest( TESTCASE_AUTO(TestSerbianLongNegative); TESTCASE_AUTO(TestJapaneseShort); TESTCASE_AUTO(TestSwahiliShort); + TESTCASE_AUTO(TestEnglishCurrency); + TESTCASE_AUTO(TestGermanCurrency); + TESTCASE_AUTO(TestChineseCurrency); TESTCASE_AUTO(TestCsShort); TESTCASE_AUTO(TestSkLong); TESTCASE_AUTO(TestSwahiliShortNegative); @@ -244,6 +304,21 @@ void CompactDecimalFormatTest::TestSwahiliShort() { CheckLocale("sw", UNUM_SHORT, kSwahiliShort, UPRV_LENGTHOF(kSwahiliShort)); } +void CompactDecimalFormatTest::TestEnglishCurrency() { + CheckLocaleWithCurrency( + "en", UNUM_SHORT, u"USD", kEnglishCurrencyTestData, UPRV_LENGTHOF(kEnglishCurrencyTestData)); +} + +void CompactDecimalFormatTest::TestGermanCurrency() { + CheckLocaleWithCurrency( + "de", UNUM_SHORT, u"EUR", kGermanCurrencyTestData, UPRV_LENGTHOF(kGermanCurrencyTestData)); +} + +void CompactDecimalFormatTest::TestChineseCurrency() { + CheckLocaleWithCurrency( + "zh", UNUM_SHORT, u"CNY", kChineseCurrencyTestData, UPRV_LENGTHOF(kChineseCurrencyTestData)); +} + void CompactDecimalFormatTest::TestFieldPosition() { // Swahili uses prefixes which forces offsets in field position to change UErrorCode status = U_ZERO_ERROR; @@ -421,6 +496,25 @@ void CompactDecimalFormatTest::CheckLocale(const Locale& locale, UNumberCompactS } } +void CompactDecimalFormatTest::CheckLocaleWithCurrency(const Locale& locale, UNumberCompactStyle style, + const UChar* currency, + const ExpectedResult* expectedResults, + int32_t expectedResultLength) { + UErrorCode status = U_ZERO_ERROR; + LocalPointer cdf(createCDFInstance(locale, style, status)); + if (U_FAILURE(status)) { + dataerrln("Unable to create format object - %s", u_errorName(status)); + return; + } + cdf->setCurrency(currency, status); + assertSuccess("Failed to set currency", status); + char description[256]; + sprintf(description,"%s - %s", locale.getName(), StyleStr(style)); + for (int32_t i = 0; i < expectedResultLength; i++) { + CheckExpectedResult(cdf.getAlias(), &expectedResults[i], description); + } +} + void CompactDecimalFormatTest::CheckExpectedResult( const CompactDecimalFormat* cdf, const ExpectedResult* expectedResult, const char* description) { UnicodeString actual;