mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8278434: timeouts in test java/time/test/java/time/format/TestZoneTextPrinterParser.java
Reviewed-by: joehw
This commit is contained in:
parent
6b906bbab1
commit
8dc4437d00
3 changed files with 66 additions and 14 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -151,8 +151,8 @@ public class CLDRTimeZoneNameProviderImpl extends TimeZoneNameProviderImpl {
|
||||||
|
|
||||||
// Check parent locales first
|
// Check parent locales first
|
||||||
if (!exists(names, index)) {
|
if (!exists(names, index)) {
|
||||||
CLDRLocaleProviderAdapter clpa = (CLDRLocaleProviderAdapter)LocaleProviderAdapter.forType(Type.CLDR);
|
var cands = ((CLDRLocaleProviderAdapter)LocaleProviderAdapter.forType(Type.CLDR))
|
||||||
var cands = clpa.getCandidateLocales("", locale);
|
.getCandidateLocales("", locale);
|
||||||
for (int i = 1; i < cands.size() ; i++) {
|
for (int i = 1; i < cands.size() ; i++) {
|
||||||
String[] parentNames = super.getDisplayNameArray(id, cands.get(i));
|
String[] parentNames = super.getDisplayNameArray(id, cands.get(i));
|
||||||
if (parentNames != null && !parentNames[index].isEmpty()) {
|
if (parentNames != null && !parentNames[index].isEmpty()) {
|
||||||
|
@ -162,11 +162,6 @@ public class CLDRTimeZoneNameProviderImpl extends TimeZoneNameProviderImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Region Fallback
|
|
||||||
if (regionFormatFallback(names, index, locale)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Type Fallback
|
// Type Fallback
|
||||||
if (noDST && typeFallback(names, index)) {
|
if (noDST && typeFallback(names, index)) {
|
||||||
return;
|
return;
|
||||||
|
@ -185,6 +180,11 @@ public class CLDRTimeZoneNameProviderImpl extends TimeZoneNameProviderImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Region Fallback
|
||||||
|
if (regionFormatFallback(names, index, locale)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// last resort
|
// last resort
|
||||||
names[index] = toGMTFormat(id,
|
names[index] = toGMTFormat(id,
|
||||||
index == INDEX_DST_LONG || index == INDEX_DST_SHORT,
|
index == INDEX_DST_LONG || index == INDEX_DST_SHORT,
|
||||||
|
@ -230,6 +230,11 @@ public class CLDRTimeZoneNameProviderImpl extends TimeZoneNameProviderImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean regionFormatFallback(String[] names, int index, Locale l) {
|
private boolean regionFormatFallback(String[] names, int index, Locale l) {
|
||||||
|
if (index % 2 == 0) {
|
||||||
|
// ignore short names
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
String id = names[INDEX_TZID];
|
String id = names[INDEX_TZID];
|
||||||
LocaleResources lr = LocaleProviderAdapter.forType(Type.CLDR).getLocaleResources(l);
|
LocaleResources lr = LocaleProviderAdapter.forType(Type.CLDR).getLocaleResources(l);
|
||||||
ResourceBundle fd = lr.getJavaTimeFormatData();
|
ResourceBundle fd = lr.getJavaTimeFormatData();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -51,7 +51,7 @@ import org.testng.annotations.Test;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8081022 8151876 8166875 8177819 8189784 8206980 8277049
|
* @bug 8081022 8151876 8166875 8177819 8189784 8206980 8277049 8278434
|
||||||
* @key randomness
|
* @key randomness
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -61,6 +61,11 @@ import org.testng.annotations.Test;
|
||||||
@Test
|
@Test
|
||||||
public class TestZoneTextPrinterParser extends AbstractTestPrinterParser {
|
public class TestZoneTextPrinterParser extends AbstractTestPrinterParser {
|
||||||
|
|
||||||
|
private static final Locale[] SAMPLE_LOCALES = {
|
||||||
|
Locale.US, Locale.UK, Locale.FRANCE, Locale.GERMANY, Locale.ITALY, Locale.forLanguageTag("es"),
|
||||||
|
Locale.forLanguageTag("pt-BR"), Locale.forLanguageTag("ru"),
|
||||||
|
Locale.CHINA, Locale.TAIWAN, Locale.JAPAN, Locale.KOREA, Locale.ROOT};
|
||||||
|
|
||||||
protected static DateTimeFormatter getFormatter(Locale locale, TextStyle style) {
|
protected static DateTimeFormatter getFormatter(Locale locale, TextStyle style) {
|
||||||
return new DateTimeFormatterBuilder().appendZoneText(style)
|
return new DateTimeFormatterBuilder().appendZoneText(style)
|
||||||
.toFormatter(locale)
|
.toFormatter(locale)
|
||||||
|
@ -70,7 +75,6 @@ public class TestZoneTextPrinterParser extends AbstractTestPrinterParser {
|
||||||
public void test_printText() {
|
public void test_printText() {
|
||||||
Random r = RandomFactory.getRandom();
|
Random r = RandomFactory.getRandom();
|
||||||
int N = 8;
|
int N = 8;
|
||||||
Locale[] locales = Locale.getAvailableLocales();
|
|
||||||
Set<String> zids = ZoneRulesProvider.getAvailableZoneIds();
|
Set<String> zids = ZoneRulesProvider.getAvailableZoneIds();
|
||||||
ZonedDateTime zdt = ZonedDateTime.now();
|
ZonedDateTime zdt = ZonedDateTime.now();
|
||||||
|
|
||||||
|
@ -85,7 +89,7 @@ public class TestZoneTextPrinterParser extends AbstractTestPrinterParser {
|
||||||
zdt = zdt.withZoneSameLocal(ZoneId.of(zid));
|
zdt = zdt.withZoneSameLocal(ZoneId.of(zid));
|
||||||
TimeZone tz = TimeZone.getTimeZone(zid);
|
TimeZone tz = TimeZone.getTimeZone(zid);
|
||||||
boolean isDST = tz.inDaylightTime(new Date(zdt.toInstant().toEpochMilli()));
|
boolean isDST = tz.inDaylightTime(new Date(zdt.toInstant().toEpochMilli()));
|
||||||
for (Locale locale : locales) {
|
for (Locale locale : SAMPLE_LOCALES) {
|
||||||
String longDisplayName = tz.getDisplayName(isDST, TimeZone.LONG, locale);
|
String longDisplayName = tz.getDisplayName(isDST, TimeZone.LONG, locale);
|
||||||
String shortDisplayName = tz.getDisplayName(isDST, TimeZone.SHORT, locale);
|
String shortDisplayName = tz.getDisplayName(isDST, TimeZone.SHORT, locale);
|
||||||
if ((longDisplayName.startsWith("GMT+") && shortDisplayName.startsWith("GMT+"))
|
if ((longDisplayName.startsWith("GMT+") && shortDisplayName.startsWith("GMT+"))
|
||||||
|
@ -118,9 +122,8 @@ public class TestZoneTextPrinterParser extends AbstractTestPrinterParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test_ParseText() {
|
public void test_ParseText() {
|
||||||
Locale[] locales = new Locale[] { Locale.ENGLISH, Locale.JAPANESE, Locale.FRENCH };
|
|
||||||
Set<String> zids = ZoneRulesProvider.getAvailableZoneIds();
|
Set<String> zids = ZoneRulesProvider.getAvailableZoneIds();
|
||||||
for (Locale locale : locales) {
|
for (Locale locale : SAMPLE_LOCALES) {
|
||||||
parseText(zids, locale, TextStyle.FULL, false);
|
parseText(zids, locale, TextStyle.FULL, false);
|
||||||
parseText(zids, locale, TextStyle.FULL, true);
|
parseText(zids, locale, TextStyle.FULL, true);
|
||||||
parseText(zids, locale, TextStyle.SHORT, false);
|
parseText(zids, locale, TextStyle.SHORT, false);
|
||||||
|
|
44
test/micro/org/openjdk/bench/java/text/ZoneStrings.java
Normal file
44
test/micro/org/openjdk/bench/java/text/ZoneStrings.java
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022, 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.
|
||||||
|
*/
|
||||||
|
package org.openjdk.bench.java.text;
|
||||||
|
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode;
|
||||||
|
import org.openjdk.jmh.annotations.Mode;
|
||||||
|
import org.openjdk.jmh.annotations.Scope;
|
||||||
|
import org.openjdk.jmh.annotations.State;
|
||||||
|
|
||||||
|
import java.text.DateFormatSymbols;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@BenchmarkMode(Mode.SingleShotTime)
|
||||||
|
@State(Scope.Thread)
|
||||||
|
public class ZoneStrings {
|
||||||
|
|
||||||
|
@Benchmark
|
||||||
|
public void testZoneStrings() {
|
||||||
|
for (Locale l : Locale.getAvailableLocales()) {
|
||||||
|
new DateFormatSymbols(l).getZoneStrings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue