blob: 2bcb2ff9b83543a22f469196e8f92fdfdd15e842 [file] [log] [blame]
package tests.support;
import java.io.IOException;
import java.io.Reader;
/**
* An implementation of {@code Reader} that should serve as the
* underlying writer 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_ASimpleReader extends Reader {
public static final int DEFAULT_BUFFER_SIZE = 32;
public char[] buf;
public int pos;
public int len;
// Set to true when exception is wanted:
public boolean throwExceptionOnNextUse = false;
public Support_ASimpleReader() {
this("BEGIN Bla bla, some text...END");
}
public Support_ASimpleReader(boolean throwException) {
this();
throwExceptionOnNextUse = throwException;
}
public Support_ASimpleReader(String input) {
buf = input.toCharArray();
pos = 0;
len = buf.length;
}
@Override
public void close() throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
}
@Override
public boolean ready() throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
return len > pos;
}
@Override
public int read(char[] dest, int offset, int count) throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
int available = len - pos;
if (available > 0) {
int readable = (available < count ? available : count);
System.arraycopy(buf, pos, dest, offset, readable);
pos += readable;
return readable;
} else {
return -1;
}
}
}