8223773: DateTimeFormatter Fails to throw an Exception on Invalid CLOCK_HOUR_OF_AMPM and HOUR_OF_AMPM
Reviewed-by: lancea, scolebourne, rriggs
This commit is contained in:
parent
1cdcf154e0
commit
8dfd33c2b4
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2019, 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
|
||||||
@ -399,7 +399,7 @@ final class Parsed implements TemporalAccessor {
|
|||||||
updateCheckConflict(AMPM_OF_DAY, HOUR_OF_DAY, Math.addExact(Math.multiplyExact(ap, 12), hap));
|
updateCheckConflict(AMPM_OF_DAY, HOUR_OF_DAY, Math.addExact(Math.multiplyExact(ap, 12), hap));
|
||||||
} else { // STRICT or SMART
|
} else { // STRICT or SMART
|
||||||
AMPM_OF_DAY.checkValidValue(ap);
|
AMPM_OF_DAY.checkValidValue(ap);
|
||||||
HOUR_OF_AMPM.checkValidValue(ap);
|
HOUR_OF_AMPM.checkValidValue(hap);
|
||||||
updateCheckConflict(AMPM_OF_DAY, HOUR_OF_DAY, ap * 12 + hap);
|
updateCheckConflict(AMPM_OF_DAY, HOUR_OF_DAY, ap * 12 + hap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2014, 2019, 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
|
||||||
@ -59,13 +59,16 @@
|
|||||||
*/
|
*/
|
||||||
package test.java.time.format;
|
package test.java.time.format;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoField.AMPM_OF_DAY;
|
||||||
import static java.time.temporal.ChronoField.EPOCH_DAY;
|
import static java.time.temporal.ChronoField.EPOCH_DAY;
|
||||||
|
import static java.time.temporal.ChronoField.HOUR_OF_AMPM;
|
||||||
import static java.time.temporal.ChronoField.INSTANT_SECONDS;
|
import static java.time.temporal.ChronoField.INSTANT_SECONDS;
|
||||||
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
|
import static java.time.temporal.ChronoField.MICRO_OF_SECOND;
|
||||||
import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
|
import static java.time.temporal.ChronoField.MILLI_OF_SECOND;
|
||||||
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
|
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
|
||||||
import static java.time.temporal.ChronoField.OFFSET_SECONDS;
|
import static java.time.temporal.ChronoField.OFFSET_SECONDS;
|
||||||
import static java.time.temporal.ChronoField.SECOND_OF_DAY;
|
import static java.time.temporal.ChronoField.SECOND_OF_DAY;
|
||||||
|
import static java.util.Locale.US;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
import java.time.DateTimeException;
|
import java.time.DateTimeException;
|
||||||
@ -76,15 +79,17 @@ import java.time.ZoneOffset;
|
|||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeFormatterBuilder;
|
import java.time.format.DateTimeFormatterBuilder;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
import java.time.temporal.TemporalAccessor;
|
import java.time.temporal.TemporalAccessor;
|
||||||
|
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test parsing of edge cases.
|
* @test
|
||||||
|
* @summary Test parsing of edge cases.
|
||||||
|
* @bug 8223773
|
||||||
*/
|
*/
|
||||||
@Test
|
|
||||||
public class TestDateTimeParsing {
|
public class TestDateTimeParsing {
|
||||||
|
|
||||||
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
|
private static final ZoneId PARIS = ZoneId.of("Europe/Paris");
|
||||||
@ -115,6 +120,9 @@ public class TestDateTimeParsing {
|
|||||||
private static final DateTimeFormatter INSTANTSECONDS_OFFSETSECONDS = new DateTimeFormatterBuilder()
|
private static final DateTimeFormatter INSTANTSECONDS_OFFSETSECONDS = new DateTimeFormatterBuilder()
|
||||||
.appendValue(INSTANT_SECONDS).appendLiteral(' ').appendValue(OFFSET_SECONDS).toFormatter();
|
.appendValue(INSTANT_SECONDS).appendLiteral(' ').appendValue(OFFSET_SECONDS).toFormatter();
|
||||||
|
|
||||||
|
private static final String DTPE_MESSAGE =
|
||||||
|
"Invalid value for HourOfAmPm (valid values 0 - 11): 12";
|
||||||
|
|
||||||
@DataProvider(name = "instantZones")
|
@DataProvider(name = "instantZones")
|
||||||
Object[][] data_instantZones() {
|
Object[][] data_instantZones() {
|
||||||
return new Object[][] {
|
return new Object[][] {
|
||||||
@ -201,4 +209,25 @@ public class TestDateTimeParsing {
|
|||||||
assertEquals(actual.isSupported(MILLI_OF_SECOND), true);
|
assertEquals(actual.isSupported(MILLI_OF_SECOND), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug 8223773: validation check for the range of HourOfAmPm in SMART mode.
|
||||||
|
// Should throw a DateTimeParseException, as 12 is out of range for HourOfAmPm.
|
||||||
|
@Test(expectedExceptions = DateTimeParseException.class)
|
||||||
|
public void test_validateHourOfAmPm() {
|
||||||
|
try {
|
||||||
|
new DateTimeFormatterBuilder()
|
||||||
|
.appendValue(HOUR_OF_AMPM,2)
|
||||||
|
.appendText(AMPM_OF_DAY)
|
||||||
|
.toFormatter(US)
|
||||||
|
.parse("12PM");
|
||||||
|
} catch (DateTimeParseException e) {
|
||||||
|
Throwable cause = e.getCause();
|
||||||
|
if (cause == null ||
|
||||||
|
!DTPE_MESSAGE.equals(cause.getMessage())) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"DateTimeParseException was thrown with different reason: " + e);
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user