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.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.StringReader;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class StringReaderTest extends junit.framework.TestCase {
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	String testString = "This is a test string";
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	StringReader sr;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#StringReader(java.lang.String)
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ConstructorLjava_lang_String() {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method java.io.StringReader(java.lang.String)
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("Used in tests", true);
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#close()
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_close() throws Exception {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.StringReader.close()
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			sr = new StringReader(testString);
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			sr.close();
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			char[] buf = new char[10];
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			sr.read(buf, 0, 2);
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Close failed");
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (java.io.IOException e) {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#mark(int)
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_markI() throws Exception {
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.StringReader.mark(int)
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.skip(5);
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.mark(0);
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.skip(5);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.reset();
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                char[] buf = new char[10];
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.read(buf, 0, 2);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Failed to return to mark", new String(buf, 0, 2)
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .equals(testString.substring(5, 7)));
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#markSupported()
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_markSupported() {
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.io.StringReader.markSupported()
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		sr = new StringReader(testString);
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue("markSupported returned false", sr.markSupported());
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#read()
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_read() throws Exception {
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.io.StringReader.read()
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int r = sr.read();
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals("Failed to read char", 'T', r);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(new String(new char[] { '\u8765' }));
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Wrong double byte char", sr.read() == '\u8765');
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#read(char[], int, int)
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_read$CII() throws Exception {
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method int java.io.StringReader.read(char [], int, int)
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                char[] buf = new char[testString.length()];
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int r = sr.read(buf, 0, testString.length());
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Failed to read chars", r == testString.length());
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Read chars incorrectly", new String(buf, 0, r)
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .equals(testString));
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#ready()
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_ready() throws Exception {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean java.io.StringReader.ready()
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Steam not ready", sr.ready());
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.close();
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int r = 0;
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        sr.ready();
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException e) {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        r = 1;
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals("Expected IOException not thrown in read()", 1, r);
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#reset()
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_reset() throws Exception {
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method void java.io.StringReader.reset()
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.skip(5);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.mark(0);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.skip(5);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.reset();
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                char[] buf = new char[10];
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.read(buf, 0, 2);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Failed to reset properly", new String(buf, 0, 2)
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .equals(testString.substring(5, 7)));
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.StringReader#skip(long)
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_skipJ() throws Exception {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method long java.io.StringReader.skip(long)
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr = new StringReader(testString);
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.skip(5);
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                char[] buf = new char[10];
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.read(buf, 0, 2);
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Failed to skip properly", new String(buf, 0, 2)
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .equals(testString.substring(5, 7)));
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	// Regression test for HARMONY-5077
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static boolean finish = false;
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_synchronization() {
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String anything = "Hello world";
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final StringReader sr = new StringReader(anything);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread other = new Thread(new Runnable() {
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void run() {
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sr.close();
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                finish = true;
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        });
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        synchronized (anything) {
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            other.start();
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!finish) {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Thread.yield();
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
171