From 64da48200bfc07a0c426c4fb5da820f6c1af62ed Mon Sep 17 00:00:00 2001 From: Abhinav Gupta Date: Tue, 13 Sep 2011 20:58:08 +0000 Subject: [PATCH] ICU-8812 added test case for fallback warning to TestSymbolsWithBadLocale. X-SVN-Rev: 30650 --- icu4c/source/test/intltest/numfmtst.cpp | 74 ++++++++++++++++--------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/icu4c/source/test/intltest/numfmtst.cpp b/icu4c/source/test/intltest/numfmtst.cpp index 3318da43879..55d0d3ac0b4 100644 --- a/icu4c/source/test/intltest/numfmtst.cpp +++ b/icu4c/source/test/intltest/numfmtst.cpp @@ -1922,37 +1922,59 @@ void NumberFormatTest::TestCurrencyAmount(void){ void NumberFormatTest::TestSymbolsWithBadLocale(void) { Locale locDefault; - Locale locBad("x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME"); - UErrorCode status = U_ZERO_ERROR; - UnicodeString intlCurrencySymbol((UChar)0xa4); + static const char *badLocales[] = { + // length < ULOC_FULLNAME_CAPACITY => expect U_USING_DEFAULT_WARNING + "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME", - intlCurrencySymbol.append((UChar)0xa4); + // length > ULOC_FULLNAME_CAPACITY => expect U_USING_FALLBACK_WARNING + "x-crazy_ZZ_MY_SPECIAL_ADMINISTRATION_REGION_NEEDS_A_SPECIAL_VARIANT_WITH_A_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_REALLY_LONG_NAME" + }; - logln("Current locale is %s", Locale::getDefault().getName()); - Locale::setDefault(locBad, status); - logln("Current locale is %s", Locale::getDefault().getName()); - DecimalFormatSymbols mySymbols(status); - if (status != U_USING_DEFAULT_WARNING) { - errln("DecimalFormatSymbols should returned U_USING_DEFAULT_WARNING."); - } - if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { - errln("DecimalFormatSymbols does not have the right locale."); - } - int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; - for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { - logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") - + prettify(mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum))); + int i; + for (i = 0; i < sizeof(badLocales); i++) { + const char *localeName = badLocales[i]; + Locale locBad(localeName); + UErrorCode status = U_ZERO_ERROR; + UErrorCode expectedStatus; + char *expectedStatusName; + UnicodeString intlCurrencySymbol((UChar)0xa4); - if (mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum).length() == 0 - && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol - && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) - { - errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); + intlCurrencySymbol.append((UChar)0xa4); + + if (uprv_strlen(localeName) < ULOC_FULLNAME_CAPACITY) { + expectedStatus = U_USING_DEFAULT_WARNING; + expectedStatusName = "U_USING_DEFAULT_WARNING"; + } else { + expectedStatus = U_USING_FALLBACK_WARNING; + expectedStatusName = "U_USING_FALLBACK_WARNING"; } + + logln("Current locale is %s", Locale::getDefault().getName()); + Locale::setDefault(locBad, status); + logln("Current locale is %s", Locale::getDefault().getName()); + DecimalFormatSymbols mySymbols(status); + if (status != expectedStatus) { + errln("DecimalFormatSymbols should return %s.", expectedStatusName); + } + if (strcmp(mySymbols.getLocale().getName(), locBad.getName()) != 0) { + errln("DecimalFormatSymbols does not have the right locale.", locBad.getName()); + } + int symbolEnum = (int)DecimalFormatSymbols::kDecimalSeparatorSymbol; + for (; symbolEnum < (int)DecimalFormatSymbols::kFormatSymbolCount; symbolEnum++) { + UnicodeString symbolString = mySymbols.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)symbolEnum); + logln(UnicodeString("DecimalFormatSymbols[") + symbolEnum + UnicodeString("] = ") + prettify(symbolString)); + if (symbolString.length() == 0 + && symbolEnum != (int)DecimalFormatSymbols::kGroupingSeparatorSymbol + && symbolEnum != (int)DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol) + { + errln("DecimalFormatSymbols has an empty string at index %d.", symbolEnum); + } + } + + status = U_ZERO_ERROR; + Locale::setDefault(locDefault, status); + logln("Current locale is %s", Locale::getDefault().getName()); } - status = U_ZERO_ERROR; - Locale::setDefault(locDefault, status); - logln("Current locale is %s", Locale::getDefault().getName()); } /** -- 2.40.0