Home | History | Annotate | Download | only in support
      1 package tests.support;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 
      6 /**
      7  * An implementation of {@code InputStream} that should serve as the
      8  * underlying stream for classes to be tested.
      9  * In particular this implementation allows to have IOExecptions thrown on demand.
     10  * For simplicity of use and understanding all fields are public.
     11  */
     12 public class Support_ASimpleInputStream extends InputStream {
     13 
     14     public static final int DEFAULT_BUFFER_SIZE = 32;
     15 
     16     public byte[] buf;
     17 
     18     public int pos;
     19 
     20     public int len;
     21 
     22     // Set to true when exception is wanted:
     23     public boolean throwExceptionOnNextUse = false;
     24 
     25     public Support_ASimpleInputStream() {
     26         this("BEGIN Bla bla, some text...END");
     27     }
     28 
     29     public Support_ASimpleInputStream(boolean throwException) {
     30         this();
     31         throwExceptionOnNextUse = throwException;
     32     }
     33 
     34     public Support_ASimpleInputStream(String input) {
     35         buf = input.getBytes();
     36         pos = 0;
     37         len = buf.length;
     38     }
     39 
     40     public Support_ASimpleInputStream(byte[] input) {
     41         pos = 0;
     42         len = input.length;
     43         buf = new byte[len];
     44         System.arraycopy(input, 0, buf, 0, len);
     45     }
     46 
     47     @Override
     48     public void close() throws IOException {
     49         if (throwExceptionOnNextUse) {
     50             throw new IOException("Exception thrown for testing purpose.");
     51         }
     52     }
     53 
     54     @Override
     55     public int available() throws IOException {
     56         if (throwExceptionOnNextUse) {
     57             throw new IOException("Exception thrown for testing purpose.");
     58         }
     59         return len - pos;
     60     }
     61 
     62     @Override
     63     public int read() throws IOException {
     64         if (throwExceptionOnNextUse) {
     65             throw new IOException("Exception thrown for testing purpose.");
     66         }
     67         if (pos < len) {
     68             int res = buf[pos];
     69             pos++;
     70             return res;
     71 
     72         } else {
     73             return -1;
     74         }
     75     }
     76 }
     77