| package tests.support; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| /** |
| * An implementation of {@code InputStream} that should serve as the |
| * underlying stream for classes to be tested. |
| * In particular this implementation allows to have IOExecptions thrown on demand. |
| * For simplicity of use and understanding all fields are public. |
| */ |
| public class Support_ASimpleInputStream extends InputStream { |
| |
| public static final int DEFAULT_BUFFER_SIZE = 32; |
| |
| public byte[] buf; |
| |
| public int pos; |
| |
| public int len; |
| |
| // Set to true when exception is wanted: |
| public boolean throwExceptionOnNextUse = false; |
| |
| public Support_ASimpleInputStream() { |
| this("BEGIN Bla bla, some text...END"); |
| } |
| |
| public Support_ASimpleInputStream(boolean throwException) { |
| this(); |
| throwExceptionOnNextUse = throwException; |
| } |
| |
| public Support_ASimpleInputStream(String input) { |
| buf = input.getBytes(); |
| pos = 0; |
| len = buf.length; |
| } |
| |
| public Support_ASimpleInputStream(byte[] input) { |
| pos = 0; |
| len = input.length; |
| buf = new byte[len]; |
| System.arraycopy(input, 0, buf, 0, len); |
| } |
| |
| @Override |
| public void close() throws IOException { |
| if (throwExceptionOnNextUse) { |
| throw new IOException("Exception thrown for testing purpose."); |
| } |
| } |
| |
| @Override |
| public int available() throws IOException { |
| if (throwExceptionOnNextUse) { |
| throw new IOException("Exception thrown for testing purpose."); |
| } |
| return len - pos; |
| } |
| |
| @Override |
| public int read() throws IOException { |
| if (throwExceptionOnNextUse) { |
| throw new IOException("Exception thrown for testing purpose."); |
| } |
| if (pos < len) { |
| int res = buf[pos]; |
| pos++; |
| return res; |
| |
| } else { |
| return -1; |
| } |
| } |
| } |