8054214: JapaneseEra.getDisplayName doesn't return names if it's an additional era
Reviewed-by: rriggs, naoto
--- a/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java Wed Dec 14 19:23:08 2016 -0800
+++ b/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java Thu Dec 15 13:08:01 2016 +0900
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -73,11 +73,13 @@
import java.io.Serializable;
import java.time.DateTimeException;
import java.time.LocalDate;
+import java.time.format.TextStyle;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;
import java.time.temporal.UnsupportedTemporalTypeException;
import java.time.temporal.ValueRange;
import java.util.Arrays;
+import java.util.Locale;
import java.util.Objects;
import sun.util.calendar.CalendarDate;
@@ -125,8 +127,8 @@
*/
public static final JapaneseEra HEISEI = new JapaneseEra(2, LocalDate.of(1989, 1, 8));
- // the number of defined JapaneseEra constants.
- // There could be an extra era defined in its configuration.
+ // The number of predefined JapaneseEra constants.
+ // There may be a supplemental era defined by the property.
private static final int N_ERA_CONSTANTS = HEISEI.getValue() + ERA_OFFSET;
/**
@@ -237,6 +239,32 @@
return Arrays.copyOf(KNOWN_ERAS, KNOWN_ERAS.length);
}
+ /**
+ * Gets the textual representation of this era.
+ * <p>
+ * This returns the textual name used to identify the era,
+ * suitable for presentation to the user.
+ * The parameters control the style of the returned text and the locale.
+ * <p>
+ * If no textual mapping is found then the {@link #getValue() numeric value}
+ * is returned.
+ *
+ * @param style the style of the text required, not null
+ * @param locale the locale to use, not null
+ * @return the text value of the era, not null
+ * @since 9
+ */
+ @Override
+ public String getDisplayName(TextStyle style, Locale locale) {
+ // If this JapaneseEra is a supplemental one, obtain the name from
+ // the era definition.
+ if (getValue() > N_ERA_CONSTANTS - ERA_OFFSET) {
+ Objects.requireNonNull(locale, "locale");
+ return style.asNormal() == TextStyle.NARROW ? getAbbreviation() : getName();
+ }
+ return Era.super.getDisplayName(style, locale);
+ }
+
//-----------------------------------------------------------------------
/**
* Obtains an instance of {@code JapaneseEra} from a date.
@@ -338,11 +366,7 @@
//-----------------------------------------------------------------------
String getAbbreviation() {
- int index = ordinal(getValue());
- if (index == 0) {
- return "";
- }
- return ERA_CONFIG[index].getAbbreviation();
+ return ERA_CONFIG[ordinal(getValue())].getAbbreviation();
}
String getName() {
--- a/jdk/test/java/util/Calendar/SupplementalJapaneseEraTest.java Wed Dec 14 19:23:08 2016 -0800
+++ b/jdk/test/java/util/Calendar/SupplementalJapaneseEraTest.java Thu Dec 15 13:08:01 2016 +0900
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
import java.text.SimpleDateFormat;
import java.time.chrono.JapaneseDate;
+import java.time.chrono.JapaneseEra;
+import java.time.format.TextStyle;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
@@ -140,6 +142,27 @@
System.err.printf("JapaneseDate: got=\"%s\", expected=\"%s\"%n", got, expected);
errors++;
}
+ JapaneseEra jera = jdate.getEra();
+ got = jera.getDisplayName(TextStyle.FULL, Locale.US);
+ if (!NEW_ERA_NAME.equals(got)) {
+ System.err.printf("JapaneseEra (FULL): got=\"%s\", expected=\"%s\"%n", got, NEW_ERA_NAME);
+ errors++;
+ }
+ got = jera.getDisplayName(TextStyle.SHORT, Locale.US);
+ if (!NEW_ERA_NAME.equals(got)) {
+ System.err.printf("JapaneseEra (SHORT): got=\"%s\", expected=\"%s\"%n", got, NEW_ERA_NAME);
+ errors++;
+ }
+ got = jera.getDisplayName(TextStyle.NARROW, Locale.US);
+ if (!NEW_ERA_ABBR.equals(got)) {
+ System.err.printf("JapaneseEra (NARROW): got=\"%s\", expected=\"%s\"%n", got, NEW_ERA_ABBR);
+ errors++;
+ }
+ got = jera.getDisplayName(TextStyle.NARROW_STANDALONE, Locale.US);
+ if (!NEW_ERA_ABBR.equals(got)) {
+ System.err.printf("JapaneseEra (NARROW_STANDALONE): got=\"%s\", expected=\"%s\"%n", got, NEW_ERA_ABBR);
+ errors++;
+ }
}
private static void testValidation(String eraName) {
--- a/jdk/test/java/util/Calendar/SupplementalJapaneseEraTest.sh Wed Dec 14 19:23:08 2016 -0800
+++ b/jdk/test/java/util/Calendar/SupplementalJapaneseEraTest.sh Thu Dec 15 13:08:01 2016 +0900
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
#
# @test
-# @bug 8048123
+# @bug 8048123 8054214
# @summary Test for jdk.calendar.japanese.supplemental.era support
# @build SupplementalJapaneseEraTest
# @run shell SupplementalJapaneseEraTest.sh