This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push: new cd63f78f Try to get tests to pass on Java 8, 11, 17 on Windows, mac, and Ubuntu on GitHub. cd63f78f is described below commit cd63f78f80e1fce218cb33a768625f7f1e59974b Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Thu Sep 22 10:53:59 2022 -0400 Try to get tests to pass on Java 8, 11, 17 on Windows, mac, and Ubuntu on GitHub. This commit passes on Windows and macOS with Java 8, 11, and 17. --- .../apache/commons/io/function/IOStreamTest.java | 77 ++++++++++++++++------ 1 file changed, 57 insertions(+), 20 deletions(-) diff --git a/src/test/java/org/apache/commons/io/function/IOStreamTest.java b/src/test/java/org/apache/commons/io/function/IOStreamTest.java index 6391e9b4..1080cc62 100644 --- a/src/test/java/org/apache/commons/io/function/IOStreamTest.java +++ b/src/test/java/org/apache/commons/io/function/IOStreamTest.java @@ -18,12 +18,13 @@ package org.apache.commons.io.function; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import java.io.IOException; import java.util.Arrays; @@ -36,6 +37,8 @@ import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; +import org.apache.commons.lang3.JavaVersion; +import org.apache.commons.lang3.SystemUtils; import org.junit.jupiter.api.Test; /** @@ -43,6 +46,9 @@ import org.junit.jupiter.api.Test; */ public class IOStreamTest { + private static final boolean AT_LEAST_JAVA_11 = SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_11); + private static final boolean AT_LEAST_JAVA_17 = SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_17); + private void compareAndSetIO(final AtomicReference<String> ref, final String expected, final String update) throws IOException { TestUtils.compareAndSetThrowsIO(ref, expected, update); } @@ -97,12 +103,17 @@ public class IOStreamTest { @Test public void testCollectSupplierOfRBiConsumerOfRQsuperTBiConsumerOfRR() throws IOException { // TODO Need an IOCollector? - IOStream.of("A", "B").collect(() -> "A", (t, u) -> {}, (t, u) -> {}); + IOStream.of("A", "B").collect(() -> "A", (t, u) -> { + }, (t, u) -> { + }); assertEquals("AB", Stream.of("A", "B").collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString()); assertEquals("AB", IOStream.of("A", "B").collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString()); // Exceptions - assertThrows(IOException.class, () -> IOStream.of("A", "B").collect(TestUtils.throwingIOSupplier(), (t, u) -> {}, (t, u) -> {})); - assertThrows(IOException.class, () -> IOStream.of("A", "B").collect(() -> "A", TestUtils.throwingIOBiConsumer(), (t, u) -> {})); + assertThrows(IOException.class, () -> IOStream.of("A", "B").collect(TestUtils.throwingIOSupplier(), (t, u) -> { + }, (t, u) -> { + })); + assertThrows(IOException.class, () -> IOStream.of("A", "B").collect(() -> "A", TestUtils.throwingIOBiConsumer(), (t, u) -> { + })); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -177,7 +188,7 @@ public class IOStreamTest { @Test public void testFlatMap() throws IOException { assertEquals(Arrays.asList("A", "B", "C", "D"), - IOStream.of(IOStream.of("A", "B"), IOStream.of("C", "D")).flatMap(IOFunction.identity()).collect(Collectors.toList())); + IOStream.of(IOStream.of("A", "B"), IOStream.of("C", "D")).flatMap(IOFunction.identity()).collect(Collectors.toList())); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -320,19 +331,19 @@ public class IOStreamTest { @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testMapToDouble() { - assertArrayEquals(new double[] {Double.parseDouble("1"), Double.parseDouble("2")}, IOStream.of("1", "2").mapToDouble(Double::parseDouble).toArray()); + assertArrayEquals(new double[] { Double.parseDouble("1"), Double.parseDouble("2") }, IOStream.of("1", "2").mapToDouble(Double::parseDouble).toArray()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testMapToInt() { - assertArrayEquals(new int[] {1, 2}, IOStream.of("1", "2").mapToInt(Integer::parseInt).toArray()); + assertArrayEquals(new int[] { 1, 2 }, IOStream.of("1", "2").mapToInt(Integer::parseInt).toArray()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testMapToLong() { - assertArrayEquals(new long[] {1L, 2L}, IOStream.of("1", "2").mapToLong(Long::parseLong).toArray()); + assertArrayEquals(new long[] { 1L, 2L }, IOStream.of("1", "2").mapToLong(Long::parseLong).toArray()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -443,8 +454,20 @@ public class IOStreamTest { @Test public void testPeek() throws IOException { final AtomicReference<String> ref = new AtomicReference<>(); - assertEquals(1, IOStream.of("A").peek(e -> compareAndSetIO(ref, null, e)).count()); - assertEquals("A", ref.get()); + // Stream sanity check + assertEquals(1, Stream.of("A").peek(e -> compareAndSetRE(ref, null, e)).count()); + // TODO Resolve, abstract or document these differences? + assertEquals(AT_LEAST_JAVA_11 ? null : "A", ref.get()); + if (AT_LEAST_JAVA_11) { + assertEquals(1, IOStream.of("B").peek(e -> compareAndSetRE(ref, null, e)).count()); + assertEquals(1, IOStream.of("B").peek(e -> compareAndSetIO(ref, null, e)).count()); + assertEquals(null, ref.get()); + } else { + // Java 8 + assertThrows(RuntimeException.class, () -> IOStream.of("B").peek(e -> compareAndSetRE(ref, null, e)).count()); + assertThrows(IOException.class, () -> IOStream.of("B").peek(e -> compareAndSetIO(ref, null, e)).count()); + assertEquals("A", ref.get()); + } } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -452,7 +475,7 @@ public class IOStreamTest { public void testReduceBinaryOperatorOfT() throws IOException { assertEquals("AB", IOStream.of("A", "B").reduce((t, u) -> t + u).get()); assertEquals(TestConstants.ABS_PATH_A.toRealPath(), - IOStream.of(TestConstants.ABS_PATH_A, TestConstants.ABS_PATH_B).reduce((t, u) -> t.toRealPath()).get()); + IOStream.of(TestConstants.ABS_PATH_A, TestConstants.ABS_PATH_B).reduce((t, u) -> t.toRealPath()).get()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -460,7 +483,7 @@ public class IOStreamTest { public void testReduceTBinaryOperatorOfT() throws IOException { assertEquals("_AB", IOStream.of("A", "B").reduce("_", (t, u) -> t + u)); assertEquals(TestConstants.ABS_PATH_A.toRealPath(), - IOStream.of(TestConstants.ABS_PATH_A, TestConstants.ABS_PATH_B).reduce(TestConstants.ABS_PATH_A, (t, u) -> t.toRealPath())); + IOStream.of(TestConstants.ABS_PATH_A, TestConstants.ABS_PATH_B).reduce(TestConstants.ABS_PATH_A, (t, u) -> t.toRealPath())); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -468,7 +491,7 @@ public class IOStreamTest { public void testReduceUBiFunctionOfUQsuperTUBinaryOperatorOfU() throws IOException { assertEquals("_AB", IOStream.of("A", "B").reduce("_", (t, u) -> t + u, (t, u) -> t + u)); assertEquals(TestConstants.ABS_PATH_A.toRealPath(), IOStream.of(TestConstants.ABS_PATH_A, TestConstants.ABS_PATH_B).reduce(TestConstants.ABS_PATH_A, - (t, u) -> t.toRealPath(), (t, u) -> u.toRealPath())); + (t, u) -> t.toRealPath(), (t, u) -> u.toRealPath())); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -481,8 +504,22 @@ public class IOStreamTest { @Test public void testSkip() throws IOException { final AtomicReference<String> ref = new AtomicReference<>(); - assertEquals(1, IOStream.of("A", "B").skip(1).peek(e -> compareAndSetIO(ref, null, e)).count()); - assertEquals("B", ref.get()); + assertEquals(1, Stream.of("A", "B").skip(1).peek(e -> compareAndSetRE(ref, null, e)).count()); + // TODO Resolve, abstract or document these differences? + assertEquals(AT_LEAST_JAVA_17 ? null : "B", ref.get()); + if (AT_LEAST_JAVA_17) { + assertEquals(1, IOStream.of("C", "D").skip(1).peek(e -> compareAndSetRE(ref, null, e)).count()); + assertEquals(1, IOStream.of("C", "D").skip(1).peek(e -> compareAndSetIO(ref, null, e)).count()); + assertNull(ref.get()); + } else if (AT_LEAST_JAVA_11) { + assertThrows(RuntimeException.class, () -> IOStream.of("C", "D").skip(1).peek(e -> compareAndSetRE(ref, null, e)).count()); + assertThrows(IOException.class, () -> IOStream.of("C", "D").skip(1).peek(e -> compareAndSetIO(ref, null, e)).count()); + assertEquals("B", ref.get()); + } else { + assertThrows(RuntimeException.class, () -> IOStream.of("C", "D").skip(1).peek(e -> compareAndSetRE(ref, null, e)).count()); + assertThrows(IOException.class, () -> IOStream.of("C", "D").skip(1).peek(e -> compareAndSetIO(ref, null, e)).count()); + assertEquals("B", ref.get()); + } } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -497,7 +534,7 @@ public class IOStreamTest { public void testSortedComparatorOfQsuperT() throws IOException { assertEquals(Arrays.asList("A", "B", "C", "D"), IOStream.of("D", "A", "B", "C").sorted(String::compareTo).collect(Collectors.toList())); assertEquals(Arrays.asList("A", "B", "C", "D"), - IOStream.of("D", "A", "B", "C").sorted(String::compareTo).peek(this::ioExceptionOnNull).collect(Collectors.toList())); + IOStream.of("D", "A", "B", "C").sorted(String::compareTo).peek(this::ioExceptionOnNull).collect(Collectors.toList())); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @@ -511,22 +548,22 @@ public class IOStreamTest { @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testToArray() { - assertArrayEquals(new String[] {"A", "B"}, IOStream.of("A", "B").toArray()); + assertArrayEquals(new String[] { "A", "B" }, IOStream.of("A", "B").toArray()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testToArrayIntFunctionOfA() { - assertArrayEquals(new String[] {"A", "B"}, IOStream.of("A", "B").toArray(String[]::new)); + assertArrayEquals(new String[] { "A", "B" }, IOStream.of("A", "B").toArray(String[]::new)); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery @Test public void testUnordered() { // Sanity check - assertArrayEquals(new String[] {"A", "B"}, Stream.of("A", "B").unordered().toArray()); + assertArrayEquals(new String[] { "A", "B" }, Stream.of("A", "B").unordered().toArray()); // Test - assertArrayEquals(new String[] {"A", "B"}, IOStream.of("A", "B").unordered().toArray()); + assertArrayEquals(new String[] { "A", "B" }, IOStream.of("A", "B").unordered().toArray()); } @SuppressWarnings("resource") // custom stream not recognized by compiler warning machinery