8374051: Incorrect parameterized testing of exceptions in AbstractDateTimeTest.java

Reviewed-by: naoto, rriggs
This commit is contained in:
Justin Lu 2026-01-08 19:02:06 +00:00
parent 8212993ac3
commit 1342db0bde
9 changed files with 112 additions and 151 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -59,8 +59,11 @@
*/
package tck.java.time;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.DateTimeException;
import java.time.temporal.TemporalAccessor;
@ -68,8 +71,8 @@ import java.time.temporal.TemporalField;
import java.time.temporal.TemporalQuery;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import test.java.time.temporal.MockFieldNoValue;
@ -99,183 +102,137 @@ public abstract class AbstractDateTimeTest extends AbstractTCKTest {
//-----------------------------------------------------------------------
// isSupported(TemporalField)
//-----------------------------------------------------------------------
@Test()
public void basicTest_isSupported_TemporalField_supported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : validFields()) {
assertEquals(true, sample.isSupported(field), "Failed on " + sample + " " + field);
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_isSupported_TemporalField_supported(TemporalAccessor sample) {
for (TemporalField field : validFields()) {
assertTrue(sample.isSupported(field), "Failed on " + sample + " " + field);
}
}
@Test()
public void basicTest_isSupported_TemporalField_unsupported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : invalidFields()) {
assertEquals(false, sample.isSupported(field), "Failed on " + sample + " " + field);
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_isSupported_TemporalField_unsupported(TemporalAccessor sample) {
for (TemporalField field : invalidFields()) {
assertFalse(sample.isSupported(field), "Failed on " + sample + " " + field);
}
}
@Test()
public void basicTest_isSupported_TemporalField_null() {
for (TemporalAccessor sample : samples()) {
assertEquals(false, sample.isSupported(null), "Failed on " + sample);
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_isSupported_TemporalField_null(TemporalAccessor sample) {
assertFalse(sample.isSupported(null), "Failed on " + sample);
}
//-----------------------------------------------------------------------
// range(TemporalField)
//-----------------------------------------------------------------------
@Test()
public void basicTest_range_TemporalField_supported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : validFields()) {
sample.range(field); // no exception
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_range_TemporalField_supported(TemporalAccessor sample) {
for (TemporalField field : validFields()) {
assertDoesNotThrow(() -> sample.range(field));
}
}
@Test()
public void basicTest_range_TemporalField_unsupported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : invalidFields()) {
try {
sample.range(field);
fail("Failed on " + sample + " " + field);
} catch (DateTimeException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_range_TemporalField_unsupported(TemporalAccessor sample) {
for (TemporalField field : invalidFields()) {
assertThrows(DateTimeException.class,
() -> sample.range(field), "Failed on " + sample + " " + field);
}
}
@Test()
public void basicTest_range_TemporalField_null() {
for (TemporalAccessor sample : samples()) {
try {
sample.range(null);
fail("Failed on " + sample);
} catch (NullPointerException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_range_TemporalField_null(TemporalAccessor sample) {
assertThrows(NullPointerException.class,
() -> sample.range(null), "Failed on " + sample);
}
//-----------------------------------------------------------------------
// get(TemporalField)
//-----------------------------------------------------------------------
@Test()
public void basicTest_get_TemporalField_supported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : validFields()) {
if (sample.range(field).isIntValue()) {
sample.get(field); // no exception
} else {
try {
sample.get(field);
fail("Failed on " + sample + " " + field);
} catch (DateTimeException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_get_TemporalField_supported(TemporalAccessor sample) {
for (TemporalField field : validFields()) {
if (sample.range(field).isIntValue()) {
assertDoesNotThrow(() -> sample.get(field));
} else {
assertThrows(DateTimeException.class,
() -> sample.get(field), "Failed on " + sample + " " + field);
}
}
}
@Test()
public void basicTest_get_TemporalField_unsupported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : invalidFields()) {
try {
sample.get(field);
fail("Failed on " + sample + " " + field);
} catch (DateTimeException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_get_TemporalField_unsupported(TemporalAccessor sample) {
for (TemporalField field : invalidFields()) {
assertThrows(DateTimeException.class,
() -> sample.get(field), "Failed on " + sample + " " + field);
}
}
@Test
public void test_get_TemporalField_invalidField() {
Assertions.assertThrows(DateTimeException.class, () -> {
for (TemporalAccessor sample : samples()) {
sample.get(MockFieldNoValue.INSTANCE);
}
});
@ParameterizedTest
@MethodSource("samples")
public void test_get_TemporalField_invalidField(TemporalAccessor sample) {
assertThrows(DateTimeException.class,
() -> sample.get(MockFieldNoValue.INSTANCE));
}
@Test()
public void basicTest_get_TemporalField_null() {
for (TemporalAccessor sample : samples()) {
try {
sample.get(null);
fail("Failed on " + sample);
} catch (NullPointerException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_get_TemporalField_null(TemporalAccessor sample) {
assertThrows(NullPointerException.class,
() -> sample.get(null), "Failed on " + sample);
}
//-----------------------------------------------------------------------
// getLong(TemporalField)
//-----------------------------------------------------------------------
@Test()
public void basicTest_getLong_TemporalField_supported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : validFields()) {
sample.getLong(field); // no exception
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_getLong_TemporalField_supported(TemporalAccessor sample) {
for (TemporalField field : validFields()) {
sample.getLong(field);
}
}
@Test()
public void basicTest_getLong_TemporalField_unsupported() {
for (TemporalAccessor sample : samples()) {
for (TemporalField field : invalidFields()) {
try {
sample.getLong(field);
fail("Failed on " + sample + " " + field);
} catch (DateTimeException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_getLong_TemporalField_unsupported(TemporalAccessor sample) {
for (TemporalField field : invalidFields()) {
assertThrows(DateTimeException.class,
() -> sample.getLong(field), "Failed on " + sample + " " + field);
}
}
@Test
public void test_getLong_TemporalField_invalidField() {
Assertions.assertThrows(DateTimeException.class, () -> {
for (TemporalAccessor sample : samples()) {
sample.getLong(MockFieldNoValue.INSTANCE);
}
});
@ParameterizedTest
@MethodSource("samples")
public void test_getLong_TemporalField_invalidField(TemporalAccessor sample) {
assertThrows(DateTimeException.class,
() -> sample.getLong(MockFieldNoValue.INSTANCE));
}
@Test()
public void basicTest_getLong_TemporalField_null() {
for (TemporalAccessor sample : samples()) {
try {
sample.getLong(null);
fail("Failed on " + sample);
} catch (NullPointerException ex) {
// expected
}
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_getLong_TemporalField_null(TemporalAccessor sample) {
assertThrows(NullPointerException.class,
() -> sample.getLong(null), "Failed on " + sample);
}
//-----------------------------------------------------------------------
@Test
public void basicTest_query() {
for (TemporalAccessor sample : samples()) {
assertEquals("foo", sample.query(new TemporalQuery<String>() {
@Override
public String queryFrom(TemporalAccessor temporal) {
return "foo";
}
}));
}
@ParameterizedTest
@MethodSource("samples")
public void basicTest_query(TemporalAccessor sample) {
assertEquals("foo", sample.query(new TemporalQuery<String>() {
@Override
public String queryFrom(TemporalAccessor temporal) {
return "foo";
}
}));
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -139,7 +139,8 @@ public class TCKInstant extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_12345_123456789, Instant.MIN, Instant.MAX, Instant.EPOCH};
TemporalAccessor[] array = {Instant.ofEpochSecond(12345, 123456789),
Instant.MIN, Instant.MAX, Instant.EPOCH};
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -170,7 +170,7 @@ public class TCKLocalDate extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_2007_07_15, LocalDate.MAX, LocalDate.MIN, };
TemporalAccessor[] array = {LocalDate.of(2007, 7, 15), LocalDate.MAX, LocalDate.MIN, };
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -161,7 +161,8 @@ public class TCKLocalTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_12_30_40_987654321, LocalTime.MIN, LocalTime.MAX, LocalTime.MIDNIGHT, LocalTime.NOON};
TemporalAccessor[] array = {LocalTime.of(12, 30, 40, 987654321),
LocalTime.MIN, LocalTime.MAX, LocalTime.MIDNIGHT, LocalTime.NOON};
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -118,7 +118,7 @@ public class TCKMonthDay extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_07_15, };
TemporalAccessor[] array = {MonthDay.of(7, 15), };
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -167,7 +167,8 @@ public class TCKOffsetDateTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_2008_6_30_11_30_59_000000500, OffsetDateTime.MIN, OffsetDateTime.MAX};
TemporalAccessor[] array = {OffsetDateTime.of(2008, 6, 30, 11, 30, 59, 500, OFFSET_PONE),
OffsetDateTime.MIN, OffsetDateTime.MAX};
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -149,7 +149,8 @@ public class TCKOffsetTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_11_30_59_500_PONE, OffsetTime.MIN, OffsetTime.MAX};
TemporalAccessor[] array = {OffsetTime.of(11, 30, 59, 500, OFFSET_PONE),
OffsetTime.MIN, OffsetTime.MAX};
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -134,7 +134,7 @@ public class TCKYearMonth extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_2008_06, };
TemporalAccessor[] array = {YearMonth.of(2008, 6), };
return Arrays.asList(array);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2026, 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
@ -176,7 +176,7 @@ public class TCKZonedDateTime extends AbstractDateTimeTest {
//-----------------------------------------------------------------------
@Override
protected List<TemporalAccessor> samples() {
TemporalAccessor[] array = {TEST_DATE_TIME, };
TemporalAccessor[] array = {ZonedDateTime.of(LocalDateTime.of(2008, 6, 30, 11, 30, 59, 500), ZONE_0100), };
return Arrays.asList(array);
}