1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.CharArrayReader;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FilterReader;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PushbackReader;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Reader;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.StringReader;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class PushbackReaderTest extends junit.framework.TestCase {
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	PushbackReader pbr;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	String pbString = "Hello World";
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#PushbackReader(java.io.Reader)
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_io_Reader() {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.io.PushbackReader(java.io.Reader)
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.close();
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr = new PushbackReader(new StringReader(pbString));
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char buf[] = new char[5];
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(buf, 0, 5);
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(buf);
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// Correct
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail("Created reader with buffer larger than 1");
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#PushbackReader(java.io.Reader, int)
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_io_ReaderI() {
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.io.PushbackReader(java.io.Reader, int)
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Used to test", true);
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#close()
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_close() {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.PushbackReader.close()
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.close();
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read();
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (Exception e) {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail("Failed to throw exception reading from closed reader");
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#mark(int)
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_markI() {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.mark(3);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// correct
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail("mark failed to throw expected IOException");
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#markSupported()
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_markSupported() {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.io.PushbackReader.markSupported()
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("markSupported returned true", !pbr.markSupported());
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#read()
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_read() {
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.io.PushbackReader.read()
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char c;
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read();
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			c = (char) pbr.read();
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to read char: " + c, c == pbString.charAt(1));
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Reader reader = new PushbackReader(new CharArrayReader(
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new char[] { '\u8765' }));
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Wrong double byte character", reader.read() == '\u8765');
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during read test : " + e.getMessage());
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#read(char[], int, int)
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_read$CII() {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.io.PushbackReader.read(char [], int, int)
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char[] c = new char[5];
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(c, 0, 5);
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to read chars", new String(c).equals(pbString
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.substring(0, 5)));
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during read test : " + e.getMessage());
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1271ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes    public void test_read_$CII_Exception() throws IOException {
1281ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        pbr = new PushbackReader(new StringReader(pbString), 10);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1301ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        char[] charArray = new char[10];
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1321ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1331ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(null, 1, 0);
1341ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1351ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (NullPointerException expected) {
1361ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
1371ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1381ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(charArray, 0, -1);
1391ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1401ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1411ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
1421ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1431ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(charArray, -1, 0);
1441ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1451ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1461ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1481ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        pbr.read(charArray, 0, 0);
1491ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        pbr.read(charArray, 0, charArray.length);
1501ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        pbr.read(charArray, charArray.length, 0);
1511ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
1521ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1531ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(charArray, charArray.length + 1, 0);
1541ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1551ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1561ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
1571ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1581ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(charArray, 0, charArray.length + 1);
1591ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1601ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1611ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
1621ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
1631ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        // Can't read from a closed PushbackReader.
1641ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        pbr.close();
1651ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        try {
1661ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            pbr.read(charArray, 0, 1);
1671ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes            fail();
1681ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        } catch (IOException expected) {
1691ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes        }
1701ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes    }
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#ready()
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ready() {
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.io.PushbackReader.ready()
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char[] c = new char[11];
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (c.length > 0)
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				;// use c to avoid warning msg
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Ready stream returned false to ready()", pbr.ready());
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during ready() test : " + e.getMessage());
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#reset()
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_reset() {
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.reset();
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// correct
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		fail("mark failed to throw expected IOException");
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(char[])
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unread$C() {
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.PushbackReader.unread(char [])
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char[] c = new char[5];
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(c, 0, 5);
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(c);
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(c, 0, 5);
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to unread chars", new String(c).equals(pbString
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.substring(0, 5)));
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during read test : " + e.getMessage());
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#skip(long)
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_skip$J() {
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		char chars[] = new char[] { 'h', 'e', 'l', 'l', 'o' };
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		for (int i = 0; i < 3; i++) {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Reader reader, reader2;
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			switch (i) {
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			case 0:
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader = new StringReader(new String(chars));
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader2 = new StringReader(new String(chars));
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				break;
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			case 1:
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader = new FilterReader(new StringReader(new String(chars))) {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				};
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader2 = new FilterReader(new StringReader(new String(chars))) {
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				};
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				break;
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			default:
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader = new CharArrayReader(chars);
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				reader2 = new CharArrayReader(chars);
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			PushbackReader pReader = new PushbackReader(reader, 2);
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			PushbackReader pReader2 = new PushbackReader(reader2, 2);
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			boolean skipped = false;
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			long numSkipped = 0;
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped = pReader2.skip(3);
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				pReader2.unread('a');
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				pReader2.unread('b');
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader2.skip(10);
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals("Did not skip correct number of characters",
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						7, numSkipped);
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped = 0;
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(2);
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				pReader.unread('i');
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(2);
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(0);
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				skipped = true;
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(-1);
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("Failed to throw "
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						+ new IllegalArgumentException().getClass().getName());
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (IllegalArgumentException e) {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertTrue("Failed to skip characters" + e, skipped);
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (IOException e) {
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("Failed to skip characters" + e);
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(1);
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(1);
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				numSkipped += pReader.skip(1);
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals("Failed to skip all characters", 6, numSkipped);
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				long nextSkipped = pReader.skip(1);
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertEquals("skipped empty reader", 0, nextSkipped);
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (IOException e) {
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				fail("Failed to skip more characters" + e);
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(char[], int, int)
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unread$CII() {
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.PushbackReader.unread(char [], int, int)
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char[] c = new char[5];
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(c, 0, 5);
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(c, 0, 2);
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read(c, 0, 5);
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to unread chars", new String(c).equals(pbString
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.substring(0, 2)
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					+ pbString.substring(5, 8)));
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during unread test : " + e.getMessage());
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(char[], int, int)
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unread_$CII_NullPointerException() throws IOException {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		//a pushback reader with one character buffer
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		pbr = new PushbackReader(new StringReader(pbString));
3061ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(null, 0, 1);
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw NullPointerException");
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NullPointerException e) {
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
3141ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(char[], int, int)
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unread_$CII_Exception_InsufficientBuffer() throws IOException {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		//a pushback reader with one character buffer
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		pbr = new PushbackReader(new StringReader(pbString));
3211ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		//if count > buffer's size , should throw IOException
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(new char[pbString.length()], 0, 2);
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw IOException");
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
3301ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(char[], int, int)
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unread_$CII_ArrayIndexOutOfBoundsException() throws IOException {
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		//a pushback reader with one character buffer
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		pbr = new PushbackReader(new StringReader(pbString));
3371ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(new char[pbString.length()], -1 , -1);
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should throw ArrayIndexOutOfBoundsException");
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (ArrayIndexOutOfBoundsException e) {
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// expected
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
3451ed0e1c2905c90938f2aad58824a5464a259448dElliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.PushbackReader#unread(int)
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_unreadI() {
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.PushbackReader.unread(int)
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			int c;
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.read();
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			c = pbr.read();
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.unread(c);
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Failed to unread char", pbr.read() == c);
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException during unread test : " + e.getMessage());
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Sets up the fixture, for example, open a network connection. This method
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * is called before a test is executed.
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() {
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		pbr = new PushbackReader(new StringReader(pbString), 10);
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * Tears down the fixture, for example, close a network connection. This
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * method is called after a test is executed.
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() {
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			pbr.close();
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
382