OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / support / src / test / java / tests / support / Support_ASimpleWriter.java
1 package tests.support;
2
3 import java.io.IOException;
4 import java.io.Writer;
5
6 /**
7  * An implementation of {@code OutputStream} that should serve as the
8  * underlying stream for classes to be tested.
9  * In particular this implementation allows to have IOExecptions thrown on demand.
10  * For simplicity of use and understanding all fields are public.
11  */
12 public class Support_ASimpleWriter extends Writer {
13
14     public static final int DEFAULT_BUFFER_SIZE = 32;
15
16     public char[] buf;
17
18     public int pos;
19
20     public int size;
21
22     // Set to true when exception is wanted:
23     public boolean throwExceptionOnNextUse = false;
24
25     public Support_ASimpleWriter() {
26         this(DEFAULT_BUFFER_SIZE);
27     }
28
29     public Support_ASimpleWriter(boolean throwException) {
30         this(DEFAULT_BUFFER_SIZE);
31         throwExceptionOnNextUse = throwException;
32     }
33
34     public Support_ASimpleWriter(int bufferSize) {
35         buf = new char[bufferSize];
36         pos = 0;
37         size = bufferSize;
38     }
39
40     @Override
41     public void close() throws IOException {
42         if (throwExceptionOnNextUse) {
43             throw new IOException("Exception thrown for testing purpose.");
44         }
45     }
46
47     @Override
48     public void flush() throws IOException {
49         if (throwExceptionOnNextUse) {
50             throw new IOException("Exception thrown for testing purpose.");
51         }
52     }
53
54     @Override
55     public void write(char[] src, int offset, int count) throws IOException {
56         if (throwExceptionOnNextUse) {
57             throw new IOException("Exception thrown for testing purpose.");
58         }
59         if (offset < 0 || count < 0 || (offset + count) > buf.length) {
60             throw new IndexOutOfBoundsException();
61         }
62         try {
63             System.arraycopy(src, offset, buf, pos, count);
64             pos += count;
65         } catch (IndexOutOfBoundsException e) {
66             pos = size;
67             throw new IOException("Internal Buffer Overflow");
68         }
69     }
70
71     public byte[] toByteArray() {
72         byte[] toReturn = new byte[pos];
73         System.arraycopy(buf, 0, toReturn, 0, pos);
74         return toReturn;
75     }
76
77     public String toString() {
78         return new String(buf, 0, pos);
79     }
80 }