Skip to content
Permalink
Browse files
8246662: Test java/time/test/java/time/format/TestUnicodeExtension.ja…
…va failed on japanese locale

Reviewed-by: rriggs, joehw
  • Loading branch information
naotoj committed Jun 9, 2020
1 parent 140a797 commit 27e168677f1db53871b058488535c12878243d9b
Showing 2 changed files with 33 additions and 22 deletions.
@@ -1469,7 +1469,7 @@ public DateTimeFormatter withLocale(Locale locale) {

/**
* Returns a copy of this formatter with localized values of the locale,
* calendar, region, decimal style and/or timezone, that supercede values in
* calendar, region, decimal style and/or timezone, that supersede values in
* this formatter.
* <p>
* This is used to lookup any part of the formatter needing specific
@@ -1489,30 +1489,29 @@ public DateTimeFormatter withLocale(Locale locale) {
*
* @param locale the locale, not null
* @return a formatter based on this formatter with localized values of
* the calendar, decimal style and/or timezone, that supercede values in this
* the calendar, decimal style and/or timezone, that supersede values in this
* formatter.
* @see #withLocale(Locale)
* @since 10
*/
public DateTimeFormatter localizedBy(Locale locale) {
if (this.locale.equals(locale)) {
return this;
}

// Override decimalStyle/chronology/timezone for the locale object
String tzType = locale.getUnicodeLocaleType("tz");
ZoneId z = tzType != null ?
TimeZoneNameUtility.convertLDMLShortID(tzType)
.map(ZoneId::of)
.orElse(zone) :
zone;
return new DateTimeFormatter(printerParser,
locale,
DecimalStyle.of(locale),
resolverStyle,
resolverFields,
Chronology.ofLocale(locale),
z);
Chronology c = Chronology.ofLocale(locale);
DecimalStyle ds = DecimalStyle.of(locale);
if (this.locale.equals(locale) &&
c.equals(chrono) &&
ds.equals(decimalStyle) &&
Objects.equals(z, zone)) {
return this;
} else {
return new DateTimeFormatter(printerParser, locale, ds, resolverStyle, resolverFields, c, z);
}
}

//-----------------------------------------------------------------------
@@ -47,6 +47,7 @@
import java.time.temporal.WeekFields;
import java.util.Locale;
import java.util.TimeZone;
import java.util.stream.Stream;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
@@ -825,15 +826,26 @@ Object[][] getDisplayName() {
public void test_localizedBy(Locale locale, Chronology chrono, ZoneId zone,
Chronology chronoExpected, ZoneId zoneExpected,
String formatExpected) {
DateTimeFormatter dtf =
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
.withChronology(chrono).withZone(zone).localizedBy(locale);
assertEquals(dtf.getChronology(), chronoExpected);
assertEquals(dtf.getZone(), zoneExpected);
String formatted = dtf.format(ZDT);
assertEquals(formatted, formatExpected);
assertEquals(dtf.parse(formatted, ZonedDateTime::from),
zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
// try this test both with the implicit default locale, and explicit default locale ja-JP
Locale def = Locale.getDefault();
try {
Stream.of(def, Locale.JAPAN).forEach(l -> {
System.out.println(" Testing with the default locale: " + l);
Locale.setDefault(l);

DateTimeFormatter dtf =
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.FULL)
.withChronology(chrono).withZone(zone).localizedBy(locale);
assertEquals(dtf.getChronology(), chronoExpected);
assertEquals(dtf.getZone(), zoneExpected);
String formatted = dtf.format(ZDT);
assertEquals(formatted, formatExpected);
assertEquals(dtf.parse(formatted, ZonedDateTime::from),
zoneExpected != null ? ZDT.withZoneSameInstant(zoneExpected) : ZDT);
});
} finally {
Locale.setDefault(def);
}
}

@Test(dataProvider="withLocale")

0 comments on commit 27e1686

Please sign in to comment.