blob: 8efed7d2243880e7fbc52498d5127d80534f45d7 [file] [log] [blame]
/*
* 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");
}
}
}