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 2021/01/30 16:15:58 UTC
[commons-io] branch master updated: Add and use
ObservableInputStream.ObservableInputStream(InputStream, Observer...).
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 59cf9ef Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
59cf9ef is described below
commit 59cf9efdb1c35269b463973ada9945f0d6d7747f
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 30 11:15:53 2021 -0500
Add and use ObservableInputStream.ObservableInputStream(InputStream,
Observer...).
---
src/changes/changes.xml | 3 ++
.../input/MessageDigestCalculatingInputStream.java | 9 ++---
.../commons/io/input/ObservableInputStream.java | 25 ++++++++++++-
.../io/input/ObservableInputStreamTest.java | 43 +++++++++++++++++++++-
4 files changed, 73 insertions(+), 7 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7ced17b..6bbaeee 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -157,6 +157,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="add" due-to="Gary Gregory">
Add and use IOExceptionList(String, List).
</action>
+ <action dev="ggregory" type="add" due-to="Gary Gregory">
+ Add and use ObservableInputStream.ObservableInputStream(InputStream, Observer...).
+ </action>
<!-- UPDATES -->
<action dev="ggregory" type="update" due-to="Dependabot">
Update junit-jupiter from 5.6.2 to 5.7.0 #153.
diff --git a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
index da71ead..1e9d46f 100644
--- a/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/MessageDigestCalculatingInputStream.java
@@ -61,12 +61,11 @@ public class MessageDigestCalculatingInputStream extends ObservableInputStream {
/** Creates a new instance, which calculates a signature on the given stream,
* using the given {@link MessageDigest}.
* @param inputStream the stream to calculate the message digest for
- * @param MessageDigest the message digest to use
+ * @param messageDigest the message digest to use
*/
- public MessageDigestCalculatingInputStream(final InputStream inputStream, final MessageDigest MessageDigest) {
- super(inputStream);
- this.messageDigest = MessageDigest;
- add(new MessageDigestMaintainingObserver(MessageDigest));
+ public MessageDigestCalculatingInputStream(final InputStream inputStream, final MessageDigest messageDigest) {
+ super(inputStream, new MessageDigestMaintainingObserver(messageDigest));
+ this.messageDigest = messageDigest;
}
/**
diff --git a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
index fab72be..22edfdb 100644
--- a/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
+++ b/src/main/java/org/apache/commons/io/input/ObservableInputStream.java
@@ -21,6 +21,7 @@ import static org.apache.commons.io.IOUtils.EOF;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.IOUtils;
@@ -100,7 +101,7 @@ public class ObservableInputStream extends ProxyInputStream {
}
}
- private final List<Observer> observers = new ArrayList<>();
+ private final List<Observer> observers;
/**
* Creates a new ObservableInputStream for the given InputStream.
@@ -108,7 +109,29 @@ public class ObservableInputStream extends ProxyInputStream {
* @param inputStream the input stream to proxy.
*/
public ObservableInputStream(final InputStream inputStream) {
+ this(inputStream, new ArrayList<>());
+ }
+
+ /**
+ * Creates a new ObservableInputStream for the given InputStream.
+ *
+ * @param inputStream the input stream to proxy.
+ * @param observers List of callbacks.
+ */
+ private ObservableInputStream(final InputStream inputStream, final List<Observer> observers) {
super(inputStream);
+ this.observers = observers;
+ }
+
+ /**
+ * Creates a new ObservableInputStream for the given InputStream.
+ *
+ * @param inputStream the input stream to proxy.
+ * @param observers List of callbacks.
+ * @since 2.9.0
+ */
+ public ObservableInputStream(final InputStream inputStream, final Observer... observers) {
+ this(inputStream, Arrays.asList(observers));
}
/**
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 cb5c43a..e888528 100644
--- a/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
+++ b/src/test/java/org/apache/commons/io/input/ObservableInputStreamTest.java
@@ -17,6 +17,7 @@
package org.apache.commons.io.input;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -28,6 +29,7 @@ import org.apache.commons.io.input.ObservableInputStream.Observer;
import org.junit.jupiter.api.Test;
public class ObservableInputStreamTest {
+
private static class LastByteKeepingObserver extends Observer {
private int lastByteSeen = -1;
private boolean finished;
@@ -70,7 +72,7 @@ public class ObservableInputStreamTest {
* Tests that {@link Observer#data(int)} is called.
*/
@Test
- public void testDataByteCalled() throws Exception {
+ public void testDataByteCalled_add() throws Exception {
final byte[] buffer = MessageDigestCalculatingInputStreamTest
.generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
final LastByteKeepingObserver lko = new LastByteKeepingObserver();
@@ -99,6 +101,37 @@ public class ObservableInputStreamTest {
}
/**
+ * Tests that {@link Observer#data(int)} is called.
+ */
+ @Test
+ public void testDataByteCalled_ctor() throws Exception {
+ final byte[] buffer = MessageDigestCalculatingInputStreamTest
+ .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
+ final LastByteKeepingObserver lko = new LastByteKeepingObserver();
+ try (final ObservableInputStream ois = new ObservableInputStream(new ByteArrayInputStream(buffer), lko)) {
+ assertEquals(-1, lko.lastByteSeen);
+ ois.read();
+ assertNotEquals(-1, lko.lastByteSeen);
+ assertFalse(lko.finished);
+ assertFalse(lko.closed);
+ 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);
+ }
+ final int result = ois.read();
+ assertEquals(-1, result);
+ assertTrue(lko.finished);
+ assertFalse(lko.closed);
+ ois.close();
+ assertTrue(lko.finished);
+ assertTrue(lko.closed);
+ }
+ }
+
+ /**
* Tests that {@link Observer#data(byte[],int,int)} is called.
*/
@Test
@@ -137,4 +170,12 @@ public class ObservableInputStreamTest {
}
}
+ @Test
+ public void testTimestamped() {
+ final byte[] buffer = MessageDigestCalculatingInputStreamTest
+ .generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
+ final ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ final ObservableInputStream ois = new ObservableInputStream(bais);
+
+ }
}