aboutsummaryrefslogtreecommitdiff
path: root/test/java/util/Calendar/JapanEraNameCompatTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/java/util/Calendar/JapanEraNameCompatTest.java')
-rw-r--r--test/java/util/Calendar/JapanEraNameCompatTest.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/test/java/util/Calendar/JapanEraNameCompatTest.java b/test/java/util/Calendar/JapanEraNameCompatTest.java
new file mode 100644
index 0000000000..8efed7d224
--- /dev/null
+++ b/test/java/util/Calendar/JapanEraNameCompatTest.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2019, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8218781
+ * @summary Test the localized names of Japanese era Reiwa from COMPAT provider.
+ * @modules jdk.localedata
+ * @run testng/othervm -Djava.locale.providers=COMPAT JapanEraNameCompatTest
+ */
+
+import static java.util.Calendar.*;
+import static java.util.Locale.*;
+
+import java.time.LocalDate;
+import java.time.chrono.JapaneseChronology;
+import java.time.chrono.JapaneseEra;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.time.format.TextStyle;
+import java.util.Calendar;
+import java.util.Locale;
+
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+@Test
+public class JapanEraNameCompatTest {
+ static final Calendar c = new Calendar.Builder()
+ .setCalendarType("japanese")
+ .setFields(ERA, 5, YEAR, 1, MONTH, MAY, DAY_OF_MONTH, 1)
+ .build();
+ static final String EngName = "Reiwa";
+ static final String CJName = "\u4ee4\u548c";
+ static final String KoreanName = "\ub808\uc774\uc640";
+ static final String ArabicName = "\u0631\u064a\u0648\u0627";
+ static final String ThaiName = "\u0e40\u0e23\u0e27\u0e30";
+ static final String HindiName = "\u0930\u0947\u0907\u0935\u093e";
+ static final String RussianName = "\u0420\u044d\u0439\u0432\u0430";
+ static final String SerbianName = "\u0420\u0435\u0438\u0432\u0430";
+ static final String SerbLatinName = "Reiva";
+
+ @DataProvider(name="UtilCalendar")
+ Object[][] dataUtilCalendar() {
+ return new Object[][] {
+ //locale, long, short
+ { JAPAN, CJName, "R" },
+ { KOREAN, KoreanName, "R" },
+ { CHINA, CJName, "R" },
+ { TAIWAN, CJName, "R" }, // fallback to zh
+ { new Locale("ar"), ArabicName, ArabicName },
+ { new Locale("th"), ThaiName, "R" },
+ // hi_IN fallback to root
+ { new Locale("hi", "IN"), EngName, "R" }
+ };
+ }
+
+ @Test(dataProvider="UtilCalendar")
+ public void testCalendarEraDisplayName(Locale locale,
+ String longName, String shortName) {
+ assertEquals(c.getDisplayName(ERA, LONG, locale), longName);
+ assertEquals(c.getDisplayName(ERA, SHORT, locale), shortName);
+ }
+
+ @DataProvider(name="JavaTime")
+ Object[][] dataJavaTime() {
+ return new Object[][] {
+ // locale, full, short
+ { JAPAN, CJName, CJName },
+ { KOREAN, KoreanName, KoreanName },
+ { CHINA, CJName, CJName },
+ { TAIWAN, CJName, CJName },
+ { new Locale("ar"), ArabicName, ArabicName },
+ { new Locale("th"), ThaiName, ThaiName },
+ { new Locale("hi", "IN"), HindiName, HindiName },
+ { new Locale("ru"), RussianName, RussianName },
+ { new Locale("sr"), SerbianName, SerbianName },
+ { Locale.forLanguageTag("sr-Latn"), SerbLatinName, SerbLatinName },
+ { new Locale("hr"), EngName, EngName },
+ { new Locale("in"), EngName, EngName },
+ { new Locale("lt"), EngName, EngName },
+ { new Locale("nl"), EngName, EngName },
+ { new Locale("no"), EngName, "R" },
+ { new Locale("sv"), EngName, EngName },
+ // el fallback to root
+ { new Locale("el"), EngName, EngName }
+ };
+ }
+
+ @Test(dataProvider="JavaTime")
+ public void testChronoJapanEraDisplayName(Locale locale,
+ String fullName, String shortName) {
+
+ JapaneseEra era = JapaneseEra.valueOf("Reiwa");
+ assertEquals(era.getDisplayName(TextStyle.FULL, locale), fullName);
+ assertEquals(era.getDisplayName(TextStyle.SHORT, locale), shortName);
+ assertEquals(era.getDisplayName(TextStyle.NARROW, locale), "R");
+ }
+
+ @Test
+ public void testFormatParseEraName() {
+ LocalDate date = LocalDate.of(2019, 5, 1);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd GGGG");
+ formatter = formatter.withChronology(JapaneseChronology.INSTANCE);
+
+ int num = 0;
+ for (Locale locale : Calendar.getAvailableLocales()) {
+ formatter = formatter.withLocale(locale);
+ try {
+ LocalDate.parse(date.format(formatter), formatter);
+ } catch (DateTimeParseException e) {
+ // If an array is defined for Japanese eras in java.time resource,
+ // but an era entry is missing, format fallback to English name
+ // while parse throw DateTimeParseException.
+ num++;
+ System.out.println("Missing java.time resource data for locale: " + locale);
+ }
+ }
+ if (num > 0) {
+ throw new RuntimeException("Missing java.time data for " + num + " locales");
+ }
+ }
+}