You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/08/09 15:26:46 UTC

[commons-io] branch master updated: [IO-617] Add class CloseShieldWriter. #83.

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 d15f480  [IO-617] Add class CloseShieldWriter. #83.
d15f480 is described below

commit d15f480dd81b373f6815340c15b7a80490e8272d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Aug 9 11:26:40 2019 -0400

    [IO-617] Add class CloseShieldWriter. #83.
    
    - Applied partial patch from GitHub PR #83 from Rob Spoor which
    contained duplication from another PR.
    - Reformatted some files.
    - Closes #83.
---
 src/changes/changes.xml                            |  3 ++
 .../commons/io/output/CloseShieldOutputStream.java |  2 +-
 ...eldOutputStream.java => CloseShieldWriter.java} | 27 ++++++------
 ...tStreamTest.java => CloseShieldWriterTest.java} | 49 ++++++++++++----------
 .../commons/io/output/ClosedOutputStreamTest.java  |  2 +-
 5 files changed, 43 insertions(+), 40 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bd246d9..f186243 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -125,6 +125,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action issue="IO-616" dev="ggregory" type="add" due-to="Rob Spoor">
         Add class AppendableWriter. #87.
       </action>
+      <action issue="IO-617" dev="ggregory" type="add" due-to="Rob Spoor, Gary Gregory">
+        Add class CloseShieldWriter. #83.
+      </action>
     </release>
 
     <release version="2.6" date="2017-10-15" description="Java 7 required, Java 9 supported.">
diff --git a/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java b/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java
index 8518b7b..8146533 100644
--- a/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java
+++ b/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java
@@ -47,7 +47,7 @@ public class CloseShieldOutputStream extends ProxyOutputStream {
      */
     @Override
     public void close() {
-        out = new ClosedOutputStream();
+        out = ClosedOutputStream.CLOSED_OUTPUT_STREAM;
     }
 
 }
diff --git a/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java b/src/main/java/org/apache/commons/io/output/CloseShieldWriter.java
similarity index 54%
copy from src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java
copy to src/main/java/org/apache/commons/io/output/CloseShieldWriter.java
index 8518b7b..73a351b 100644
--- a/src/main/java/org/apache/commons/io/output/CloseShieldOutputStream.java
+++ b/src/main/java/org/apache/commons/io/output/CloseShieldWriter.java
@@ -16,38 +16,35 @@
  */
 package org.apache.commons.io.output;
 
-import java.io.OutputStream;
+import java.io.Writer;
 
 /**
- * Proxy stream that prevents the underlying output stream from being closed.
+ * Proxy stream that prevents the underlying writer from being closed.
  * <p>
- * This class is typically used in cases where an output stream needs to be
- * passed to a component that wants to explicitly close the stream even if
- * other components would still use the stream for output.
+ * This class is typically used in cases where a writer needs to be passed to a component that wants to explicitly close
+ * the writer even if other components would still use the writer for output.
  * </p>
  *
- * @since 1.4
+ * @since 2.7
  */
-public class CloseShieldOutputStream extends ProxyOutputStream {
+public class CloseShieldWriter extends ProxyWriter {
 
     /**
-     * Creates a proxy that shields the given output stream from being
-     * closed.
+     * Creates a proxy that shields the given writer from being closed.
      *
-     * @param out underlying output stream
+     * @param out underlying writer
      */
-    public CloseShieldOutputStream(final OutputStream out) {
+    public CloseShieldWriter(final Writer out) {
         super(out);
     }
 
     /**
-     * Replaces the underlying output stream with a {@link ClosedOutputStream}
-     * sentinel. The original output stream will remain open, but this proxy
-     * will appear closed.
+     * Replaces the underlying writer with a {@link ClosedWriter} sentinel. The original writer will remain open, but
+     * this proxy will appear closed.
      */
     @Override
     public void close() {
-        out = new ClosedOutputStream();
+        out = ClosedWriter.CLOSED_WRITER;
     }
 
 }
diff --git a/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java b/src/test/java/org/apache/commons/io/output/CloseShieldWriterTest.java
similarity index 52%
copy from src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java
copy to src/test/java/org/apache/commons/io/output/CloseShieldWriterTest.java
index 45e3cab..72f728a 100644
--- a/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/output/CloseShieldWriterTest.java
@@ -16,43 +16,46 @@
  */
 package org.apache.commons.io.output;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 
 import java.io.IOException;
+import java.io.Writer;
 
+import org.junit.Before;
 import org.junit.Test;
 
 /**
- * JUnit Test Case for {@link ClosedOutputStream}.
+ * JUnit Test Case for {@link CloseShieldWriter}.
  */
-public class ClosedOutputStreamTest {
+public class CloseShieldWriterTest {
 
-    /**
-     * Test the <code>write(b)</code> method.
-     * @throws Exception
-     */
-    @Test
-    public void testRead() throws Exception {
-        try (ClosedOutputStream cos = new ClosedOutputStream()) {
-            cos.write('x');
-            fail("write(b)");
-        } catch (final IOException e) {
-            // expected
-        }
+    private StringBuilderWriter original;
+
+    private Writer shielded;
+
+    @Before
+    public void setUp() {
+        original = spy(new StringBuilderWriter());
+        shielded = new CloseShieldWriter(original);
     }
 
-    /**
-     * Test the <code>flush()</code> method.
-     * @throws Exception
-     */
     @Test
-    public void testFlush() throws Exception {
-        try (ClosedOutputStream cos = new ClosedOutputStream()) {
-            cos.flush();
-            fail("flush()");
-        } catch (final IOException e) {
+    public void testClose() throws IOException {
+        shielded.close();
+        verify(original, never()).close();
+        try {
+            shielded.write('x');
+            fail("write(c)");
+        } catch (final IOException ignore) {
             // expected
         }
+        original.write('y');
+        assertEquals(1, original.getBuilder().length());
+        assertEquals('y', original.toString().charAt(0));
     }
 
 }
diff --git a/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java b/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java
index 45e3cab..e5d8321 100644
--- a/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/output/ClosedOutputStreamTest.java
@@ -32,7 +32,7 @@ public class ClosedOutputStreamTest {
      * @throws Exception
      */
     @Test
-    public void testRead() throws Exception {
+    public void testWrite() throws Exception {
         try (ClosedOutputStream cos = new ClosedOutputStream()) {
             cos.write('x');
             fail("write(b)");