diff --git a/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/GeneratingInputStream.java b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/GeneratingInputStream.java new file mode 100644 index 0000000000..5fd0c3cf03 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/GeneratingInputStream.java @@ -0,0 +1,23 @@ +package com.baeldung.mockinginputstream; + +import java.io.IOException; +import java.io.InputStream; + +public class GeneratingInputStream extends InputStream { + private final int desiredSize; + private int actualSize = 0; + private final byte[] seed; + + public GeneratingInputStream(int desiredSize, String seed) { + this.desiredSize = desiredSize; + this.seed = seed.getBytes(); + } + + @Override + public int read() { + if (actualSize >= desiredSize) { + return -1; + } + return seed[actualSize++ % seed.length]; + } +} diff --git a/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/MockingInputStreamUnitTest.java b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/MockingInputStreamUnitTest.java new file mode 100644 index 0000000000..4b29a778b0 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/mockinginputstream/MockingInputStreamUnitTest.java @@ -0,0 +1,59 @@ +package com.baeldung.mockinginputstream; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class MockingInputStreamUnitTest { + @Test + public void givenSimpleImplementation_shouldProcessInputStream() throws IOException { + int byteCount = processInputStream(new InputStream() { + private final byte[] msg = "Hello World".getBytes(); + private int index = 0; + @Override + public int read() { + if (index >= msg.length) { + return -1; + } + return msg[index++]; + } + }); + assertThat(byteCount).isEqualTo(11); + } + + @Test + public void givenByteArrayInputStream_shouldProcessInputStream() throws IOException { + String msg = "Hello World"; + int bytesCount = processInputStream(new ByteArrayInputStream(msg.getBytes())); + assertThat(bytesCount).isEqualTo(11); + } + + @Test + public void givenFileInputStream_shouldProcessInputStream() throws IOException { + InputStream inputStream = MockingInputStreamUnitTest.class.getResourceAsStream("/mockinginputstreams/msg.txt"); + int bytesCount = processInputStream(inputStream); + assertThat(bytesCount).isEqualTo(11); + inputStream.close(); + } + + @Test + public void givenGeneratingInputStream_shouldProcessInputStream() throws IOException { + InputStream inputStream = new GeneratingInputStream(10_000, "Hello World"); + int bytesCount = processInputStream(inputStream); + assertThat(bytesCount).isEqualTo(10_000); + inputStream.close(); + } + + int processInputStream(InputStream inputStream) throws IOException { + int count = 0; + while(inputStream.read() != -1) { + count++; + } + return count; + } +} diff --git a/core-java-modules/core-java-io-4/src/test/resources/mockinginputstreams/msg.txt b/core-java-modules/core-java-io-4/src/test/resources/mockinginputstreams/msg.txt new file mode 100644 index 0000000000..5e1c309dae --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/resources/mockinginputstreams/msg.txt @@ -0,0 +1 @@ +Hello World \ No newline at end of file