* different semantic kinds of transformations.
*/
static const CanonicalizationMap CANONICALIZE_MAP[] = {
- { "art_LOJBAN", "jbo" }, /* registered name */
+ { "art__LOJBAN", "jbo" }, /* registered name */
{ "hy__AREVELA", "hy" }, /* Registered IANA variant */
{ "hy__AREVMDA", "hyw" }, /* Registered IANA variant */
+ { "zh__GUOYU", "zh" }, /* registered name */
+ { "zh__HAKKA", "hak" }, /* registered name */
+ { "zh__XIANG", "hsn" }, /* registered name */
+ // subtags with 3 chars won't be treated as variants.
{ "zh_GAN", "gan" }, /* registered name */
- { "zh_GUOYU", "zh" }, /* registered name */
- { "zh_HAKKA", "hak" }, /* registered name */
{ "zh_MIN_NAN", "nan" }, /* registered name */
{ "zh_WUU", "wuu" }, /* registered name */
- { "zh_XIANG", "hsn" }, /* registered name */
{ "zh_YUE", "yue" }, /* registered name */
};
TESTCASE_AUTO(TestBug13277);
TESTCASE_AUTO(TestBug13554);
TESTCASE_AUTO(TestBug20410);
+ TESTCASE_AUTO(TestBug20900);
TESTCASE_AUTO(TestConstructorAcceptsBCP47);
TESTCASE_AUTO(TestForLanguageTag);
TESTCASE_AUTO(TestToLanguageTag);
static const char locid3[] = "art__lojban@x=0";
Locale result3 = Locale::createCanonical(locid3);
- static const Locale expected3("art__LOJBAN@x=0");
+ static const Locale expected3("jbo@x=0");
assertEquals(locid3, expected3.getName(), result3.getName());
static const char locid4[] = "art-lojban-x-0";
assertEquals(locid4, expected4.getName(), result4.getName());
}
+void LocaleTest::TestBug20900() {
+ static const struct {
+ const char *localeID; /* input */
+ const char *canonicalID; /* expected canonicalize() result */
+ } testCases[] = {
+ { "art-lojban", "jbo" },
+ { "zh-guoyu", "zh" },
+ { "zh-hakka", "hak" },
+ { "zh-xiang", "hsn" },
+ { "zh-min-nan", "nan" },
+ { "zh-gan", "gan" },
+ { "zh-wuu", "wuu" },
+ { "zh-yue", "yue" },
+ };
+
+ IcuTestErrorCode status(*this, "TestBug20900");
+ for (int32_t i=0; i < UPRV_LENGTHOF(testCases); i++) {
+ Locale loc = Locale::createCanonical(testCases[i].localeID);
+ std::string result = loc.toLanguageTag<std::string>(status);
+ const char* tag = loc.isBogus() ? "BOGUS" : result.c_str();
+ status.errIfFailureAndReset("FAIL: createCanonical(%s).toLanguageTag() expected \"%s\"",
+ testCases[i].localeID, tag);
+ assertEquals("createCanonical", testCases[i].canonicalID, tag);
+ }
+}
+
void LocaleTest::TestConstructorAcceptsBCP47() {
IcuTestErrorCode status(*this, "TestConstructorAcceptsBCP47");
void TestBug13277();
void TestBug13554();
void TestBug20410();
+ void TestBug20900();
void TestConstructorAcceptsBCP47();
void TestAddLikelySubtags();
* canonicalized id.
*/
private static String[][] CANONICALIZE_MAP = {
- { "art_LOJBAN", "jbo" }, /* registered name */
- { "cel_GAULISH", "cel__GAULISH" }, /* registered name */
- { "de_1901", "de__1901" }, /* registered name */
- { "de_1906", "de__1906" }, /* registered name */
- { "en_BOONT", "en__BOONT" }, /* registered name */
- { "en_SCOUSE", "en__SCOUSE" }, /* registered name */
+ { "art__LOJBAN", "jbo" }, /* registered name */
+ { "cel__GAULISH", "cel__GAULISH" }, /* registered name */
+ { "de__1901", "de__1901" }, /* registered name */
+ { "de__1906", "de__1906" }, /* registered name */
+ { "en__BOONT", "en__BOONT" }, /* registered name */
+ { "en__SCOUSE", "en__SCOUSE" }, /* registered name */
{ "hy__AREVELA", "hy", null, null }, /* Registered IANA variant */
{ "hy__AREVMDA", "hyw", null, null }, /* Registered IANA variant */
- { "sl_ROZAJ", "sl__ROZAJ" }, /* registered name */
- { "zh_GAN", "zh__GAN" }, /* registered name */
- { "zh_GUOYU", "zh" }, /* registered name */
- { "zh_HAKKA", "zh__HAKKA" }, /* registered name */
+ { "sl__ROZAJ", "sl__ROZAJ" }, /* registered name */
+ { "zh__GUOYU", "zh" }, /* registered name */
+ { "zh__HAKKA", "hak" }, /* registered name */
+ { "zh__XIANG", "hsn" }, /* registered name */
+ // Three letter subtags won't be treated as variants.
+ { "zh_GAN", "gan" }, /* registered name */
{ "zh_MIN", "zh__MIN" }, /* registered name */
- { "zh_MIN_NAN", "zh__MINNAN" }, /* registered name */
- { "zh_WUU", "zh__WUU" }, /* registered name */
- { "zh_XIANG", "zh__XIANG" }, /* registered name */
- { "zh_YUE", "zh__YUE" } /* registered name */
+ { "zh_MIN_NAN", "nan" }, /* registered name */
+ { "zh_WUU", "wuu" }, /* registered name */
+ { "zh_YUE", "yue" } /* registered name */
};
/**
Assert.assertEquals(displayName, locale_tag.getDisplayName(displayLocale));
Assert.assertEquals(displayName, locale_build.getDisplayName(displayLocale));
}
+
+ @Test
+ public void Test20900() {
+ final String [][] testData = new String[][]{
+ {"art-lojban", "jbo"},
+ {"zh-guoyu", "zh"},
+ {"zh-hakka", "hak"},
+ {"zh-xiang", "hsn"},
+ {"zh-min-nan", "nan"},
+ {"zh-gan", "gan"},
+ {"zh-yue", "yue"},
+ };
+ for (int row=0;row<testData.length;row++) {
+ ULocale loc = ULocale.createCanonical(testData[row][0]);
+ Assert.assertEquals(testData[row][1], loc.toLanguageTag());
+ }
+ }
}