mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 06:53:45 +00:00
ICU-20701 Add more PluralRules tests for locales with keywords
This commit is contained in:
parent
cfe093e945
commit
f46b567ba3
3 changed files with 41 additions and 0 deletions
|
@ -1037,12 +1037,34 @@ void PluralRulesTest::testSelectTrailingZeros() {
|
|||
}
|
||||
}
|
||||
|
||||
void PluralRulesTest::compareLocaleResults(const char* loc1, const char* loc2, const char* loc3) {
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
LocalPointer<PluralRules> rules1(PluralRules::forLocale(loc1, status));
|
||||
LocalPointer<PluralRules> rules2(PluralRules::forLocale(loc2, status));
|
||||
LocalPointer<PluralRules> rules3(PluralRules::forLocale(loc3, status));
|
||||
if (U_FAILURE(status)) {
|
||||
dataerrln("Failed to create PluralRules for one of %s, %s, %s: %s\n", loc1, loc2, loc3, u_errorName(status));
|
||||
return;
|
||||
}
|
||||
for (int32_t value = 0; value <= 12; value++) {
|
||||
UnicodeString result1 = rules1->select(value);
|
||||
UnicodeString result2 = rules2->select(value);
|
||||
UnicodeString result3 = rules3->select(value);
|
||||
if (result1 != result2 || result1 != result3) {
|
||||
errln("PluralRules.select(%d) does not return the same values for %s, %s, %s\n", value, loc1, loc2, loc3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PluralRulesTest::testLocaleExtension() {
|
||||
IcuTestErrorCode errorCode(*this, "testLocaleExtension");
|
||||
LocalPointer<PluralRules> rules(PluralRules::forLocale("pt@calendar=gregorian", errorCode));
|
||||
if (errorCode.errIfFailureAndReset("PluralRules::forLocale()")) { return; }
|
||||
UnicodeString key = rules->select(1);
|
||||
assertEquals("pt@calendar=gregorian select(1)", u"one", key);
|
||||
compareLocaleResults("ar", "ar_SA", "ar_SA@calendar=gregorian");
|
||||
compareLocaleResults("ru", "ru_UA", "ru-u-cu-RUB");
|
||||
compareLocaleResults("fr", "fr_CH", "fr@ms=uksystem");
|
||||
}
|
||||
|
||||
#endif /* #if !UCONFIG_NO_FORMATTING */
|
||||
|
|
|
@ -45,6 +45,7 @@ private:
|
|||
double expected);
|
||||
void checkSelect(const LocalPointer<PluralRules> &rules, UErrorCode &status,
|
||||
int32_t line, const char *keyword, ...);
|
||||
void compareLocaleResults(const char* loc1, const char* loc2, const char* loc3);
|
||||
};
|
||||
|
||||
#endif /* #if !UCONFIG_NO_FORMATTING */
|
||||
|
|
|
@ -526,11 +526,29 @@ public class PluralRulesTest extends TestFmwk {
|
|||
}
|
||||
}
|
||||
|
||||
private void compareLocaleResults(String loc1, String loc2, String loc3) {
|
||||
PluralRules rules1 = PluralRules.forLocale(new ULocale(loc1));
|
||||
PluralRules rules2 = PluralRules.forLocale(new ULocale(loc2));
|
||||
PluralRules rules3 = PluralRules.forLocale(new ULocale(loc3));
|
||||
for (int value = 0; value <= 12; value++) {
|
||||
String result1 = rules1.select(value);
|
||||
String result2 = rules2.select(value);
|
||||
String result3 = rules3.select(value);
|
||||
if (!result1.equals(result2) || !result1.equals(result3)) {
|
||||
errln("PluralRules.select(" + value + ") does not return the same values for "
|
||||
+ loc1 + ", " + loc2 + ", " + loc3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLocaleExtension() {
|
||||
PluralRules rules = PluralRules.forLocale(new ULocale("pt@calendar=gregorian"));
|
||||
String key = rules.select(1);
|
||||
assertEquals("pt@calendar=gregorian select(1)", "one", key);
|
||||
compareLocaleResults("ar", "ar_SA", "ar_SA@calendar=gregorian");
|
||||
compareLocaleResults("ru", "ru_UA", "ru-u-cu-RUB");
|
||||
compareLocaleResults("fr", "fr_CH", "fr@ms=uksystem");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Add table
Reference in a new issue