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.IOException;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.StringReader;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class StringReaderTest extends junit.framework.TestCase {
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    String testString = "This is a test string";
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    StringReader sr;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#StringReader(java.lang.String)
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_lang_String() {
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method java.io.StringReader(java.lang.String)
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Used in tests", true);
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#close()
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws Exception {
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.StringReader.close()
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            sr = new StringReader(testString);
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            sr.close();
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            char[] buf = new char[10];
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            sr.read(buf, 0, 2);
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Close failed");
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (java.io.IOException e) {
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            return;
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#mark(int)
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markI() throws Exception {
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.StringReader.mark(int)
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.skip(5);
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.mark(0);
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.skip(5);
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.reset();
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.read(buf, 0, 2);
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to return to mark", new String(buf, 0, 2)
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString.substring(5, 7)));
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#markSupported()
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markSupported() {
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method boolean java.io.StringReader.markSupported()
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("markSupported returned false", sr.markSupported());
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#read()
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read() throws Exception {
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.io.StringReader.read()
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int r = sr.read();
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to read char", 'T', r);
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(new String(new char[] { '\u8765' }));
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Wrong double byte char", sr.read() == '\u8765');
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#read(char[], int, int)
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$CII() throws Exception {
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.io.StringReader.read(char [], int, int)
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[testString.length()];
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int r = sr.read(buf, 0, testString.length());
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to read chars", r == testString.length());
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Read chars incorrectly", new String(buf, 0, r)
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString));
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#ready()
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ready() throws Exception {
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method boolean java.io.StringReader.ready()
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Steam not ready", sr.ready());
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.close();
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int r = 0;
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            sr.ready();
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            r = 1;
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Expected IOException not thrown in read()", 1, r);
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#reset()
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_reset() throws Exception {
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method void java.io.StringReader.reset()
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.skip(5);
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.mark(0);
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.skip(5);
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.reset();
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.read(buf, 0, 2);
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to reset properly", new String(buf, 0, 2)
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString.substring(5, 7)));
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.StringReader#skip(long)
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_skipJ() throws Exception {
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method long java.io.StringReader.skip(long)
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr = new StringReader(testString);
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.skip(5);
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[10];
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        sr.read(buf, 0, 2);
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to skip properly", new String(buf, 0, 2)
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString.substring(5, 7)));
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    // Regression test for HARMONY-5077
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static boolean finish = false;
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_synchronization() {
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String anything = "Hello world";
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final StringReader sr = new StringReader(anything);
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Thread other = new Thread(new Runnable() {
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public void run() {
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                sr.close();
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                finish = true;
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            ;
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        });
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        synchronized (anything) {
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            other.start();
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            while (!finish) {
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Thread.yield();
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
173