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
commit 23460adf8c5e236d2c4e291fba8c09c556ec1868 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Fri Jun 23 19:18:33 2023 -0400 Add IOIntSupplier - Add Uncheck.getAsInt(IOIntSupplier) - Add IOLongSupplier - Add Uncheck.getAsLong(IOLongSupplier) --- src/changes/changes.xml | 12 ++++ .../apache/commons/io/function/IOIntSupplier.java | 49 +++++++++++++ .../apache/commons/io/function/IOLongSupplier.java | 49 +++++++++++++ .../org/apache/commons/io/function/Uncheck.java | 32 +++++++++ .../apache/commons/io/input/ReaderInputStream.java | 16 ++--- .../apache/commons/io/FileCleaningTrackerTest.java | 80 +++++++++++----------- .../commons/io/function/IOIntSupplierTest.java | 69 +++++++++++++++++++ .../commons/io/function/IOLongSupplierTest.java | 69 +++++++++++++++++++ .../apache/commons/io/function/TestConstants.java | 4 ++ .../org/apache/commons/io/function/TestUtils.java | 24 +++++++ .../apache/commons/io/function/UncheckTest.java | 14 +++- .../io/input/CharSequenceInputStreamTest.java | 26 +++---- .../commons/io/input/ReaderInputStreamTest.java | 15 ++-- 13 files changed, 390 insertions(+), 69 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index eed27eea..447d6f12 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -61,6 +61,18 @@ The <action> type attribute can be add,update,fix,remove. <action dev="ggregory" type="add" due-to="Gary Gregory"> Add FilesUncheck.find(Path, int, BiPredicate%lt;Path, BasicFileAttributes>, FileVisitOption...) </action> + <action dev="ggregory" type="add" due-to="Gary Gregory"> + Add IOIntSupplier. + </action> + <action dev="ggregory" type="add" due-to="Gary Gregory"> + Add Uncheck.getAsInt(IOIntSupplier). + </action> + <action dev="ggregory" type="add" due-to="Gary Gregory"> + Add IOLongSupplier. + </action> + <action dev="ggregory" type="add" due-to="Gary Gregory"> + Add Uncheck.getAsLong(IOLongSupplier). + </action> <!-- FIX --> <action dev="ggregory" type="fix" issue="IO-799" due-to="Jeroen van der Vegt, Gary Gregory"> ReaderInputStream.read() throws an exception instead of returning -1 when called again after returning -1. diff --git a/src/main/java/org/apache/commons/io/function/IOIntSupplier.java b/src/main/java/org/apache/commons/io/function/IOIntSupplier.java new file mode 100644 index 00000000..420498b7 --- /dev/null +++ b/src/main/java/org/apache/commons/io/function/IOIntSupplier.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.io.function; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.function.IntSupplier; +import java.util.function.Supplier; + +/** + * Like {@link IntSupplier} but throws {@link IOException}. + * + * @since 2.14.0 + */ +@FunctionalInterface +public interface IOIntSupplier { + + /** + * Creates a {@link Supplier} for this instance that throws {@link UncheckedIOException} instead of {@link IOException}. + * + * @return an UncheckedIOException Supplier. + */ + default IntSupplier asIntSupplier() { + return () -> Uncheck.getAsInt(this); + } + + /** + * Gets a result. + * + * @return a result + * @throws IOException if an I/O error occurs. + */ + int getAsInt() throws IOException; +} diff --git a/src/main/java/org/apache/commons/io/function/IOLongSupplier.java b/src/main/java/org/apache/commons/io/function/IOLongSupplier.java new file mode 100644 index 00000000..ff5181c8 --- /dev/null +++ b/src/main/java/org/apache/commons/io/function/IOLongSupplier.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.io.function; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.function.LongSupplier; +import java.util.function.Supplier; + +/** + * Like {@link IOLongSupplier} but throws {@link IOException}. + * + * @since 2.14.0 + */ +@FunctionalInterface +public interface IOLongSupplier { + + /** + * Creates a {@link Supplier} for this instance that throws {@link UncheckedIOException} instead of {@link IOException}. + * + * @return an UncheckedIOException Supplier. + */ + default LongSupplier asSupplier() { + return () -> Uncheck.getAsLong(this); + } + + /** + * Gets a result. + * + * @return a result + * @throws IOException if an I/O error occurs. + */ + long getAsLong() throws IOException; +} diff --git a/src/main/java/org/apache/commons/io/function/Uncheck.java b/src/main/java/org/apache/commons/io/function/Uncheck.java index e18937f8..3c272da6 100644 --- a/src/main/java/org/apache/commons/io/function/Uncheck.java +++ b/src/main/java/org/apache/commons/io/function/Uncheck.java @@ -199,6 +199,38 @@ public final class Uncheck { } } + /** + * Gets the result from an IO int supplier. + * + * @param supplier Supplies the return value. + * @return result from the supplier. + * @throws UncheckedIOException if an I/O error occurs. + * @since 2.14.0 + */ + public static int getAsInt(final IOIntSupplier supplier) { + try { + return supplier.getAsInt(); + } catch (final IOException e) { + throw wrap(e); + } + } + + /** + * Gets the result from an IO long supplier. + * + * @param supplier Supplies the return value. + * @return result from the supplier. + * @throws UncheckedIOException if an I/O error occurs. + * @since 2.14.0 + */ + public static long getAsLong(final IOLongSupplier supplier) { + try { + return supplier.getAsLong(); + } catch (final IOException e) { + throw wrap(e); + } + } + /** * Runs an IO runnable. * diff --git a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java index bba17caa..cfe79fc1 100644 --- a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java +++ b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java @@ -148,14 +148,6 @@ public class ReaderInputStream extends InputStream { } - private static CharsetEncoder newEncoder(final Charset charset) { - // @formatter:off - return Charsets.toCharset(charset).newEncoder() - .onMalformedInput(CodingErrorAction.REPLACE) - .onUnmappableCharacter(CodingErrorAction.REPLACE); - // @formatter:on - } - /** * Constructs a new {@link Builder}. * @@ -179,6 +171,14 @@ public class ReaderInputStream extends InputStream { return charsetEncoder.maxBytesPerChar() * 2; } + private static CharsetEncoder newEncoder(final Charset charset) { + // @formatter:off + return Charsets.toCharset(charset).newEncoder() + .onMalformedInput(CodingErrorAction.REPLACE) + .onUnmappableCharacter(CodingErrorAction.REPLACE); + // @formatter:on + } + private final Reader reader; private final CharsetEncoder charsetEncoder; diff --git a/src/test/java/org/apache/commons/io/FileCleaningTrackerTest.java b/src/test/java/org/apache/commons/io/FileCleaningTrackerTest.java index 579fcfce..b5074515 100644 --- a/src/test/java/org/apache/commons/io/FileCleaningTrackerTest.java +++ b/src/test/java/org/apache/commons/io/FileCleaningTrackerTest.java @@ -111,46 +111,6 @@ public class FileCleaningTrackerTest extends AbstractTempDirTest { theInstance = null; } - @Test - public void testFileCleanerDirectoryFileSource() throws Exception { - TestUtils.createFile(testFile, 100); - assertTrue(testFile.exists()); - assertTrue(tempDirFile.exists()); - - Object obj = new Object(); - assertEquals(0, theInstance.getTrackCount()); - theInstance.track(tempDirFile, obj); - assertEquals(1, theInstance.getTrackCount()); - - obj = null; - - waitUntilTrackCount(); - - assertEquals(0, theInstance.getTrackCount()); - assertTrue(testFile.exists()); // not deleted, as dir not empty - assertTrue(testFile.getParentFile().exists()); // not deleted, as dir not empty - } - - @Test - public void testFileCleanerDirectoryPathSource() throws Exception { - TestUtils.createFile(testPath, 100); - assertTrue(Files.exists(testPath)); - assertTrue(Files.exists(tempDirPath)); - - Object obj = new Object(); - assertEquals(0, theInstance.getTrackCount()); - theInstance.track(tempDirPath, obj); - assertEquals(1, theInstance.getTrackCount()); - - obj = null; - - waitUntilTrackCount(); - - assertEquals(0, theInstance.getTrackCount()); - assertTrue(Files.exists(testPath)); // not deleted, as dir not empty - assertTrue(Files.exists(testPath.getParent())); // not deleted, as dir not empty - } - @Test public void testFileCleanerDirectory_ForceStrategy_FileSource() throws Exception { if (!testFile.getParentFile().exists()) { @@ -227,6 +187,46 @@ public class FileCleaningTrackerTest extends AbstractTempDirTest { assertTrue(testFile.getParentFile().exists()); // not deleted, as dir not empty } + @Test + public void testFileCleanerDirectoryFileSource() throws Exception { + TestUtils.createFile(testFile, 100); + assertTrue(testFile.exists()); + assertTrue(tempDirFile.exists()); + + Object obj = new Object(); + assertEquals(0, theInstance.getTrackCount()); + theInstance.track(tempDirFile, obj); + assertEquals(1, theInstance.getTrackCount()); + + obj = null; + + waitUntilTrackCount(); + + assertEquals(0, theInstance.getTrackCount()); + assertTrue(testFile.exists()); // not deleted, as dir not empty + assertTrue(testFile.getParentFile().exists()); // not deleted, as dir not empty + } + + @Test + public void testFileCleanerDirectoryPathSource() throws Exception { + TestUtils.createFile(testPath, 100); + assertTrue(Files.exists(testPath)); + assertTrue(Files.exists(tempDirPath)); + + Object obj = new Object(); + assertEquals(0, theInstance.getTrackCount()); + theInstance.track(tempDirPath, obj); + assertEquals(1, theInstance.getTrackCount()); + + obj = null; + + waitUntilTrackCount(); + + assertEquals(0, theInstance.getTrackCount()); + assertTrue(Files.exists(testPath)); // not deleted, as dir not empty + assertTrue(Files.exists(testPath.getParent())); // not deleted, as dir not empty + } + @Test public void testFileCleanerExitWhenFinished_NoTrackAfter() { assertFalse(theInstance.exitWhenFinished); diff --git a/src/test/java/org/apache/commons/io/function/IOIntSupplierTest.java b/src/test/java/org/apache/commons/io/function/IOIntSupplierTest.java new file mode 100644 index 00000000..b23f8f67 --- /dev/null +++ b/src/test/java/org/apache/commons/io/function/IOIntSupplierTest.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.io.function; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** + * Tests {@link IOIntSupplier}. + */ +public class IOIntSupplierTest { + + private AtomicInteger atomicInt; + + private int getThrowsIO(final IOIntSupplier supplier) throws IOException { + return supplier.getAsInt(); + } + + private int getThrowsNone(final IOIntSupplier supplier) { + return supplier.asIntSupplier().getAsInt(); + } + + @BeforeEach + public void initEach() { + atomicInt = new AtomicInteger(); + } + + @Test + public void testAsSupplier() { + assertThrows(UncheckedIOException.class, () -> TestConstants.THROWING_IO_INT_SUPPLIER.asIntSupplier().getAsInt()); + assertEquals(1, getThrowsNone(() -> TestUtils.compareAndSetThrowsIO(atomicInt, 1))); + assertEquals(1, atomicInt.get()); + assertNotEquals(TestConstants.THROWING_IO_INT_SUPPLIER.asIntSupplier(), TestConstants.THROWING_IO_INT_SUPPLIER.asIntSupplier()); + } + + @Test + public void testGet() throws IOException { + assertThrows(IOException.class, () -> TestConstants.THROWING_IO_INT_SUPPLIER.getAsInt()); + assertThrows(IOException.class, () -> { + throw new IOException(); + }); + assertEquals(1, getThrowsIO(() -> TestUtils.compareAndSetThrowsIO(atomicInt, 1))); + assertEquals(1, atomicInt.get()); + } + +} \ No newline at end of file diff --git a/src/test/java/org/apache/commons/io/function/IOLongSupplierTest.java b/src/test/java/org/apache/commons/io/function/IOLongSupplierTest.java new file mode 100644 index 00000000..07748ded --- /dev/null +++ b/src/test/java/org/apache/commons/io/function/IOLongSupplierTest.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.io.function; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.concurrent.atomic.AtomicLong; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** + * Tests {@link IOLongSupplier}. + */ +public class IOLongSupplierTest { + + private AtomicLong atomicLong; + + private long getThrowsIO(final IOLongSupplier supplier) throws IOException { + return supplier.getAsLong(); + } + + private long getThrowsNone(final IOLongSupplier supplier) { + return supplier.asSupplier().getAsLong(); + } + + @BeforeEach + public void initEach() { + atomicLong = new AtomicLong(); + } + + @Test + public void testAsSupplier() throws IOException { + assertThrows(UncheckedIOException.class, () -> TestConstants.THROWING_IO_LONG_SUPPLIER.asSupplier().getAsLong()); + assertEquals(1L, getThrowsNone(() -> TestUtils.compareAndSetThrowsIO(atomicLong, 1L))); + assertEquals(1L, atomicLong.get()); + assertNotEquals(TestConstants.THROWING_IO_LONG_SUPPLIER.asSupplier(), TestConstants.THROWING_IO_LONG_SUPPLIER.asSupplier()); + } + + @Test + public void testGet() throws IOException { + assertThrows(IOException.class, () -> TestConstants.THROWING_IO_LONG_SUPPLIER.getAsLong()); + assertThrows(IOException.class, () -> { + throw new IOException(); + }); + assertEquals(1L, getThrowsIO(() -> TestUtils.compareAndSetThrowsIO(atomicLong, 1L))); + assertEquals(1L, atomicLong.get()); + } + +} \ No newline at end of file diff --git a/src/test/java/org/apache/commons/io/function/TestConstants.java b/src/test/java/org/apache/commons/io/function/TestConstants.java index 5f0581c7..bafe7ef0 100644 --- a/src/test/java/org/apache/commons/io/function/TestConstants.java +++ b/src/test/java/org/apache/commons/io/function/TestConstants.java @@ -44,6 +44,10 @@ class TestConstants { static IOFunction<Object, Object> THROWING_IO_FUNCTION = t -> throwIOException(); + static IOIntSupplier THROWING_IO_INT_SUPPLIER = () -> throwIOException(); + + static IOLongSupplier THROWING_IO_LONG_SUPPLIER = () -> throwIOException(); + static IOPredicate<Object> THROWING_IO_PREDICATE = t -> throwIOException(); static IOQuadFunction<Object, Object, Object, Object, Object> THROWING_IO_QUAD_FUNCTION = (t, u, v, w) -> throwIOException(); diff --git a/src/test/java/org/apache/commons/io/function/TestUtils.java b/src/test/java/org/apache/commons/io/function/TestUtils.java index 9b6f3aa7..9d05f026 100644 --- a/src/test/java/org/apache/commons/io/function/TestUtils.java +++ b/src/test/java/org/apache/commons/io/function/TestUtils.java @@ -18,10 +18,34 @@ package org.apache.commons.io.function; import java.io.IOException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; class TestUtils { + static int compareAndSetThrowsIO(final AtomicInteger ref, final int update) throws IOException { + return compareAndSetThrowsIO(ref, 0, update); + } + + static int compareAndSetThrowsIO(final AtomicInteger ref, final int expected, final int update) throws IOException { + if (!ref.compareAndSet(expected, update)) { + throw new IOException("Unexpected"); + } + return ref.get(); // same as update + } + + static long compareAndSetThrowsIO(final AtomicLong ref, final long update) throws IOException { + return compareAndSetThrowsIO(ref, 0, update); + } + + static long compareAndSetThrowsIO(final AtomicLong ref, final long expected, final long update) throws IOException { + if (!ref.compareAndSet(expected, update)) { + throw new IOException("Unexpected"); + } + return ref.get(); // same as update + } + static <T> T compareAndSetThrowsIO(final AtomicReference<T> ref, final T update) throws IOException { return compareAndSetThrowsIO(ref, null, update); } diff --git a/src/test/java/org/apache/commons/io/function/UncheckTest.java b/src/test/java/org/apache/commons/io/function/UncheckTest.java index ee73abc6..fedd08a2 100644 --- a/src/test/java/org/apache/commons/io/function/UncheckTest.java +++ b/src/test/java/org/apache/commons/io/function/UncheckTest.java @@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.io.UncheckedIOException; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.BeforeEach; @@ -36,8 +37,8 @@ public class UncheckTest { private AtomicReference<String> ref1; private AtomicReference<String> ref2; private AtomicReference<String> ref3; - private AtomicReference<String> ref4; + private AtomicInteger atomicInt; @BeforeEach public void initEach() { @@ -45,6 +46,7 @@ public class UncheckTest { ref2 = new AtomicReference<>(); ref3 = new AtomicReference<>(); ref4 = new AtomicReference<>(); + atomicInt = new AtomicInteger(); } @Test @@ -158,6 +160,16 @@ public class UncheckTest { assertEquals("new1", ref1.get()); } + @Test + public void testGetAsInt() { + assertThrows(UncheckedIOException.class, () -> Uncheck.getAsInt(() -> { + throw new IOException(); + })); + assertThrows(UncheckedIOException.class, () -> Uncheck.getAsInt(TestConstants.THROWING_IO_INT_SUPPLIER)); + assertEquals(1, Uncheck.getAsInt(() -> TestUtils.compareAndSetThrowsIO(atomicInt, 1))); + assertEquals(1, atomicInt.get()); + } + @Test public void testRun() { assertThrows(UncheckedIOException.class, () -> Uncheck.run(() -> { diff --git a/src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java b/src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java index 97c3f1d3..7bc997e0 100644 --- a/src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java +++ b/src/test/java/org/apache/commons/io/input/CharSequenceInputStreamTest.java @@ -425,19 +425,6 @@ public class CharSequenceInputStreamTest { } } - private void testSingleByteRead(final String testString, final String charsetName) throws IOException { - final byte[] bytes = testString.getBytes(charsetName); - try (InputStream in = new CharSequenceInputStream(testString, charsetName, 512)) { - for (final byte b : bytes) { - final int read = in.read(); - assertTrue(read >= 0, "read " + read + " >=0 "); - assertTrue(read <= 255, "read " + read + " <= 255"); - assertEquals(b, (byte) read, "Should agree with input"); - } - assertEquals(-1, in.read()); - } - } - @Test public void testResetCharset() { assertNotNull(CharSequenceInputStream.builder().setReader(new StringReader("\uD800")).setCharset((Charset) null).getCharset()); @@ -453,6 +440,19 @@ public class CharSequenceInputStreamTest { assertNotNull(CharSequenceInputStream.builder().setReader(new StringReader("\uD800")).setCharset((String) null).getCharset()); } + private void testSingleByteRead(final String testString, final String charsetName) throws IOException { + final byte[] bytes = testString.getBytes(charsetName); + try (InputStream in = new CharSequenceInputStream(testString, charsetName, 512)) { + for (final byte b : bytes) { + final int read = in.read(); + assertTrue(read >= 0, "read " + read + " >=0 "); + assertTrue(read <= 255, "read " + read + " <= 255"); + assertEquals(b, (byte) read, "Should agree with input"); + } + assertEquals(-1, in.read()); + } + } + @Test public void testSingleByteRead_RequiredCharsets() throws IOException { for (final String csName : getRequiredCharsetNames()) { diff --git a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java index fb0636d4..7aaaa3d9 100644 --- a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java +++ b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java @@ -37,6 +37,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Stream; import javax.xml.parsers.DocumentBuilderFactory; + import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; @@ -202,13 +203,6 @@ public class ReaderInputStreamTest { } } - @Test - public void testIo803StringReaderSanityCheck() { - final StringReader reader = new StringReader(""); - final InputSource inputSource = new InputSource(reader); - assertThrows(SAXException.class, () -> DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputSource)); - } - @Test public void testIo803SAXException() throws IOException { final StringReader reader = new StringReader(""); @@ -218,6 +212,13 @@ public class ReaderInputStreamTest { } } + @Test + public void testIo803StringReaderSanityCheck() { + final StringReader reader = new StringReader(""); + final InputSource inputSource = new InputSource(reader); + assertThrows(SAXException.class, () -> DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputSource)); + } + @Test public void testLargeUTF8WithBufferedRead() throws IOException { testWithBufferedRead(LARGE_TEST_STRING, UTF_8);