ce8ebebc77
Reviewed-by: rriggs, joehw, lancea, erikj, iris, ihse
177 lines
7.1 KiB
Java
177 lines
7.1 KiB
Java
/*
|
|
* Copyright (c) 2012, 2023, 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 8005471 8008577 8129881 8130845 8136518 8181157 8210490 8220037
|
|
* 8234347 8236548 8317979
|
|
* @modules jdk.localedata
|
|
* @run main/othervm -Djava.locale.providers=CLDR CLDRDisplayNamesTest
|
|
* @summary Make sure that localized time zone names of CLDR are used
|
|
* if specified.
|
|
*/
|
|
|
|
import java.text.*;
|
|
import java.util.*;
|
|
import static java.util.TimeZone.*;
|
|
|
|
public class CLDRDisplayNamesTest {
|
|
/*
|
|
* The first element is a language tag. The rest are localized
|
|
* display names of America/Los_Angeles copied from the CLDR
|
|
* resources data. If data change in CLDR, test data below will
|
|
* need to be changed accordingly.
|
|
*
|
|
* Generic names are NOT tested (until they are supported by API).
|
|
*/
|
|
static final String[][] CLDR_DATA = {
|
|
{
|
|
"ja-JP",
|
|
"\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u6a19\u6e96\u6642",
|
|
"PST",
|
|
"\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u590f\u6642\u9593",
|
|
"PDT",
|
|
//"\u30a2\u30e1\u30ea\u30ab\u592a\u5e73\u6d0b\u6642\u9593",
|
|
//"PT"
|
|
},
|
|
{
|
|
"zh-CN",
|
|
"\u5317\u7f8e\u592a\u5e73\u6d0b\u6807\u51c6\u65f6\u95f4",
|
|
"PST",
|
|
"\u5317\u7f8e\u592a\u5e73\u6d0b\u590f\u4ee4\u65f6\u95f4",
|
|
"PDT",
|
|
//"\u5317\u7f8e\u592a\u5e73\u6d0b\u65f6\u95f4",
|
|
//"PT",
|
|
},
|
|
{
|
|
"de-DE",
|
|
"Nordamerikanische Westk\u00fcsten-Normalzeit",
|
|
"PST",
|
|
"Nordamerikanische Westk\u00fcsten-Sommerzeit",
|
|
"PDT",
|
|
//"Nordamerikanische Westk\u00fcstenzeit",
|
|
//"PT",
|
|
},
|
|
};
|
|
|
|
private static final String NO_INHERITANCE_MARKER = "\u2205\u2205\u2205";
|
|
|
|
public static void main(String[] args) {
|
|
// Make sure that localized time zone names of CLDR are used
|
|
// if specified.
|
|
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
|
|
int errors = 0;
|
|
for (String[] data : CLDR_DATA) {
|
|
Locale locale = Locale.forLanguageTag(data[0]);
|
|
for (int i = 1; i < data.length; i++) {
|
|
int style = ((i % 2) == 1) ? LONG : SHORT;
|
|
boolean daylight = (i == 3 || i == 4);
|
|
String name = tz.getDisplayName(daylight, style, locale);
|
|
if (!data[i].equals(name)) {
|
|
System.err.printf("error: got '%s' expected '%s' (style=%d, daylight=%s, locale=%s)%n",
|
|
name, data[i], style, daylight, locale);
|
|
errors++;
|
|
}
|
|
}
|
|
}
|
|
|
|
// for 8129881
|
|
/* 8234347: CLDR Converter will not pre-fill short display names from COMPAT anymore.
|
|
tz = TimeZone.getTimeZone("Europe/Vienna");
|
|
String name = tz.getDisplayName(false, SHORT, Locale.ENGLISH);
|
|
if (!"CET".equals(name)) {
|
|
System.err.printf("error: got '%s' expected 'CET' %n", name);
|
|
errors++;
|
|
}
|
|
*/
|
|
|
|
// for 8130845
|
|
SimpleDateFormat fmtROOT = new SimpleDateFormat("EEE MMM d hh:mm:ss z yyyy", Locale.ROOT);
|
|
SimpleDateFormat fmtUS = new SimpleDateFormat("EEE MMM d hh:mm:ss z yyyy", Locale.US);
|
|
SimpleDateFormat fmtUK = new SimpleDateFormat("EEE MMM d hh:mm:ss z yyyy", Locale.UK);
|
|
Locale originalLocale = Locale.getDefault();
|
|
try {
|
|
Locale.setDefault(Locale.ROOT);
|
|
fmtROOT.parse("Thu Nov 13 04:35:51 GMT-09:00 2008");
|
|
fmtUS.parse("Thu Nov 13 04:35:51 AKST 2008");
|
|
fmtUK.parse("Thu Nov 13 04:35:51 GMT-09:00 2008");
|
|
} catch (ParseException pe) {
|
|
System.err.println(pe);
|
|
errors++;
|
|
} finally {
|
|
Locale.setDefault(originalLocale);
|
|
}
|
|
|
|
// for 8210490
|
|
// Check that TimeZone.getDisplayName should honor passed locale parameter,
|
|
// even if default locale is set to some other locale.
|
|
Locale.setDefault(Locale.forLanguageTag("ar-PK"));
|
|
TimeZone zi = TimeZone.getTimeZone("Etc/GMT-5");
|
|
String displayName = zi.getDisplayName(false, TimeZone.SHORT, Locale.US);
|
|
Locale.setDefault(originalLocale);
|
|
if (!displayName.equals("GMT+05:00")) {
|
|
System.err.printf("Wrong display name for timezone Etc/GMT-5 : expected GMT+05:00, Actual " + displayName);
|
|
errors++;
|
|
}
|
|
|
|
// 8217366: No "no inheritance marker" should be left in the returned array
|
|
// from DateFormatSymbols.getZoneStrings()
|
|
errors += List.of(Locale.ROOT,
|
|
Locale.CHINA,
|
|
Locale.GERMANY,
|
|
Locale.JAPAN,
|
|
Locale.UK,
|
|
Locale.US,
|
|
Locale.forLanguageTag("hi-IN"),
|
|
Locale.forLanguageTag("es-419")).stream()
|
|
.peek(System.out::println)
|
|
.map(l -> DateFormatSymbols.getInstance(l).getZoneStrings())
|
|
.flatMap(zoneStrings -> Arrays.stream(zoneStrings))
|
|
.filter(namesArray -> Arrays.stream(namesArray)
|
|
.anyMatch(aName -> aName.equals(NO_INHERITANCE_MARKER)))
|
|
.peek(marker -> {
|
|
System.err.println("No-inheritance-marker is detected with tzid: "
|
|
+ marker[0]);
|
|
})
|
|
.count();
|
|
|
|
// 8220037: Make sure CLDRConverter uniquely produces bundles, regardless of the
|
|
// source file enumeration order.
|
|
/* 8234347: CLDR Converter will not pre-fill short display names from COMPAT anymore.
|
|
tz = TimeZone.getTimeZone("America/Argentina/La_Rioja");
|
|
if (!"ARST".equals(tz.getDisplayName(true, TimeZone.SHORT,
|
|
new Locale.Builder()
|
|
.setLanguage("en")
|
|
.setRegion("CA")
|
|
.build()))) {
|
|
System.err.println("Short display name of \"" + tz.getID() + "\" was not \"ARST\"");
|
|
errors++;
|
|
}
|
|
*/
|
|
|
|
if (errors > 0) {
|
|
throw new RuntimeException("test failed");
|
|
}
|
|
}
|
|
}
|