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
20418e036b21553e18575099e1ad7760e4a35c9770Narayan Kamathimport junit.framework.TestCase;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.File;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileInputStream;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileReader;
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.FileWriter;
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStreamReader;
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.OutputStreamWriter;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.UnsupportedEncodingException;
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.Charset;
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.CharsetEncoder;
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class OutputStreamWriterTest extends TestCase {
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static final int UPPER = 0xd800;
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private static final int BUFFER_SIZE = 10000;
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private ByteArrayOutputStream out;
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private OutputStreamWriter writer;
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static private final String source = "This is a test message with Unicode character. \u4e2d\u56fd is China's name in Chinese";
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static private final String[] MINIMAL_CHARSETS = new String[] { "US-ASCII",
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            "ISO-8859-1", "UTF-16BE", "UTF-16LE", "UTF-16", "UTF-8" };
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    OutputStreamWriter osw;
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    InputStreamReader isr;
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private ByteArrayOutputStream fos;
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    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";
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @see TestCase#setUp()
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void setUp() throws Exception {
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.setUp();
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = new ByteArrayOutputStream();
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer = new OutputStreamWriter(out, "utf-8");
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fos = new ByteArrayOutputStream();
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw = new OutputStreamWriter(fos);
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @see TestCase#tearDown()
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @Override
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() throws Exception {
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.close();
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (isr != null) {
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                isr.close();
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            osw.close();
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception e) {
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Ignored
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        super.tearDown();
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testClose() throws Exception {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.flush();
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testFlush() throws Exception {
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(source);
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String result = out.toString("utf-8");
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(source, result);
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void write(char[], int, int)
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testWritecharArrayintint() throws IOException {
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] chars = source.toCharArray();
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Throws IndexOutOfBoundsException if offset is negative
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((char[]) null, -1, -1);
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException exception) {
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException exception) {
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // throws NullPointerException though count is negative
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((char[]) null, 1, -1);
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException exception) {
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException exception) {
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((char[]) null, 1, 1);
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(new char[0], 0, 1);
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(chars, -1, 1);
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(chars, 0, -1);
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(chars, 1, chars.length);
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(chars, 1, 2);
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("hi", out.toString("utf-8"));
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(chars, 0, chars.length);
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("hi" + source, out.toString("utf-8"));
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // After the stream is closed, should throw IOException first
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((char[]) null, -1, -1);
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void write(int)
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testWriteint() throws IOException {
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(1);
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String str = new String(out.toByteArray(), "utf-8");
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("\u0001", str);
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(2);
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        str = new String(out.toByteArray(), "utf-8");
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("\u0001\u0002", str);
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(-1);
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        str = new String(out.toByteArray(), "utf-8");
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("\u0001\u0002\uffff", str);
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(0xfedcb);
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        str = new String(out.toByteArray(), "utf-8");
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("\u0001\u0002\uffff\uedcb", str);
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // After the stream is closed, should throw IOException
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(1);
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void write(String, int, int)
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testWriteStringintint() throws IOException {
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((String) null, 1, 1);
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("", 0, 1);
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (StringIndexOutOfBoundsException e) {
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("abc", -1, 1);
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (StringIndexOutOfBoundsException e) {
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("abc", 0, -1);
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException e) {
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("abc", 1, 3);
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (StringIndexOutOfBoundsException e) {
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((String) null, -1, -1);
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Throws NullPointerException before StringIndexOutOfBoundsException
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((String) null, -1, 0);
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write("abc", 1, 2);
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("bc", out.toString("utf-8"));
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(source, 0, source.length());
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.flush();
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("bc" + source, out.toString("utf-8"));
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Throws IndexOutOfBoundsException first if count is negative
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((String) null, 0, -1);
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write((String) null, -1, 0);
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException expected) {
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IndexOutOfBoundsException expected) {
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("abc", -1, 0);
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw StringIndexOutOfBoundsException");
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (StringIndexOutOfBoundsException e) {
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Throws IOException
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write("abc", 0, 1);
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("should throw IOException");
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // expected
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void OutputStreamWriter(OutputStream)
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testOutputStreamWriterOutputStream() throws IOException {
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(null);
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        OutputStreamWriter writer2 = new OutputStreamWriter(out);
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer2.close();
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void OutputStreamWriter(OutputStream, String)
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testOutputStreamWriterOutputStreamString() throws IOException {
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(null, "utf-8");
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(out, "");
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(out, "badname");
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(out, (String) null);
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        OutputStreamWriter writer2 = new OutputStreamWriter(out, "ascii");
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Charset.forName("ascii"), Charset.forName(writer2
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .getEncoding()));
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer2.close();
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void OutputStreamWriter(OutputStream)
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testOutputStreamWriterOutputStreamCharset() throws IOException {
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Charset cs = Charset.forName("ascii");
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(null, cs);
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(out, (Charset) null);
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        OutputStreamWriter writer2 = new OutputStreamWriter(out, cs);
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(cs, Charset.forName(writer2.getEncoding()));
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer2.close();
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /*
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Class under test for void OutputStreamWriter(OutputStream, String)
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testOutputStreamWriterOutputStreamCharsetEncoder()
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            throws IOException {
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Charset cs = Charset.forName("ascii");
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        CharsetEncoder enc = cs.newEncoder();
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(null, enc);
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(out, (CharsetEncoder) null);
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail();
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        OutputStreamWriter writer2 = new OutputStreamWriter(out, enc);
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(cs, Charset.forName(writer2.getEncoding()));
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer2.close();
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testGetEncoding() {
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        Charset cs = Charset.forName("utf-8");
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(cs, Charset.forName(writer.getEncoding()));
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testHandleEarlyEOFChar_1() throws IOException {
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String str = "All work and no play makes Jack a dull boy\n"; //$NON-NLS-1$
400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int NUMBER = 2048;
401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int j = 0;
402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int len = str.length() * NUMBER;
403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] strChars = new char[len];
404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NUMBER; ++i) {
405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int k = 0; k < str.length(); ++k) {
406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                strChars[j++] = str.charAt(k);
407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        File f = File.createTempFile("one", "by_one");
411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        f.deleteOnExit();
412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileWriter fw = new FileWriter(f);
413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fw.write(strChars);
414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        fw.close();
415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileInputStream fis = new FileInputStream(f);
416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStreamReader in = new InputStreamReader(fis);
417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int offset = 0; offset < strChars.length; ++offset) {
418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            int b = in.read();
419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertFalse("Early EOF at offset", -1 == b);
420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testHandleEarlyEOFChar_2() throws IOException {
424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int capacity = 65536;
425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] bytes = new byte[capacity];
426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] bs = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < bytes.length; i++) {
428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            bytes[i] = bs[i / 8192];
429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String inputStr = new String(bytes);
431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int len = inputStr.length();
432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        File f = File.createTempFile("FileWriterBugTest ", null); //$NON-NLS-1$
433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        f.deleteOnExit();
434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileWriter writer = new FileWriter(f);
435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.write(inputStr);
436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        writer.close();
437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long flen = f.length();
438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        FileReader reader = new FileReader(f);
440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] outChars = new char[capacity];
441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int outCount = reader.read(outChars);
442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String outStr = new String(outChars, 0, outCount);
443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(len, flen);
445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(inputStr, outStr);
446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testSingleCharIO() throws Exception {
449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStreamReader isr = null;
450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < MINIMAL_CHARSETS.length; ++i) {
451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                out = new ByteArrayOutputStream();
453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writer = new OutputStreamWriter(out, MINIMAL_CHARSETS[i]);
454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                int upper = UPPER;
456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                switch (i) {
457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    case 0:
458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        upper = 128;
459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        break;
460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    case 1:
461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        upper = 256;
462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        break;
463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                for (int c = 0; c < upper; ++c) {
466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    writer.write(c);
467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writer.flush();
469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                byte[] result = out.toByteArray();
470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                isr = new InputStreamReader(new ByteArrayInputStream(result),
472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        MINIMAL_CHARSETS[i]);
473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                for (int expected = 0; expected < upper; ++expected) {
474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Error when reading bytes in "
475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + MINIMAL_CHARSETS[i], expected, isr.read());
476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } finally {
478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    isr.close();
480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (Exception e) {
481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    writer.close();
484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (Exception e) {
485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void testBlockIO() throws Exception {
491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStreamReader isr = null;
492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] largeBuffer = new char[BUFFER_SIZE];
493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < MINIMAL_CHARSETS.length; ++i) {
494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            try {
495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                out = new ByteArrayOutputStream();
496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writer = new OutputStreamWriter(out, MINIMAL_CHARSETS[i]);
497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                int upper = UPPER;
499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                switch (i) {
500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    case 0:
501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        upper = 128;
502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        break;
503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    case 1:
504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        upper = 256;
505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        break;
506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                int m = 0;
509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                for (int c = 0; c < upper; ++c) {
510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    largeBuffer[m++] = (char) c;
511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    if (m == BUFFER_SIZE) {
512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        writer.write(largeBuffer);
513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        m = 0;
514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writer.write(largeBuffer, 0, m);
517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                writer.flush();
518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                byte[] result = out.toByteArray();
519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                isr = new InputStreamReader(new ByteArrayInputStream(result),
521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        MINIMAL_CHARSETS[i]);
522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                int expected = 0, read = 0, j = 0;
523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                while (expected < upper) {
524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    if (j == read) {
525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        read = isr.read(largeBuffer);
526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        j = 0;
527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Error when reading bytes in "
529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + MINIMAL_CHARSETS[i], expected++, largeBuffer[j++]);
530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            } finally {
532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    isr.close();
534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (Exception e) {
535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                try {
537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    writer.close();
538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } catch (Exception e) {
539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream)
546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_OutputStream() {
548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Used in tests", true);
549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream,
553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     *java.lang.String)
554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ConstructorLjava_io_OutputStreamLjava_lang_String()
556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            throws UnsupportedEncodingException {
557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw = new OutputStreamWriter(fos, "8859_1");
558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            osw = new OutputStreamWriter(fos, "Bogus");
560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Failed to throw Unsupported Encoding exception");
561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#close()
568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws IOException {
570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.close();
571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            osw.write(testString, 0, testString.length());
574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Chars written after close");
575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (IOException e) {
576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        ByteArrayOutputStream bout = new ByteArrayOutputStream();
580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            OutputStreamWriter writer = new OutputStreamWriter(bout,
582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    "ISO2022JP");
583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(new char[] { 'a' });
584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.close();
585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // the default is ASCII, there should not be any mode changes
586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            String converted = new String(bout.toByteArray(), "ISO8859_1");
587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid conversion 1: " + converted, converted
588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .equals("a"));
589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            bout.reset();
591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(bout, "ISO2022JP");
592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(new char[] { '\u3048' });
593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.flush();
594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // the byte sequence should not switch to ASCII mode until the
595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // stream is closed
596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            converted = new String(bout.toByteArray(), "ISO8859_1");
597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid conversion 2: " + converted, converted
598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .equals("\u001b$B$("));
599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.close();
600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            converted = new String(bout.toByteArray(), "ISO8859_1");
601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("invalid conversion 3: " + converted, converted
602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .equals("\u001b$B$(\u001b(B"));
603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            bout.reset();
605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer = new OutputStreamWriter(bout, "ISO2022JP");
606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(new char[] { '\u3048' });
607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.write(new char[] { '\u3048' });
608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            writer.close();
609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // there should not be a mode switch between writes
610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("invalid conversion 4", "\u001b$B$($(\u001b(B",
611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    new String(bout.toByteArray(), "ISO8859_1"));
612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Can't test missing converter
614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            System.out.println(e);
615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#flush()
620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_flush() throws IOException {
622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[testString.length()];
623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.write(testString, 0, testString.length());
624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.flush();
625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        openInputStream();
626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        isr.read(buf, 0, buf.length);
627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Chars not flushed", new String(buf, 0, buf.length)
628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString));
629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
632857b660ca3f07fe8775a62c9b23992d3ac5c0c7fNarayan Kamath     * Unlike the RI, we return the canonical encoding name and not something
633418e036b21553e18575099e1ad7760e4a35c9770Narayan Kamath     * java specific.
634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getEncoding() throws IOException {
636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            osw = new OutputStreamWriter(fos, "8859_1");
638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Returned incorrect encoding", "8859_1", osw
640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .getEncoding());
641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        OutputStreamWriter out = new OutputStreamWriter(
644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new ByteArrayOutputStream(), "UTF-16BE");
645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out.close();
646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        String result = out.getEncoding();
648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertNull(result);
649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        out = null;
651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            out = new OutputStreamWriter(new ByteArrayOutputStream(),
653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    "UTF-16BE");
654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (UnsupportedEncodingException e) {
655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // ok
656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        result = out.getEncoding();
658418e036b21553e18575099e1ad7760e4a35c9770Narayan Kamath        assertEquals("UTF-16BE", result);
659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#write(char[], int, int)
663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_write$CII() throws IOException {
665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[testString.length()];
666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.write(testString, 0, testString.length());
667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.close();
668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        openInputStream();
669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        isr.read(buf, 0, buf.length);
670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect chars returned", new String(buf, 0, buf.length)
671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString));
672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#write(int)
676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_writeI() throws IOException {
678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.write('T');
679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.close();
680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        openInputStream();
681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int c = isr.read();
682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect char returned", 'T', (char) c);
683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.io.OutputStreamWriter#write(java.lang.String, int, int)
687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_writeLjava_lang_StringII() throws IOException {
689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        char[] buf = new char[testString.length()];
690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.write(testString, 0, testString.length());
691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        osw.close();
692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        openInputStream();
693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        isr.read(buf);
694cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect chars returned", new String(buf, 0, buf.length)
695cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(testString));
696cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
697cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
698cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private void openInputStream() {
699cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        isr = new InputStreamReader(new ByteArrayInputStream(fos.toByteArray()));
700cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
701cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
702