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.ByteArrayInputStream;
20990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.IOException;
21990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.InputStream;
22990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport java.io.PushbackInputStream;
23990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.Assert;
24990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonimport junit.framework.TestCase;
25990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
26990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilsonpublic class OldAndroidPushbackInputStreamTest extends TestCase {
27990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
28990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public void testPushbackInputStream() throws Exception {
29990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        String str = "AbCdEfGhIjKlM\nOpQrStUvWxYz";
30990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        ByteArrayInputStream aa = new ByteArrayInputStream(str.getBytes());
31990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        ByteArrayInputStream ba = new ByteArrayInputStream(str.getBytes());
32990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        ByteArrayInputStream ca = new ByteArrayInputStream(str.getBytes());
33990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
34990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        PushbackInputStream a = new PushbackInputStream(aa, 7);
35990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
36990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.unread("push".getBytes());
37990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            Assert.assertEquals("pushAbCdEfGhIjKlM\nOpQrStUvWxYz", read(a));
38990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
39990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.close();
40990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
41990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
42990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        PushbackInputStream b = new PushbackInputStream(ba, 9);
43990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
44990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            b.unread('X');
45990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            Assert.assertEquals("XAbCdEfGhI", read(b, 10));
46990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
47990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            b.close();
48990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
49990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
50990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        PushbackInputStream c = new PushbackInputStream(ca);
51990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        try {
52990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            Assert.assertEquals("bdfhjl\nprtvxz", skipRead(c));
53990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } finally {
54990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            c.close();
55990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
56990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
57990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
58990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String read(InputStream a) throws IOException {
59990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
60990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
61990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
62990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
63990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
64990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
65990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
66990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
67990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
68990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
69990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String read(InputStream a, int x) throws IOException {
70990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        byte[] b = new byte[x];
71990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int len = a.read(b, 0, x);
72990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        if (len < 0) {
73990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            return "";
74990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        }
75990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return new String(b, 0, len);
76990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
77990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
78990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String skipRead(InputStream a) throws IOException {
79990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
80990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
81990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
82990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            a.skip(1);
83990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
84990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
85990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
86990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
87990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
88990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
89990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
90990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    public static String markRead(InputStream a, int x, int y) throws IOException {
91990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int m = 0;
92990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        int r;
93990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        StringBuilder builder = new StringBuilder();
94990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        do {
95990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            m++;
96990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            r = a.read();
97990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (m == x)
98990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                a.mark((x + y));
99990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (m == (x + y))
100990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                a.reset();
101990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson
102990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson            if (r != -1)
103990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson                builder.append((char) r);
104990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        } while (r != -1);
105990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson        return builder.toString();
106990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson    }
107990640f1775dc6f429a5f8b9fc6cab6b4220c03aJesse Wilson}
108