diff options
author | Victor Chang <vichang@google.com> | 2023-02-24 16:28:04 +0000 |
---|---|---|
committer | Victor Chang <vichang@google.com> | 2023-02-24 16:56:23 +0000 |
commit | 12700796d197cfd5b4d3d4eb2d092b2e21f46b9d (patch) | |
tree | 7b2247941535a720884dc0408080929b8e57b597 /icu4j | |
parent | 0cfb88c9263d9fef67936eb75a2b6477f1d8f348 (diff) | |
download | icu-12700796d197cfd5b4d3d4eb2d092b2e21f46b9d.tar.gz |
Cherry-pick: ICU-22226 Fix Calendar.getFirstDayOfWeek to honor -u-fw
Upstream commit:
https://github.com/unicode-org/icu/commit/76df897b77fd938abc29c9121dde794300a171e6
Upstream bug:
https://unicode-org.atlassian.net/browse/ICU-11870
Test: m droid
Change-Id: Ic48e20ac9f94eea6246eb37e19b294c375262afe
Diffstat (limited to 'icu4j')
-rw-r--r-- | icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java | 19 | ||||
-rw-r--r-- | icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java | 32 |
2 files changed, 51 insertions, 0 deletions
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java index 1441950cc..878f558cb 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java @@ -1595,6 +1595,25 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca // week data setWeekData(getRegionForCalendar(locale)); + // Check if the locale has a "fw" u extension and we honor it if present. + String fw = locale.getKeywordValue("fw"); + if (fw != null) { + int fwOverride; + switch (fw) { + case "sun": fwOverride = SUNDAY; break; + case "mon": fwOverride = MONDAY; break; + case "tue": fwOverride = TUESDAY; break; + case "wed": fwOverride = WEDNESDAY; break; + case "thu": fwOverride = THURSDAY; break; + case "fri": fwOverride = FRIDAY; break; + case "sat": fwOverride = SATURDAY; break; + default: fwOverride = -1; + } + if (fwOverride != -1) { + setFirstDayOfWeek(fwOverride); + } + } + // set valid/actual locale setCalendarLocale(locale); diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java index 717141fb6..7931d70cf 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/calendar/CalendarRegressionTest.java @@ -2623,5 +2623,37 @@ public class CalendarRegressionTest extends com.ibm.icu.dev.test.TestFmwk { TESTS[i][2], cal.getType()); } } + + @Test + public void TestRespectUExtensionFw() { // ICU-22226 + String[] localeIds = { + "en-US", + "en-US-u-fw-xyz", + "en-US-u-fw-sun", + "en-US-u-fw-mon", + "en-US-u-fw-thu", + "en-US-u-fw-sat" + }; + int[] expectedValues = { + Calendar.SUNDAY, + Calendar.SUNDAY, + Calendar.SUNDAY, + Calendar.MONDAY, + Calendar.THURSDAY, + Calendar.SATURDAY + }; + + assertEquals( + "The localeIds count matches the expectedValues count", + localeIds.length, + expectedValues.length); + + for (int i = 0; i < localeIds.length; i++) { + assertEquals( + "Calendar.getFirstDayOfWeek() does not seem to respect fw extension u in locale id", + expectedValues[i], + Calendar.getInstance(Locale.forLanguageTag(localeIds[i])).getFirstDayOfWeek()); + } + } } //eof |