1 package tests.support;
2 
3 import java.io.IOException;
4 import java.io.Reader;
5 
6 /**
7  * An implementation of {@code Reader} that should serve as the
8  * underlying writer 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_ASimpleReader extends Reader {
13 
14     public static final int DEFAULT_BUFFER_SIZE = 32;
15 
16     public char[] 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 
Support_ASimpleReader()25     public Support_ASimpleReader() {
26         this("BEGIN Bla bla, some text...END");
27     }
28 
Support_ASimpleReader(boolean throwException)29     public Support_ASimpleReader(boolean throwException) {
30         this();
31         throwExceptionOnNextUse = throwException;
32     }
33 
Support_ASimpleReader(String input)34     public Support_ASimpleReader(String input) {
35         buf = input.toCharArray();
36         pos = 0;
37         len = buf.length;
38     }
39 
40     @Override
close()41     public void close() throws IOException {
42         if (throwExceptionOnNextUse) {
43             throw new IOException("Exception thrown for testing purpose.");
44         }
45     }
46 
47     @Override
ready()48     public boolean ready() throws IOException {
49         if (throwExceptionOnNextUse) {
50             throw new IOException("Exception thrown for testing purpose.");
51         }
52         return len > pos;
53     }
54 
55     @Override
read(char[] dest, int offset, int count)56     public int read(char[] dest, int offset, int count) throws IOException {
57         if (throwExceptionOnNextUse) {
58             throw new IOException("Exception thrown for testing purpose.");
59         }
60         int available = len - pos;
61         if (available > 0) {
62             int readable = (available < count ? available : count);
63             System.arraycopy(buf, pos, dest, offset, readable);
64             pos += readable;
65             return readable;
66         } else {
67             return -1;
68         }
69     }
70 }
71