Skip to content

Commit

Permalink
ICU-22575 Change AvailableFormatsSink to allow locales to inherit ava…
Browse files Browse the repository at this point in the history
…ilableFormats items from the root locale.
  • Loading branch information
richgillam committed Dec 4, 2023
1 parent 8d3d214 commit 5de4f59
Show file tree
Hide file tree
Showing 7 changed files with 19 additions and 14 deletions.
4 changes: 2 additions & 2 deletions icu4c/source/i18n/dtptngen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ struct DateTimePatternGenerator::AvailableFormatsSink : public ResourceSink {
AvailableFormatsSink(DateTimePatternGenerator& _dtpg) : dtpg(_dtpg) {}
virtual ~AvailableFormatsSink();

virtual void put(const char *key, ResourceValue &value, UBool isRoot,
virtual void put(const char *key, ResourceValue &value, UBool /*isRoot*/,
UErrorCode &errorCode) override {
const UnicodeString formatKey(key, -1, US_INV);
if (!dtpg.isAvailableFormatSet(formatKey) ) {
Expand All @@ -1032,7 +1032,7 @@ struct DateTimePatternGenerator::AvailableFormatsSink : public ResourceSink {
// derived from std patterns, but not a previous availableFormats entry:
const UnicodeString& formatValue = value.getUnicodeString(errorCode);
conflictingPattern.remove();
dtpg.addPatternWithSkeleton(formatValue, &formatKey, !isRoot, conflictingPattern, errorCode);
dtpg.addPatternWithSkeleton(formatValue, &formatKey, true, conflictingPattern, errorCode);
}
}
};
Expand Down
2 changes: 1 addition & 1 deletion icu4c/source/test/cintltst/udatpg_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ static void TestDateTimePatterns(void) {
{ "ha", { u"EEEE d MMMM, y 'da' HH:mm",
u"d MMMM, y 'da' HH:mm",
u"d MMM, y, HH:mm",
u"d/M/y, HH:mm" } },
u"y-MM-dd, HH:mm" } },
{ NULL, { NULL, NULL, NULL, NULL } } // terminator
};

Expand Down
4 changes: 2 additions & 2 deletions icu4c/source/test/intltest/dtifmtts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@ void DateIntervalFormatTest::testFormat() {

"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "d", "10/10 \\u2013 10/11",

"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "y", "2550",
"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "y", "\\u0E1E.\\u0E28. 2550",


"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "MMM", "\\u0E15.\\u0E04.\\u2013\\u0E1E.\\u0E22.",
Expand Down Expand Up @@ -2144,7 +2144,7 @@ void DateIntervalFormatTest::testTicket20707() {
{u"12\u202FAM", u"00", u"00", u"12\u202FAM", u"12\u202FAM", u"0 (hour: 12)", u"12\u202FAM"},
{u"12\u202FAM", u"00", u"00", u"12\u202FAM", u"12\u202FAM", u"0 (hour: 12)", u"12\u202FAM"},
// Hour-cycle: K
{u"0 am", u"0", u"0", u"0 am", u"0 am", u"0 (\u0918\u0902\u091F\u093E: 0)", u"\u0930\u093E\u0924 0"}
{u"0 am", u"00", u"00", u"0 am", u"0 am", u"0 (\u0918\u0902\u091F\u093E: 00)", u"\u0930\u093E\u0924 0"}
};

int32_t i = 0;
Expand Down
8 changes: 5 additions & 3 deletions icu4c/source/test/intltest/dtptngts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1168,9 +1168,9 @@ void IntlTestDateTimePatternGeneratorAPI::testC() {
{"zh-TW", "CCCCm", "BBBBhh:mm"},
{"zh-TW", "CCCCCm", "BBBBBh:mm"},
{"zh-TW", "CCCCCCm", "BBBBBhh:mm"},
{"de", "Cm", "H:mm"},
{"de", "Cm", "HH:mm"},
{"de", "CCm", "HH:mm"},
{"de", "CCCm", "H:mm"},
{"de", "CCCm", "HH:mm"},
{"de", "CCCCm", "HH:mm"},
{"en", "Cm", "h:mm\\u202Fa"},
{"en", "CCm", "hh:mm\\u202Fa"},
Expand Down Expand Up @@ -1602,6 +1602,8 @@ void IntlTestDateTimePatternGeneratorAPI::testBestPattern() {
{ "en_GB@calendar=coptic", "yMd", u"dd/MM/y GGGGG" },
{ "en_GB@calendar=japanese", "yMd", u"dd/MM/y GGGGG" },
{ "en_GB@calendar=buddhist", "yMd", u"dd/MM/y GGGGG" },
// ICU-22757: Not inheriting availableFormats patterns from root
{ "sv_SE", "yMd", u"y-MM-dd" },
// ICU-20992: Bad patterns for missing fields
{ "ckb_IR", "mmSSS", u"mm:ss\u066bSSS" },
{ "ckb_IR", "BSSS", u"SSS \u251c'Dayperiod': B\u2524" },
Expand Down Expand Up @@ -1657,7 +1659,7 @@ void IntlTestDateTimePatternGeneratorAPI::testDateTimePatterns() {
{ "ha", { UnicodeString(u"EEEE d MMMM, y 'da' HH:mm"),
UnicodeString(u"d MMMM, y 'da' HH:mm"),
UnicodeString(u"d MMM, y, HH:mm"),
UnicodeString(u"d/M/y, HH:mm") } },
UnicodeString(u"y-MM-dd, HH:mm") } },
{ nullptr, { UnicodeString(""), UnicodeString(""), // terminator
UnicodeString(""), UnicodeString("") } },
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ public void put(UResource.Key key, UResource.Value value, boolean isRoot) {
// Add pattern with its associated skeleton. Override any duplicate derived from std patterns,
// but not a previous availableFormats entry:
String formatValue = value.toString();
addPatternWithSkeleton(formatValue, formatKey, !isRoot, returnInfo);
addPatternWithSkeleton(formatValue, formatKey, true, returnInfo);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ public void TestFormat() {

"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "d", "10/10 \\u2013 10/11",

"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "y", "2550",
"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "y", "\\u0e1e.\\u0e28. 2550",


"th", "BE 2550 10 10 10:10:10", "BE 2550 11 10 10:10:10", "MMM", "\u0E15.\u0E04.\u2013\u0E1E.\u0E22.",
Expand Down Expand Up @@ -2265,7 +2265,7 @@ public void testTicket20707() {
{"0\u202FAM", "00", "00", "0\u202FAM", "0\u202FAM", "0 (hour: 00)", "0\u202FAM"},
{"12\u202FAM", "00", "00", "12\u202FAM", "12\u202FAM", "0 (hour: 12)", "12\u202FAM"},
{"12\u202FAM", "00", "00", "12\u202FAM", "12\u202FAM", "0 (hour: 12)", "12\u202FAM"},
{"0 am", "0", "0", "0 am", "0 am", "0 (\u0918\u0902\u091F\u093E: 0)", "\u0930\u093E\u0924 0"}
{"0 am", "00", "00", "0 am", "0 am", "0 (\u0918\u0902\u091F\u093E: 00)", "\u0930\u093E\u0924 0"}
};

int i = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@ public void TestC() {
{"zh-TW", "CCCCm", "BBBBhh:mm"},
{"zh-TW", "CCCCCm", "BBBBBh:mm"},
{"zh-TW", "CCCCCCm", "BBBBBhh:mm"},
{"de", "Cm", "H:mm"},
{"de", "Cm", "HH:mm"},
{"de", "CCm", "HH:mm"},
{"de", "CCCm", "H:mm"},
{"de", "CCCm", "HH:mm"},
{"de", "CCCCm", "HH:mm"},
{"en", "Cm", "h:mm\u202Fa"},
{"en", "CCm", "hh:mm\u202Fa"},
Expand Down Expand Up @@ -1832,6 +1832,9 @@ public void testBestPattern() {

// ICU-21873: Missing aliased values
"en_001@calendar=islamic", "Ehm", "EEE h:mm\u202Fa",

// ICU-22575: AvailableFormats not inheriting from root
"sv_SE", "yMd", "y-MM-dd",
};

for (int i = 0; i < testCases.length; i += 3) {
Expand Down Expand Up @@ -1921,7 +1924,7 @@ public void testDateTimePatterns() {
"EEEE d MMMM, y 'da' HH:mm",
"d MMMM, y 'da' HH:mm",
"d MMM, y, HH:mm",
"d/M/y, HH:mm" } ),
"y-MM-dd, HH:mm" } ),
};

String[] enDTPatterns = {
Expand Down

0 comments on commit 5de4f59

Please sign in to comment.