mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-20 20:19:32 +00:00
ICU-8812 added test case for fallback warning to TestSymbolsWithBadLocale.
X-SVN-Rev: 30650
This commit is contained in:
parent
728d95f8c9
commit
64da48200b
1 changed files with 48 additions and 26 deletions
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue