Support_ASimpleReader.java revision adc854b798c1cfe3bfd4c27d68d5cee38ca617da
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.Reader; 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An implementation of {@code Reader} that should serve as the 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * underlying writer 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_ASimpleReader extends Reader { 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 char[] 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 len; 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_ASimpleReader() { 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this("BEGIN Bla bla, some text...END"); 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_ASimpleReader(boolean throwException) { 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(); 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throwExceptionOnNextUse = throwException; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_ASimpleReader(String input) { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf = input.toCharArray(); 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = 0; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project len = buf.length; 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 } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean ready() 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 return len > pos; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int read(char[] dest, int offset, int count) throws IOException { 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (throwExceptionOnNextUse) { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("Exception thrown for testing purpose."); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int available = len - pos; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (available > 0) { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int readable = (available < count ? available : count); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(buf, pos, dest, offset, readable); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos += readable; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return readable; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 71