mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-07 14:40:22 +00:00
8159548: Formatter returns unexpected strings if locale is null
Reviewed-by: sherman
This commit is contained in:
parent
e0c6d91241
commit
e18eaa2e9b
@ -3895,8 +3895,7 @@ public final class Formatter implements Closeable, Flushable {
|
||||
TimeZone tz = t.getTimeZone();
|
||||
sb.append(tz.getDisplayName((t.get(Calendar.DST_OFFSET) != 0),
|
||||
TimeZone.SHORT,
|
||||
Objects.requireNonNullElse(l,
|
||||
Locale.getDefault(Locale.Category.FORMAT))));
|
||||
Objects.requireNonNullElse(l, Locale.US)));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -3904,8 +3903,7 @@ public final class Formatter implements Closeable, Flushable {
|
||||
case DateTime.NAME_OF_DAY_ABBREV: // 'a'
|
||||
case DateTime.NAME_OF_DAY: { // 'A'
|
||||
int i = t.get(Calendar.DAY_OF_WEEK);
|
||||
Locale lt = Objects.requireNonNullElse(l,
|
||||
Locale.getDefault(Locale.Category.FORMAT));
|
||||
Locale lt = Objects.requireNonNullElse(l, Locale.US);
|
||||
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
|
||||
if (c == DateTime.NAME_OF_DAY)
|
||||
sb.append(dfs.getWeekdays()[i]);
|
||||
@ -3917,8 +3915,7 @@ public final class Formatter implements Closeable, Flushable {
|
||||
case DateTime.NAME_OF_MONTH_ABBREV_X: // 'h' -- same b
|
||||
case DateTime.NAME_OF_MONTH: { // 'B'
|
||||
int i = t.get(Calendar.MONTH);
|
||||
Locale lt = Objects.requireNonNullElse(l,
|
||||
Locale.getDefault(Locale.Category.FORMAT));
|
||||
Locale lt = Objects.requireNonNullElse(l, Locale.US);
|
||||
DateFormatSymbols dfs = DateFormatSymbols.getInstance(lt);
|
||||
if (c == DateTime.NAME_OF_MONTH)
|
||||
sb.append(dfs.getMonths()[i]);
|
||||
|
||||
@ -23,17 +23,22 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8146156
|
||||
* @bug 8146156 8159548
|
||||
* @summary test whether uppercasing follows Locale.Category.FORMAT locale.
|
||||
* @run main/othervm FormatLocale
|
||||
*/
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.Month;
|
||||
import java.util.Calendar;
|
||||
import java.util.Formatter;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Locale.Category;
|
||||
import java.util.TimeZone;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class FormatLocale {
|
||||
@ -61,7 +66,7 @@ public class FormatLocale {
|
||||
"N\u0130SAN",
|
||||
"1,00000E+08");
|
||||
|
||||
public static void main(String [] args) {
|
||||
static void formatLocaleTest() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
IntStream.range(0, src.size()).forEach(i -> {
|
||||
@ -79,4 +84,44 @@ public class FormatLocale {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static void nullLocaleTest() {
|
||||
String fmt = "%1$ta %1$tA %1$th %1$tB %1tZ";
|
||||
String expected = "Fri Friday Jan January PST";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Locale orig = Locale.getDefault();
|
||||
|
||||
try {
|
||||
Locale.setDefault(Locale.JAPAN);
|
||||
Formatter f = new Formatter(sb, (Locale)null);
|
||||
ZoneId zid = ZoneId.of("America/Los_Angeles");
|
||||
Calendar c = new GregorianCalendar(TimeZone.getTimeZone(zid), Locale.US);
|
||||
c.set(2016, 0, 1, 0, 0, 0);
|
||||
f.format(fmt, c);
|
||||
if (!sb.toString().equals(expected)) {
|
||||
throw new RuntimeException(
|
||||
"Localized text returned with null locale.\n" +
|
||||
" expected: " + expected + "\n" +
|
||||
" returned: " + sb.toString());
|
||||
}
|
||||
|
||||
sb.setLength(0);
|
||||
ZonedDateTime zdt = ZonedDateTime.of(2016, 1, 1, 0, 0, 0, 0, zid);
|
||||
f.format(fmt, zdt);
|
||||
|
||||
if (!sb.toString().equals(expected)) {
|
||||
throw new RuntimeException(
|
||||
"Localized text returned with null locale.\n" +
|
||||
" expected: " + expected + "\n" +
|
||||
" returned: " + sb.toString());
|
||||
}
|
||||
} finally {
|
||||
Locale.setDefault(orig);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String [] args) {
|
||||
formatLocaleTest();
|
||||
nullLocaleTest();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user