1990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/*
2990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Copyright (C) 2008 The Android Open Source Project
3990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
4990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * you may not use this file except in compliance with the License.
6990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * You may obtain a copy of the License at
7990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
8990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson *
10990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Unless required by applicable law or agreed to in writing, software
11990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * See the License for the specific language governing permissions and
14990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * limitations under the License.
15990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
16990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
17990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpackage libcore.java.io;
18990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
19990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.BufferedReader;
20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.IOException;
21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.Reader;
22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.StringReader;
23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase;
24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson/**
26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson * Tests to verify that simple functionality works for BufferedReaders.
27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson */
28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidBufferedReaderTest extends TestCase {
29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testBufferedReader() throws Exception {
31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String str = "AbCdEfGhIjKlMnOpQrStUvWxYz";
32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringReader aa = new StringReader(str);
33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringReader ba = new StringReader(str);
34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringReader ca = new StringReader(str);
35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringReader da = new StringReader(str);
36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        BufferedReader a = new BufferedReader(aa, 5);
38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals(str, read(a));
40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
41990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.close();
42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        BufferedReader b = new BufferedReader(ba, 15);
45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("AbCdEfGhIj", read(b, 10));
47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            b.close();
49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        BufferedReader c = new BufferedReader(ca);
52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("bdfhjlnprtvxz", skipRead(c));
54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            c.close();
56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        BufferedReader d = new BufferedReader(da);
59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            assertEquals("AbCdEfGdEfGhIjKlMnOpQrStUvWxYz", markRead(d, 3, 4));
61990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            d.close();
63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String read(Reader a) throws IOException {
67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String read(Reader a, int x) throws IOException {
78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        char[] b = new char[x];
79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int len = a.read(b, 0, x);
80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        if (len < 0) {
81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            return "";
82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return new String(b, 0, len);
84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String skipRead(Reader a) throws IOException {
87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.skip(1);
91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
96990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
97990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
98990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String markRead(Reader a, int x, int y) throws IOException {
99990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int m = 0;
100990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
101990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
102990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
103990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            m++;
104990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
105990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (m == x)
106990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                a.mark((x + y));
107990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (m == (x + y))
108990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                a.reset();
109990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
110990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
111990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
112990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
113990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
114990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
115990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson}
116