diff --git a/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java b/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java index 0c9e3e81e1d..f289fdb1a93 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/JapaneseEra.java @@ -195,10 +195,11 @@ public final class JapaneseEra * @throws DateTimeException if the value is invalid */ public static JapaneseEra of(int japaneseEra) { - if (japaneseEra < MEIJI.eraValue || japaneseEra + ERA_OFFSET > KNOWN_ERAS.length) { + int i = ordinal(japaneseEra); + if (i < 0 || i >= KNOWN_ERAS.length) { throw new DateTimeException("Invalid era: " + japaneseEra); } - return KNOWN_ERAS[ordinal(japaneseEra)]; + return KNOWN_ERAS[i]; } /** diff --git a/jdk/test/java/time/tck/java/time/chrono/TCKJapaneseEra.java b/jdk/test/java/time/tck/java/time/chrono/TCKJapaneseEra.java index de83e1d3bc3..8e2d341aaa5 100644 --- a/jdk/test/java/time/tck/java/time/chrono/TCKJapaneseEra.java +++ b/jdk/test/java/time/tck/java/time/chrono/TCKJapaneseEra.java @@ -59,6 +59,7 @@ package tck.java.time.chrono; import static java.time.temporal.ChronoField.ERA; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; import java.time.chrono.Era; import java.time.chrono.JapaneseChronology; @@ -69,7 +70,8 @@ import org.testng.annotations.DataProvider; import org.testng.annotations.Test; /** - * Test. + * Tests for JapaneseEra + * @bug 8068278 */ @Test public class TCKJapaneseEra { @@ -84,6 +86,20 @@ public class TCKJapaneseEra { }; } + @DataProvider(name = "InvalidJapaneseEras") + Object[][] data_of_invalid_eras() { + return new Object[][] { + {-2}, + {-3}, + {3}, + {Integer.MIN_VALUE}, + {Integer.MAX_VALUE}, + }; + } + + //----------------------------------------------------------------------- + // JapaneseEra value test + //----------------------------------------------------------------------- @Test(dataProvider="JapaneseEras") public void test_valueOf(JapaneseEra era , String eraName, int eraValue) { assertEquals(era.getValue(), eraValue); @@ -118,4 +134,11 @@ public class TCKJapaneseEra { } } + //----------------------------------------------------------------------- + // JapaneseChronology.INSTANCE.eraOf invalid era test + //----------------------------------------------------------------------- + @Test(dataProvider="InvalidJapaneseEras", expectedExceptions=java.time.DateTimeException.class) + public void test_outofrange(int era) { + JapaneseChronology.INSTANCE.eraOf(era); + } }