ICU-20701 Add more PluralRules tests for locales with keywords

This commit is contained in:
Peter Edberg 2019-08-30 00:42:41 -07:00 committed by pedberg-icu
parent cfe093e945
commit f46b567ba3
3 changed files with 41 additions and 0 deletions

View file

@ -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 */

View file

@ -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 */

View file

@ -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