blob: 9f66f443a8c851c6f51179302f8cff4a6cf99a47 [file] [log] [blame]
package tests.support;
import java.io.IOException;
import java.io.Writer;
/**
* An implementation of {@code OutputStream} 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_ASimpleWriter extends Writer {
public static final int DEFAULT_BUFFER_SIZE = 32;
public char[] buf;
public int pos;
public int size;
// Set to true when exception is wanted:
public boolean throwExceptionOnNextUse = false;
public Support_ASimpleWriter() {
this(DEFAULT_BUFFER_SIZE);
}
public Support_ASimpleWriter(boolean throwException) {
this(DEFAULT_BUFFER_SIZE);
throwExceptionOnNextUse = throwException;
}
public Support_ASimpleWriter(int bufferSize) {
buf = new char[bufferSize];
pos = 0;
size = bufferSize;
}
@Override
public void close() throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
}
@Override
public void flush() throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
}
@Override
public void write(char[] src, int offset, int count) throws IOException {
if (throwExceptionOnNextUse) {
throw new IOException("Exception thrown for testing purpose.");
}
if (offset < 0 || count < 0 || (offset + count) > buf.length) {
throw new IndexOutOfBoundsException();
}
try {
System.arraycopy(src, offset, buf, pos, count);
pos += count;
} catch (IndexOutOfBoundsException e) {
pos = size;
throw new IOException("Internal Buffer Overflow");
}
}
public byte[] toByteArray() {
byte[] toReturn = new byte[pos];
System.arraycopy(buf, 0, toReturn, 0, pos);
return toReturn;
}
public String toString() {
return new String(buf, 0, pos);
}
}