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 24511345b0d7708966f971c6e354daf4e447401a
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Mon Jul 8 22:16:52 2024 -0400

    ReaderInputStream.available() should return 0 after the stream is closed
    
    ReaderInputStream.read() should return -1 (EOF) after the stream is
    closed
---
 src/changes/changes.xml                            |  2 ++
 .../apache/commons/io/input/ReaderInputStream.java | 14 +++++++++-
 .../commons/io/input/ReaderInputStreamTest.java    | 31 ++++++++++++++++++++++
 3 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ac6667bea..3c4650ad4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -81,6 +81,8 @@ The <action> type attribute can be add,update,fix,remove.
       <action dev="ggregory" type="fix"                due-to="Gary 
Gregory">ProxyInputStream.read() should return -1 (EOF) after the stream is 
closed.</action>
       <action dev="ggregory" type="fix"                due-to="Gary 
Gregory">RandomAccessFileInputStream.available() should return 0 after the 
stream is closed.</action>
       <action dev="ggregory" type="fix"                due-to="Gary 
Gregory">RandomAccessFileInputStream.read() should return -1 (EOF) after the 
stream is closed.</action>
+      <action dev="ggregory" type="fix"                due-to="Gary 
Gregory">ReaderInputStream.available() should return 0 after the stream is 
closed.</action>
+      <action dev="ggregory" type="fix"                due-to="Gary 
Gregory">ReaderInputStream.read() should return -1 (EOF) after the stream is 
closed.</action>
       <!-- UPDATE -->
       <action dev="ggregory" type="update"             
due-to="Dependabot">Bump tests commons.bytebuddy.version from 1.14.13 to 
1.14.17 #615, #621, #631, #635.</action>
       <action dev="ggregory" type="update"             
due-to="Dependabot">Bump tests commons-codec:commons-codec from 1.16.1 to 
1.17.0.</action>
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 28e4469f5..0c5177c8d 100644
--- a/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ReaderInputStream.java
@@ -85,7 +85,7 @@ import org.apache.commons.io.charset.CharsetEncoders;
  * @see org.apache.commons.io.output.WriterOutputStream
  * @since 2.0
  */
-public class ReaderInputStream extends InputStream {
+public class ReaderInputStream extends AbstractInputStream {
 
     // @formatter:off
     /**
@@ -338,6 +338,14 @@ public class ReaderInputStream extends InputStream {
         this(reader, Charsets.toCharset(charsetName), bufferSize);
     }
 
+    @Override
+    public int available() throws IOException {
+        if (encoderOut.hasRemaining()) {
+            return encoderOut.remaining();
+        }
+        return 0;
+    }
+
     /**
      * Closes the stream. This method will cause the underlying {@link Reader} 
to be closed.
      *
@@ -346,6 +354,7 @@ public class ReaderInputStream extends InputStream {
     @Override
     public void close() throws IOException {
         reader.close();
+        super.close();
     }
 
     /**
@@ -399,6 +408,9 @@ public class ReaderInputStream extends InputStream {
      */
     @Override
     public int read() throws IOException {
+        if (isClosed()) {
+            return IOUtils.EOF;
+        }
         for (;;) {
             if (encoderOut.hasRemaining()) {
                 return encoderOut.get() & 0xFF;
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 7aaaa3d95..a538edb37 100644
--- a/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ReaderInputStreamTest.java
@@ -73,6 +73,37 @@ public class ReaderInputStreamTest {
 
     private final Random random = new Random();
 
+    private ReaderInputStream createInputStream() throws IOException {
+        return ReaderInputStream.builder().setReader(new 
StringReader(TEST_STRING)).get();
+    }
+
+    @Test
+    public void testAvailableAfterClose() throws IOException {
+        try (InputStream inputStream = createInputStream()) {
+            inputStream.close();
+            assertEquals(0, inputStream.available());
+        }
+    }
+
+    @Test
+    public void testReasdAfterClose() throws IOException {
+        try (InputStream inputStream = createInputStream()) {
+            inputStream.close();
+            assertEquals(IOUtils.EOF, inputStream.read());
+        }
+    }
+
+    @Test
+    public void testAvailableAfterOpen() throws IOException {
+        try (InputStream inputStream = createInputStream()) {
+            // Nothing read, may block
+            assertEquals(0, inputStream.available());
+            // Read/block
+            inputStream.read();
+            assertEquals(TEST_STRING.length() - 1, inputStream.available());
+        }
+    }
+
     @Test
     @Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
     public void testBufferSmallest() throws IOException {

Reply via email to