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    }
33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
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