8224105: Cannot parse JapaneseDate string on some specified locales
Reviewed-by: bchristi
This commit is contained in:
parent
94619467c8
commit
8f1d837e99
@ -257,11 +257,13 @@ public class CalendarNameProviderImpl extends CalendarNameProvider implements Av
|
|||||||
return langtags;
|
return langtags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if each string is unique, except null or empty strings,
|
||||||
|
// as these strings are used for keys in the name-to-value map.
|
||||||
private boolean hasDuplicates(String[] strings) {
|
private boolean hasDuplicates(String[] strings) {
|
||||||
int len = strings.length;
|
int len = strings.length;
|
||||||
for (int i = 0; i < len - 1; i++) {
|
for (int i = 0; i < len - 1; i++) {
|
||||||
String a = strings[i];
|
String a = strings[i];
|
||||||
if (a != null) {
|
if (a != null && !a.isEmpty()) {
|
||||||
for (int j = i + 1; j < len; j++) {
|
for (int j = i + 1; j < len; j++) {
|
||||||
if (a.equals(strings[j])) {
|
if (a.equals(strings[j])) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -28,7 +28,9 @@ package test.java.time.chrono;
|
|||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.time.chrono.*;
|
import java.time.chrono.*;
|
||||||
import java.time.format.*;
|
import java.time.format.*;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
@ -39,13 +41,18 @@ import static org.testng.Assert.assertEquals;
|
|||||||
* chrono implementation.
|
* chrono implementation.
|
||||||
* Note: The exact result may depend on locale data provider's implementation.
|
* Note: The exact result may depend on locale data provider's implementation.
|
||||||
*
|
*
|
||||||
* @bug 8171049
|
* @bug 8171049 8224105
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public class TestEraDisplayName {
|
public class TestEraDisplayName {
|
||||||
private static final Locale THAI = Locale.forLanguageTag("th-TH");
|
private static final Locale THAI = Locale.forLanguageTag("th-TH");
|
||||||
private static final Locale EGYPT = Locale.forLanguageTag("ar-EG");
|
private static final Locale EGYPT = Locale.forLanguageTag("ar-EG");
|
||||||
|
|
||||||
|
private static final LocalDate REIWA_1ST = LocalDate.of(2019, 5, 1);
|
||||||
|
private static final DateTimeFormatter JAPANESE_FORMATTER =
|
||||||
|
DateTimeFormatter.ofPattern("yyyy MM dd GGGG G GGGGG")
|
||||||
|
.withChronology(JapaneseChronology.INSTANCE);
|
||||||
|
|
||||||
@DataProvider(name="eraDisplayName")
|
@DataProvider(name="eraDisplayName")
|
||||||
Object[][] eraDisplayName() {
|
Object[][] eraDisplayName() {
|
||||||
return new Object[][] {
|
return new Object[][] {
|
||||||
@ -135,8 +142,22 @@ public class TestEraDisplayName {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DataProvider
|
||||||
|
Object[][] allLocales() {
|
||||||
|
return Arrays.stream(Locale.getAvailableLocales())
|
||||||
|
.map(Stream::of)
|
||||||
|
.map(Stream::toArray)
|
||||||
|
.toArray(Object[][]::new);
|
||||||
|
}
|
||||||
|
|
||||||
@Test(dataProvider="eraDisplayName")
|
@Test(dataProvider="eraDisplayName")
|
||||||
public void test_eraDisplayName(Era era, TextStyle style, Locale locale, String expected) {
|
public void test_eraDisplayName(Era era, TextStyle style, Locale locale, String expected) {
|
||||||
assertEquals(era.getDisplayName(style, locale), expected);
|
assertEquals(era.getDisplayName(style, locale), expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(dataProvider="allLocales")
|
||||||
|
public void test_reiwaNames(Locale locale) throws DateTimeParseException {
|
||||||
|
DateTimeFormatter f = JAPANESE_FORMATTER.withLocale(locale);
|
||||||
|
assertEquals(LocalDate.parse(REIWA_1ST.format(f), f), REIWA_1ST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user