diff options
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp')
-rw-r--r-- | Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp index 90198e070f4..1ed6d760e67 100644 --- a/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp +++ b/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp @@ -23,6 +23,7 @@ void IntlTestDecimalFormatSymbols::runIndexedTest( int32_t index, UBool exec, co TESTCASE_AUTO_BEGIN; TESTCASE_AUTO(testSymbols); TESTCASE_AUTO(testLastResortData); + TESTCASE_AUTO(testDigitSymbols); TESTCASE_AUTO(testNumberingSystem); TESTCASE_AUTO_END; } @@ -249,6 +250,102 @@ void IntlTestDecimalFormatSymbols::testLastResortData() { Verify(1234567.25, "#,##0.##", *lastResort, "1,234,567.25"); } +void IntlTestDecimalFormatSymbols::testDigitSymbols() { + // This test does more in ICU4J than in ICU4C right now. + // In ICU4C, it is basically just a test for codePointZero and getConstDigitSymbol. + UChar defZero = u'0'; + UChar32 osmanyaZero = U'\U000104A0'; + static const UChar* osmanyaDigitStrings[] = { + u"\U000104A0", u"\U000104A1", u"\U000104A2", u"\U000104A3", u"\U000104A4", + u"\U000104A5", u"\U000104A6", u"\U000104A7", u"\U000104A8", u"\U000104A9" + }; + + IcuTestErrorCode status(*this, "testDigitSymbols()"); + DecimalFormatSymbols symbols(Locale("en"), status); + + if (defZero != symbols.getCodePointZero()) { + errln("ERROR: Code point zero be ASCII 0"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("i. ASCII Digit at index ") + Int64ToUnicodeString(i), + UnicodeString(u'0' + i), + symbols.getConstDigitSymbol(i)); + } + + for (int32_t i=0; i<=9; i++) { + DecimalFormatSymbols::ENumberFormatSymbol key = + i == 0 + ? DecimalFormatSymbols::kZeroDigitSymbol + : static_cast<DecimalFormatSymbols::ENumberFormatSymbol> + (DecimalFormatSymbols::kOneDigitSymbol + i - 1); + symbols.setSymbol(key, UnicodeString(osmanyaDigitStrings[i]), FALSE); + } + // NOTE: in ICU4J, the calculation of codePointZero is smarter; + // in ICU4C, it is more conservative and is only set if propogateDigits is true. + if (-1 != symbols.getCodePointZero()) { + errln("ERROR: Code point zero be invalid"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("ii. Osmanya digit at index ") + Int64ToUnicodeString(i), + UnicodeString(osmanyaDigitStrings[i]), + symbols.getConstDigitSymbol(i)); + } + + // Check Osmanya codePointZero + symbols.setSymbol( + DecimalFormatSymbols::kZeroDigitSymbol, + UnicodeString(osmanyaDigitStrings[0]), TRUE); + if (osmanyaZero != symbols.getCodePointZero()) { + errln("ERROR: Code point zero be Osmanya code point zero"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("iii. Osmanya digit at index ") + Int64ToUnicodeString(i), + UnicodeString(osmanyaDigitStrings[i]), + symbols.getConstDigitSymbol(i)); + } + + // Check after copy + DecimalFormatSymbols copy(symbols); + if (osmanyaZero != copy.getCodePointZero()) { + errln("ERROR: Code point zero be Osmanya code point zero"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("iv. After copy at index ") + Int64ToUnicodeString(i), + UnicodeString(osmanyaDigitStrings[i]), + copy.getConstDigitSymbol(i)); + } + + // Check when loaded from resource bundle + DecimalFormatSymbols fromData(Locale("en@numbers=osma"), status); + if (osmanyaZero != fromData.getCodePointZero()) { + errln("ERROR: Code point zero be Osmanya code point zero"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("v. Resource bundle at index ") + Int64ToUnicodeString(i), + UnicodeString(osmanyaDigitStrings[i]), + fromData.getConstDigitSymbol(i)); + } + + // Setting a digit somewhere in the middle should invalidate codePointZero + symbols.setSymbol(DecimalFormatSymbols::kOneDigitSymbol, u"foo", FALSE); + if (-1 != symbols.getCodePointZero()) { + errln("ERROR: Code point zero be invalid"); + } + + // Reset digits to Latin + symbols.setSymbol( + DecimalFormatSymbols::kZeroDigitSymbol, + UnicodeString(defZero)); + if (defZero != symbols.getCodePointZero()) { + errln("ERROR: Code point zero be ASCII 0"); + } + for (int32_t i=0; i<=9; i++) { + assertEquals(UnicodeString("vi. ASCII Digit at index ") + Int64ToUnicodeString(i), + UnicodeString(u'0' + i), + symbols.getConstDigitSymbol(i)); + } +} + void IntlTestDecimalFormatSymbols::testNumberingSystem() { IcuTestErrorCode errorCode(*this, "testNumberingSystem"); struct testcase { |