1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.support; 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An implementation of {@code OutputStream} that should serve as the 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * underlying stream for classes to be tested. 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * In particular this implementation allows to have IOExecptions thrown on demand. 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For simplicity of use and understanding all fields are public. 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Support_ASimpleOutputStream extends OutputStream { 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final int DEFAULT_BUFFER_SIZE = 32; 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] buf; 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int pos; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Set to true when exception is wanted: 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean throwExceptionOnNextUse = false; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_ASimpleOutputStream() { 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(DEFAULT_BUFFER_SIZE); 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_ASimpleOutputStream(boolean throwException) { 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(DEFAULT_BUFFER_SIZE); 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throwExceptionOnNextUse = throwException; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_ASimpleOutputStream(int bufferSize) { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf = new byte[bufferSize]; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = 0; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project size = bufferSize; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void close() throws IOException { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (throwExceptionOnNextUse) { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("Exception thrown for testing purpose."); 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void flush() throws IOException { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (throwExceptionOnNextUse) { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("Exception thrown for testing purpose."); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// @Override 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// public void write(byte buffer[]) throws IOException { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// if (throwExceptionOnNextUse) { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// throw new IOException("Exception thrown for testing purposes."); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// for (int i = 0; i < buffer.length; i++) { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// write(buffer[i]); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// @Override 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// public void write(byte buffer[], int offset, int count) throws IOException { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// if (throwExceptionOnNextUse) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// throw new IOException("Exception thrown for testing purposes."); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// if (offset < 0 || count < 0 || (offset + count) > buffer.length) { 70f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes// throw new IndexOutOfBoundsException(); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// for (int i = offset; i < offset + count; i++) { 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// write(buffer[i]); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void write(int oneByte) throws IOException { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (throwExceptionOnNextUse) { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("Exception thrown for testing purpose."); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pos < size) { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf[pos] = (byte)(oneByte & 255); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos++; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("Internal buffer overflow."); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] toByteArray() { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] toReturn = new byte[pos]; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(buf, 0, toReturn, 0, pos); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return toReturn; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new String(buf, 0, pos); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 100