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 b193176b952233e9346aed695da32f5f50267e0e
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Mon Feb 1 10:29:09 2021 -0500

    More precise testing.
---
 .../io/input/ObservableInputStreamTest.java        | 256 +++++++++++++++------
 1 file changed, 184 insertions(+), 72 deletions(-)

diff --git 
a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java 
b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
index 152c866..c619163 100644
--- a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
@@ -17,7 +17,6 @@
 package org.apache.commons.io.input;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -26,42 +25,104 @@ import java.io.IOException;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.ObservableInputStream.Observer;
+import org.apache.commons.io.output.NullOutputStream;
 import org.junit.jupiter.api.Test;
 
+/**
+ * Tests {@link ObservableInputStream}.
+ */
 public class ObservableInputStreamTest {
 
-    private static class LastByteKeepingObserver extends Observer {
-        private int lastByteSeen = -1;
-        private boolean finished;
-        private boolean closed;
+    private static class DataViewObserver extends MethodCountObserver {
+        private byte[] buffer;
+        private int lastValue = -1;
+        private int length = -1;
+        private int offset = -1;
 
         @Override
-        public void closed() throws IOException {
-            closed = true;
+        public void data(final byte[] buffer, final int offset, final int 
length) throws IOException {
+            this.buffer = buffer;
+            this.offset = offset;
+            this.length = length;
         }
 
         @Override
         public void data(final int value) throws IOException {
-            lastByteSeen = value;
+            super.data(value);
+            lastValue = value;
         }
+    }
+
+    private static class LengthObserver extends Observer {
+        private long total;
 
         @Override
-        public void finished() throws IOException {
-            finished = true;
+        public void data(final byte[] buffer, final int offset, final int 
length) throws IOException {
+            this.total += length;
+        }
+
+        @Override
+        public void data(int value) throws IOException {
+            total++;
+        }
+
+        public long getTotal() {
+            return total;
         }
     }
 
-    private static class LastBytesKeepingObserver extends Observer {
-        private byte[] buffer;
-        private int offset = -1;
-        private int length = -1;
+    private static class MethodCountObserver extends Observer {
+        private long closedCount;
+        private long dataBufferCount;
+        private long dataCount;
+        private long errorCount;
+        private long finishedCount;
+
+        @Override
+        public void closed() throws IOException {
+            closedCount++;
+        }
 
         @Override
         public void data(final byte[] buffer, final int offset, final int 
length) throws IOException {
-            this.buffer = buffer;
-            this.offset = offset;
-            this.length = length;
+            dataBufferCount++;
         }
+
+        @Override
+        public void data(int value) throws IOException {
+            dataCount++;
+        }
+
+        @Override
+        public void error(IOException exception) throws IOException {
+            errorCount++;
+        }
+
+        @Override
+        public void finished() throws IOException {
+            finishedCount++;
+        }
+
+        public long getClosedCount() {
+            return closedCount;
+        }
+
+        public long getDataBufferCount() {
+            return dataBufferCount;
+        }
+
+        public long getDataCount() {
+            return dataCount;
+        }
+
+        public long getErrorCount() {
+            return errorCount;
+        }
+
+        public long getFinishedCount() {
+            return finishedCount;
+        }
+
     }
 
     /**
@@ -71,28 +132,28 @@ public class ObservableInputStreamTest {
     public void testDataByteCalled_add() throws Exception {
         final byte[] buffer = MessageDigestCalculatingInputStreamTest
             .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
-        final LastByteKeepingObserver lko = new LastByteKeepingObserver();
+        final DataViewObserver lko = new DataViewObserver();
         try (final ObservableInputStream ois = new ObservableInputStream(new 
ByteArrayInputStream(buffer))) {
-            assertEquals(-1, lko.lastByteSeen);
+            assertEquals(-1, lko.lastValue);
             ois.read();
-            assertEquals(-1, lko.lastByteSeen);
-            assertFalse(lko.finished);
-            assertFalse(lko.closed);
+            assertEquals(-1, lko.lastValue);
+            assertEquals(0, lko.getFinishedCount());
+            assertEquals(0, lko.getClosedCount());
             ois.add(lko);
             for (int i = 1; i < buffer.length; i++) {
                 final int result = ois.read();
                 assertEquals((byte) result, buffer[i]);
-                assertEquals(result, lko.lastByteSeen);
-                assertFalse(lko.finished);
-                assertFalse(lko.closed);
+                assertEquals(result, lko.lastValue);
+                assertEquals(0, lko.getFinishedCount());
+                assertEquals(0, lko.getClosedCount());
             }
             final int result = ois.read();
             assertEquals(-1, result);
-            assertTrue(lko.finished);
-            assertFalse(lko.closed);
+            assertEquals(1, lko.getFinishedCount());
+            assertEquals(0, lko.getClosedCount());
             ois.close();
-            assertTrue(lko.finished);
-            assertTrue(lko.closed);
+            assertEquals(1, lko.getFinishedCount());
+            assertEquals(1, lko.getClosedCount());
         }
     }
 
@@ -103,27 +164,27 @@ public class ObservableInputStreamTest {
     public void testDataByteCalled_ctor() throws Exception {
         final byte[] buffer = MessageDigestCalculatingInputStreamTest
             .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
-        final LastByteKeepingObserver lko = new LastByteKeepingObserver();
+        final DataViewObserver lko = new DataViewObserver();
         try (final ObservableInputStream ois = new ObservableInputStream(new 
ByteArrayInputStream(buffer), lko)) {
-            assertEquals(-1, lko.lastByteSeen);
+            assertEquals(-1, lko.lastValue);
             ois.read();
-            assertNotEquals(-1, lko.lastByteSeen);
-            assertFalse(lko.finished);
-            assertFalse(lko.closed);
+            assertNotEquals(-1, lko.lastValue);
+            assertEquals(0, lko.getFinishedCount());
+            assertEquals(0, lko.getClosedCount());
             for (int i = 1; i < buffer.length; i++) {
                 final int result = ois.read();
                 assertEquals((byte) result, buffer[i]);
-                assertEquals(result, lko.lastByteSeen);
-                assertFalse(lko.finished);
-                assertFalse(lko.closed);
+                assertEquals(result, lko.lastValue);
+                assertEquals(0, lko.getFinishedCount());
+                assertEquals(0, lko.getClosedCount());
             }
             final int result = ois.read();
             assertEquals(-1, result);
-            assertTrue(lko.finished);
-            assertFalse(lko.closed);
+            assertEquals(1, lko.getFinishedCount());
+            assertEquals(0, lko.getClosedCount());
             ois.close();
-            assertTrue(lko.finished);
-            assertTrue(lko.closed);
+            assertEquals(1, lko.getFinishedCount());
+            assertEquals(1, lko.getClosedCount());
         }
     }
 
@@ -134,42 +195,93 @@ public class ObservableInputStreamTest {
     public void testDataBytesCalled() throws Exception {
         final byte[] buffer = MessageDigestCalculatingInputStreamTest
             .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
-        final ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
-        final ObservableInputStream ois = new ObservableInputStream(bais);
-        final LastBytesKeepingObserver lko = new LastBytesKeepingObserver();
-        final byte[] readBuffer = new byte[23];
-        assertEquals(null, lko.buffer);
-        ois.read(readBuffer);
-        assertEquals(null, lko.buffer);
-        ois.add(lko);
-        for (;;) {
-            if (bais.available() >= 2048) {
-                final int result = ois.read(readBuffer);
-                if (result == -1) {
-                    ois.close();
-                    break;
-                }
-                assertEquals(readBuffer, lko.buffer);
-                assertEquals(0, lko.offset);
-                assertEquals(readBuffer.length, lko.length);
-            } else {
-                final int res = Math.min(11, bais.available());
-                final int result = ois.read(readBuffer, 1, 11);
-                if (result == -1) {
-                    ois.close();
-                    break;
+        try (final ByteArrayInputStream bais = new 
ByteArrayInputStream(buffer);
+            final ObservableInputStream ois = new ObservableInputStream(bais)) 
{
+            final DataViewObserver observer = new DataViewObserver();
+            final byte[] readBuffer = new byte[23];
+            assertEquals(null, observer.buffer);
+            ois.read(readBuffer);
+            assertEquals(null, observer.buffer);
+            ois.add(observer);
+            for (;;) {
+                if (bais.available() >= 2048) {
+                    final int result = ois.read(readBuffer);
+                    if (result == -1) {
+                        ois.close();
+                        break;
+                    }
+                    assertEquals(readBuffer, observer.buffer);
+                    assertEquals(0, observer.offset);
+                    assertEquals(readBuffer.length, observer.length);
+                } else {
+                    final int res = Math.min(11, bais.available());
+                    final int result = ois.read(readBuffer, 1, 11);
+                    if (result == -1) {
+                        ois.close();
+                        break;
+                    }
+                    assertEquals(readBuffer, observer.buffer);
+                    assertEquals(1, observer.offset);
+                    assertEquals(res, observer.length);
                 }
-                assertEquals(readBuffer, lko.buffer);
-                assertEquals(1, lko.offset);
-                assertEquals(res, lko.length);
             }
         }
     }
 
     @Test
-    public void testGetObservers() {
-        final LastBytesKeepingObserver observer = new 
LastBytesKeepingObserver();
-        final ObservableInputStream ois = new ObservableInputStream(new 
NullInputStream(), observer);
-        assertEquals(observer, ois.getObservers().get(0));
+    public void testGetObservers0() throws IOException {
+        try (final ObservableInputStream ois = new ObservableInputStream(new 
NullInputStream())) {
+            assertTrue(ois.getObservers().isEmpty());
+        }
+    }
+
+    @Test
+    public void testGetObservers1() throws IOException {
+        final DataViewObserver observer0 = new DataViewObserver();
+        try (final ObservableInputStream ois = new ObservableInputStream(new 
NullInputStream(), observer0)) {
+            assertEquals(observer0, ois.getObservers().get(0));
+        }
+    }
+
+    @Test
+    public void testGetObserversOrder() throws IOException {
+        final DataViewObserver observer0 = new DataViewObserver();
+        final DataViewObserver observer1 = new DataViewObserver();
+        try (final ObservableInputStream ois = new ObservableInputStream(new 
NullInputStream(), observer0, observer1)) {
+            assertEquals(observer0, ois.getObservers().get(0));
+            assertEquals(observer1, ois.getObservers().get(1));
+        }
+    }
+
+    private void testNotificationCallbacks(final int bufferSize) throws 
IOException {
+        final byte[] buffer = new byte[IOUtils.DEFAULT_BUFFER_SIZE];
+        final LengthObserver lengthObserver = new LengthObserver();
+        final MethodCountObserver methodCountObserver = new 
MethodCountObserver();
+        try (final ObservableInputStream ois = new ObservableInputStream(new 
ByteArrayInputStream(buffer),
+            lengthObserver, methodCountObserver)) {
+            assertEquals(IOUtils.DEFAULT_BUFFER_SIZE,
+                IOUtils.copy(ois, NullOutputStream.NULL_OUTPUT_STREAM, 
bufferSize));
+        }
+        assertEquals(IOUtils.DEFAULT_BUFFER_SIZE, lengthObserver.getTotal());
+        assertEquals(1, methodCountObserver.getClosedCount());
+        assertEquals(1, methodCountObserver.getFinishedCount());
+        assertEquals(0, methodCountObserver.getErrorCount());
+        assertEquals(0, methodCountObserver.getDataCount());
+        assertEquals(buffer.length / bufferSize, 
methodCountObserver.getDataBufferCount());
+    }
+
+    @Test
+    public void testNotificationCallbacksBufferSize1() throws Exception {
+        testNotificationCallbacks(1);
+    }
+
+    @Test
+    public void testNotificationCallbacksBufferSize2() throws Exception {
+        testNotificationCallbacks(2);
+    }
+
+    @Test
+    public void testNotificationCallbacksBufferSizeDefault() throws Exception {
+        testNotificationCallbacks(IOUtils.DEFAULT_BUFFER_SIZE);
     }
 }

Reply via email to