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.ByteArrayInputStream;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileReader;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileWriter;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStreamReader;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStreamWriter;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.UnsupportedEncodingException;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.Charset;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.charset.CharsetEncoder;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class OutputStreamWriterTest extends TestCase {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int UPPER = 0xd800;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final int BUFFER_SIZE = 10000;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private ByteArrayOutputStream out;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private OutputStreamWriter writer;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static private final String source = "This is a test message with Unicode character. \u4e2d\u56fd is China's name in Chinese";
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static private final String[] MINIMAL_CHARSETS = new String[] { "US-ASCII",
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            "ISO-8859-1", "UTF-16BE", "UTF-16LE", "UTF-16", "UTF-8" };
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    OutputStreamWriter osw;
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    InputStreamReader isr;
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private ByteArrayOutputStream fos;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    String testString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_java_io_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\n";
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @see TestCase#setUp()
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.setUp();
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        out = new ByteArrayOutputStream();
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer = new OutputStreamWriter(out, "utf-8");
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fos = new ByteArrayOutputStream();
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw = new OutputStreamWriter(fos);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @see TestCase#tearDown()
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() throws Exception {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.close();
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (isr != null) {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                isr.close();
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            osw.close();
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Ignored
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.tearDown();
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testClose() throws Exception {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.close();
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.flush();
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFlush() throws Exception {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(source);
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String result = out.toString("utf-8");
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(source, result);
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void write(char[], int, int)
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWritecharArrayintint() throws IOException {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] chars = source.toCharArray();
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Throws IndexOutOfBoundsException if offset is negative
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((char[]) null, -1, -1);
1172a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
1182a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException exception) {
1192a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException exception) {
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // throws NullPointerException though count is negative
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((char[]) null, 1, -1);
1252a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
1262a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException exception) {
1272a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException exception) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((char[]) null, 1, 1);
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(new char[0], 0, 1);
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(chars, -1, 1);
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(chars, 0, -1);
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(chars, 1, chars.length);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(chars, 1, 2);
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("hi", out.toString("utf-8"));
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(chars, 0, chars.length);
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("hi" + source, out.toString("utf-8"));
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.close();
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // After the stream is closed, should throw IOException first
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((char[]) null, -1, -1);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IOException");
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void write(int)
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWriteint() throws IOException {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(1);
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String str = new String(out.toByteArray(), "utf-8");
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u0001", str);
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(2);
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        str = new String(out.toByteArray(), "utf-8");
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u0001\u0002", str);
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(-1);
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        str = new String(out.toByteArray(), "utf-8");
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u0001\u0002\uffff", str);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(0xfedcb);
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        str = new String(out.toByteArray(), "utf-8");
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u0001\u0002\uffff\uedcb", str);
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.close();
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // After the stream is closed, should throw IOException
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(1);
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IOException");
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void write(String, int, int)
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testWriteStringintint() throws IOException {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((String) null, 1, 1);
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("", 0, 1);
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (StringIndexOutOfBoundsException e) {
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("abc", -1, 1);
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (StringIndexOutOfBoundsException e) {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("abc", 0, -1);
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("abc", 1, 3);
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (StringIndexOutOfBoundsException e) {
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((String) null, -1, -1);
2482a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
2492a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException expected) {
2502a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException expected) {
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Throws NullPointerException before StringIndexOutOfBoundsException
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((String) null, -1, 0);
2562a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
2572a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException expected) {
2582a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException expected) {
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write("abc", 1, 2);
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("bc", out.toString("utf-8"));
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(source, 0, source.length());
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.flush();
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("bc" + source, out.toString("utf-8"));
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.close();
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Throws IndexOutOfBoundsException first if count is negative
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((String) null, 0, -1);
2722a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
2732a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException expected) {
2742a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException expected) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write((String) null, -1, 0);
2792a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes            fail();
2802a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (NullPointerException expected) {
2812a68e06b23ceb5b401d5bc784e6882e71c662caeElliott Hughes        } catch (IndexOutOfBoundsException expected) {
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("abc", -1, 0);
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw StringIndexOutOfBoundsException");
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (StringIndexOutOfBoundsException e) {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Throws IOException
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write("abc", 0, 1);
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IOException");
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void OutputStreamWriter(OutputStream)
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testOutputStreamWriterOutputStream() throws IOException {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(null);
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OutputStreamWriter writer2 = new OutputStreamWriter(out);
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer2.close();
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void OutputStreamWriter(OutputStream, String)
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testOutputStreamWriterOutputStreamString() throws IOException {
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(null, "utf-8");
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(out, "");
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(out, "badname");
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(out, (String) null);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OutputStreamWriter writer2 = new OutputStreamWriter(out, "ascii");
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(Charset.forName("ascii"), Charset.forName(writer2
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getEncoding()));
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer2.close();
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void OutputStreamWriter(OutputStream)
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testOutputStreamWriterOutputStreamCharset() throws IOException {
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Charset cs = Charset.forName("ascii");
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(null, cs);
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(out, (Charset) null);
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OutputStreamWriter writer2 = new OutputStreamWriter(out, cs);
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(cs, Charset.forName(writer2.getEncoding()));
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer2.close();
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for void OutputStreamWriter(OutputStream, String)
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testOutputStreamWriterOutputStreamCharsetEncoder()
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws IOException {
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Charset cs = Charset.forName("ascii");
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        CharsetEncoder enc = cs.newEncoder();
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(null, enc);
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(out, (CharsetEncoder) null);
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail();
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OutputStreamWriter writer2 = new OutputStreamWriter(out, enc);
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(cs, Charset.forName(writer2.getEncoding()));
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer2.close();
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetEncoding() {
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Charset cs = Charset.forName("utf-8");
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(cs, Charset.forName(writer.getEncoding()));
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHandleEarlyEOFChar_1() throws IOException {
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String str = "All work and no play makes Jack a dull boy\n"; //$NON-NLS-1$
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int NUMBER = 2048;
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int j = 0;
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int len = str.length() * NUMBER;
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] strChars = new char[len];
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < NUMBER; ++i) {
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int k = 0; k < str.length(); ++k) {
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                strChars[j++] = str.charAt(k);
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File f = File.createTempFile("one", "by_one");
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        f.deleteOnExit();
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileWriter fw = new FileWriter(f);
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fw.write(strChars);
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fw.close();
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(f);
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStreamReader in = new InputStreamReader(fis);
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int offset = 0; offset < strChars.length; ++offset) {
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int b = in.read();
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse("Early EOF at offset", -1 == b);
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHandleEarlyEOFChar_2() throws IOException {
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int capacity = 65536;
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] bytes = new byte[capacity];
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] bs = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < bytes.length; i++) {
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bytes[i] = bs[i / 8192];
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String inputStr = new String(bytes);
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int len = inputStr.length();
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File f = File.createTempFile("FileWriterBugTest ", null); //$NON-NLS-1$
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        f.deleteOnExit();
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileWriter writer = new FileWriter(f);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.write(inputStr);
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.close();
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        long flen = f.length();
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileReader reader = new FileReader(f);
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] outChars = new char[capacity];
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int outCount = reader.read(outChars);
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String outStr = new String(outChars, 0, outCount);
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(len, flen);
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(inputStr, outStr);
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSingleCharIO() throws Exception {
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStreamReader isr = null;
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < MINIMAL_CHARSETS.length; ++i) {
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                out = new ByteArrayOutputStream();
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                writer = new OutputStreamWriter(out, MINIMAL_CHARSETS[i]);
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int upper = UPPER;
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                switch (i) {
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 0:
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    upper = 128;
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 1:
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    upper = 256;
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int c = 0; c < upper; ++c) {
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    writer.write(c);
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                writer.flush();
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] result = out.toByteArray();
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                isr = new InputStreamReader(new ByteArrayInputStream(result),
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        MINIMAL_CHARSETS[i]);
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int expected = 0; expected < upper; ++expected) {
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertEquals("Error when reading bytes in "
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + MINIMAL_CHARSETS[i], expected, isr.read());
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } finally {
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    isr.close();
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    writer.close();
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testBlockIO() throws Exception {
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStreamReader isr = null;
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] largeBuffer = new char[BUFFER_SIZE];
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < MINIMAL_CHARSETS.length; ++i) {
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                out = new ByteArrayOutputStream();
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                writer = new OutputStreamWriter(out, MINIMAL_CHARSETS[i]);
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int upper = UPPER;
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                switch (i) {
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 0:
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    upper = 128;
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 1:
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    upper = 256;
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int m = 0;
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int c = 0; c < upper; ++c) {
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    largeBuffer[m++] = (char) c;
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (m == BUFFER_SIZE) {
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        writer.write(largeBuffer);
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        m = 0;
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                writer.write(largeBuffer, 0, m);
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                writer.flush();
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] result = out.toByteArray();
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                isr = new InputStreamReader(new ByteArrayInputStream(result),
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        MINIMAL_CHARSETS[i]);
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                int expected = 0, read = 0, j = 0;
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                while (expected < upper) {
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (j == read) {
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        read = isr.read(largeBuffer);
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        j = 0;
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertEquals("Error when reading bytes in "
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + MINIMAL_CHARSETS[i], expected++, largeBuffer[j++]);
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } finally {
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    isr.close();
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    writer.close();
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream)
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_io_OutputStream() {
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Used in tests", true);
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream,
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String)
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_io_OutputStreamLjava_lang_String()
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws UnsupportedEncodingException {
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw = new OutputStreamWriter(fos, "8859_1");
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            osw = new OutputStreamWriter(fos, "Bogus");
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Failed to throw Unsupported Encoding exception");
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#close()
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_close() throws IOException {
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.close();
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            osw.write(testString, 0, testString.length());
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Chars written after close");
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayOutputStream bout = new ByteArrayOutputStream();
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            OutputStreamWriter writer = new OutputStreamWriter(bout,
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "ISO2022JP");
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(new char[] { 'a' });
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.close();
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // the default is ASCII, there should not be any mode changes
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String converted = new String(bout.toByteArray(), "ISO8859_1");
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("invalid conversion 1: " + converted, converted
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals("a"));
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bout.reset();
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(bout, "ISO2022JP");
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(new char[] { '\u3048' });
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.flush();
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // the byte sequence should not switch to ASCII mode until the
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // stream is closed
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            converted = new String(bout.toByteArray(), "ISO8859_1");
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("invalid conversion 2: " + converted, converted
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals("\u001b$B$("));
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.close();
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            converted = new String(bout.toByteArray(), "ISO8859_1");
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("invalid conversion 3: " + converted, converted
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals("\u001b$B$(\u001b(B"));
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            bout.reset();
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer = new OutputStreamWriter(bout, "ISO2022JP");
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(new char[] { '\u3048' });
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.write(new char[] { '\u3048' });
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            writer.close();
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // there should not be a mode switch between writes
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("invalid conversion 4", "\u001b$B$($(\u001b(B",
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    new String(bout.toByteArray(), "ISO8859_1"));
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Can't test missing converter
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println(e);
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#flush()
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_flush() throws IOException {
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] buf = new char[testString.length()];
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.write(testString, 0, testString.length());
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.flush();
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        openInputStream();
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        isr.read(buf, 0, buf.length);
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Chars not flushed", new String(buf, 0, buf.length)
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(testString));
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#getEncoding()
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getEncoding() throws IOException {
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            osw = new OutputStreamWriter(fos, "8859_1");
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Returned incorrect encoding", "8859_1", osw
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getEncoding());
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        OutputStreamWriter out = new OutputStreamWriter(
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ByteArrayOutputStream(), "UTF-16BE");
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        out.close();
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String result = out.getEncoding();
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(result);
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        out = null;
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            out = new OutputStreamWriter(new ByteArrayOutputStream(),
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "UTF-16BE");
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (UnsupportedEncodingException e) {
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ok
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        result = out.getEncoding();
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("UnicodeBigUnmarked", result);
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#write(char[], int, int)
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_write$CII() throws IOException {
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] buf = new char[testString.length()];
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.write(testString, 0, testString.length());
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.close();
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        openInputStream();
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        isr.read(buf, 0, buf.length);
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Incorrect chars returned", new String(buf, 0, buf.length)
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(testString));
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#write(int)
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_writeI() throws IOException {
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.write('T');
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.close();
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        openInputStream();
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int c = isr.read();
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Incorrect char returned", 'T', (char) c);
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.OutputStreamWriter#write(java.lang.String, int, int)
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_writeLjava_lang_StringII() throws IOException {
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        char[] buf = new char[testString.length()];
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.write(testString, 0, testString.length());
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osw.close();
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        openInputStream();
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        isr.read(buf);
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Incorrect chars returned", new String(buf, 0, buf.length)
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .equals(testString));
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void openInputStream() {
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        isr = new InputStreamReader(new ByteArrayInputStream(fos.toByteArray()));
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
702