1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.io;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.CharArrayReader;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FilterReader;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.PushbackReader;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.Reader;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.StringReader;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class PushbackReaderTest extends junit.framework.TestCase {
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    PushbackReader pbr;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    String pbString = "Hello World";
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#PushbackReader(java.io.Reader)
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_Reader() {
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PushbackReader(java.io.Reader)
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.close();
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr = new PushbackReader(new StringReader(pbString));
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char buf[] = new char[5];
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(buf, 0, 5);
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(buf);
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Correct
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fail("Created reader with buffer larger than 1");
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#PushbackReader(java.io.Reader, int)
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_ReaderI() {
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.PushbackReader(java.io.Reader, int)
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Used to test", true);
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#close()
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() {
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PushbackReader.close()
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.close();
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read();
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception e) {
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fail("Failed to throw exception reading from closed reader");
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#mark(int)
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markI() {
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.mark(3);
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // correct
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fail("mark failed to throw expected IOException");
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#markSupported()
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markSupported() {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method boolean java.io.PushbackReader.markSupported()
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("markSupported returned true", !pbr.markSupported());
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#read()
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read() {
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.io.PushbackReader.read()
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char c;
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read();
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            c = (char) pbr.read();
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to read char: " + c, c == pbString.charAt(1));
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Reader reader = new PushbackReader(new CharArrayReader(
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    new char[] { '\u8765' }));
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Wrong double byte character", reader.read() == '\u8765');
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during read test : " + e.getMessage());
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#read(char[], int, int)
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII() {
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.io.PushbackReader.read(char [], int, int)
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] c = new char[5];
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(c, 0, 5);
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to read chars", new String(c).equals(pbString
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .substring(0, 5)));
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during read test : " + e.getMessage());
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read_$CII_Exception() throws IOException {
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr = new PushbackReader(new StringReader(pbString), 10);
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] charArray = new char[10];
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(null, 1, 0);
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(charArray, 0, -1);
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(charArray, -1, 0);
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr.read(charArray, 0, 0);
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr.read(charArray, 0, charArray.length);
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr.read(charArray, charArray.length, 0);
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(charArray, charArray.length + 1, 0);
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(charArray, 0, charArray.length + 1);
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Can't read from a closed PushbackReader.
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr.close();
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(charArray, 0, 1);
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException expected) {
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#ready()
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ready() {
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method boolean java.io.PushbackReader.ready()
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] c = new char[11];
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (c.length > 0)
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                ;// use c to avoid warning msg
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Ready stream returned false to ready()", pbr.ready());
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during ready() test : " + e.getMessage());
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#reset()
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_reset() {
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.reset();
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // correct
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fail("mark failed to throw expected IOException");
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(char[])
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unread$C() {
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PushbackReader.unread(char [])
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] c = new char[5];
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(c, 0, 5);
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(c);
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(c, 0, 5);
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to unread chars", new String(c).equals(pbString
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .substring(0, 5)));
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during read test : " + e.getMessage());
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#skip(long)
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_skip$J() {
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char chars[] = new char[] { 'h', 'e', 'l', 'l', 'o' };
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < 3; i++) {
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Reader reader, reader2;
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            switch (i) {
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 0:
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader = new StringReader(new String(chars));
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader2 = new StringReader(new String(chars));
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    break;
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                case 1:
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader = new FilterReader(new StringReader(new String(chars))) {
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    };
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader2 = new FilterReader(new StringReader(new String(chars))) {
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    };
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    break;
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                default:
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader = new CharArrayReader(chars);
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    reader2 = new CharArrayReader(chars);
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            PushbackReader pReader = new PushbackReader(reader, 2);
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            PushbackReader pReader2 = new PushbackReader(reader2, 2);
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            boolean skipped = false;
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            long numSkipped = 0;
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped = pReader2.skip(3);
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pReader2.unread('a');
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pReader2.unread('b');
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader2.skip(10);
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Did not skip correct number of characters",
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        7, numSkipped);
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped = 0;
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(2);
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                pReader.unread('i');
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(2);
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(0);
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                skipped = true;
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(-1);
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("Failed to throw "
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + new IllegalArgumentException().getClass().getName());
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (IllegalArgumentException e) {
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertTrue("Failed to skip characters" + e, skipped);
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (IOException e) {
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("Failed to skip characters" + e);
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(1);
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(1);
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                numSkipped += pReader.skip(1);
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Failed to skip all characters", 6, numSkipped);
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                long nextSkipped = pReader.skip(1);
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("skipped empty reader", 0, nextSkipped);
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } catch (IOException e) {
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                fail("Failed to skip more characters" + e);
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(char[], int, int)
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unread$CII() {
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PushbackReader.unread(char [], int, int)
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] c = new char[5];
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(c, 0, 5);
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(c, 0, 2);
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read(c, 0, 5);
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to unread chars", new String(c).equals(pbString
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .substring(0, 2)
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + pbString.substring(5, 8)));
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during unread test : " + e.getMessage());
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(char[], int, int)
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unread_$CII_NullPointerException() throws IOException {
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        //a pushback reader with one character buffer
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr = new PushbackReader(new StringReader(pbString));
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(null, 0, 1);
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw NullPointerException");
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(char[], int, int)
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unread_$CII_Exception_InsufficientBuffer() throws IOException {
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        //a pushback reader with one character buffer
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr = new PushbackReader(new StringReader(pbString));
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        //if count > buffer's size , should throw IOException
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(new char[pbString.length()], 0, 2);
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(char[], int, int)
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unread_$CII_ArrayIndexOutOfBoundsException() throws IOException {
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        //a pushback reader with one character buffer
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr = new PushbackReader(new StringReader(pbString));
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(new char[pbString.length()], -1, -1);
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw ArrayIndexOutOfBoundsException");
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (ArrayIndexOutOfBoundsException e) {
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.PushbackReader#unread(int)
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_unreadI() {
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.PushbackReader.unread(int)
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int c;
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.read();
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            c = pbr.read();
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.unread(c);
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Failed to unread char", pbr.read() == c);
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("IOException during unread test : " + e.getMessage());
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Sets up the fixture, for example, open a network connection. This method
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * is called before a test is executed.
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void setUp() {
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        pbr = new PushbackReader(new StringReader(pbString), 10);
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() {
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pbr.close();
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
382