1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStreamReader;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStreamWriter;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.UnsupportedEncodingException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.charset.Charset;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.nio.charset.CharsetEncoder;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
29935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_OutputStream;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldOutputStreamWriterTest extends TestCase {
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    OutputStreamWriter osw;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    InputStreamReader isr;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Support_OutputStream fos;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String testString = "This is a test message with Unicode characters. \u4e2d\u56fd is China's name in Chinese";
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fos = new Support_OutputStream(500);
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        osw = new OutputStreamWriter(fos, "UTF-8");
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (isr != null) isr.close();
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.close();
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.tearDown();
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
55f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_io_OutputStream() throws IOException {
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer = null;
58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(null);
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: NullPointerException expected.");
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(new Support_OutputStream());
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: Unexpected exception: " + e.getMessage());
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test that the default encoding has been used.
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 3: Incorrect default encoding used.",
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     Charset.defaultCharset(),
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     Charset.forName(writer.getEncoding()));
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (writer != null) writer.close();
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public void test_ConstructorLjava_io_OutputStreamLjava_lang_String()
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws UnsupportedEncodingException {
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw = new OutputStreamWriter(null, "utf-8");
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: NullPointerException expected.");
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw = new OutputStreamWriter(fos, (String) null);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: NullPointerException expected.");
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw = new OutputStreamWriter(fos, "");
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 3: UnsupportedEncodingException expected.");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedEncodingException e) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw = new OutputStreamWriter(fos, "Bogus");
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4: UnsupportedEncodingException expected.");
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedEncodingException e) {
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw = new OutputStreamWriter(fos, "8859_1");
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedEncodingException e) {
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5: Unexpected UnsupportedEncodingException.");
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 6: Encoding not set correctly. ",
118935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                Charset.forName("8859_1"),
119935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson                Charset.forName(osw.getEncoding()));
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public void test_ConstructorLjava_io_OutputStreamLjava_nio_charset_Charset()
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws IOException {
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_OutputStream out = new Support_OutputStream();
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Charset cs = Charset.forName("ascii");
127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(null, cs);
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: NullPointerException expected.");
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(out, (Charset) null);
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: NullPointerException expected.");
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, cs);
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 3: Encoding not set correctly. ",
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     cs, Charset.forName(writer.getEncoding()));
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public void test_ConstructorLjava_io_OutputStreamLjava_nio_charset_CharsetEncoder()
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws IOException {
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_OutputStream out = new Support_OutputStream();
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Charset cs = Charset.forName("ascii");
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CharsetEncoder enc = cs.newEncoder();
154f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(null, enc);
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: NullPointerException expected.");
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
161f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(out, (CharsetEncoder) null);
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: NullPointerException expected.");
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, cs);
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 3: CharacterEncoder not set correctly. ",
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     cs, Charset.forName(writer.getEncoding()));
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
174f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_close() {
176f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fos.setThrowsException(true);
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.close();
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: IOException expected.");
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected.
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* Test 2 does not work and has therefore been disabled (see Ticket #87).
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test 2: Write should not fail since the closing
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // in test 1 has not been successful.
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.write("Lorem ipsum...");
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: Unexpected IOException.");
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test 3: Close should succeed.
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fos.setThrowsException(false);
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.close();
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 3: Unexpected IOException.");
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
201f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes*/
202f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream bout = new ByteArrayOutputStream();
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            OutputStreamWriter writer = new OutputStreamWriter(bout,
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "ISO2022JP");
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(new char[] { 'a' });
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.close();
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // The default is ASCII, there should not be any mode changes.
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String converted = new String(bout.toByteArray(), "ISO8859_1");
211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertTrue("Test 4: Invalid conversion: " + converted,
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                       converted.equals("a"));
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            bout.reset();
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(bout, "ISO2022JP");
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(new char[] { '\u3048' });
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.flush();
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // The byte sequence should not switch to ASCII mode until the
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // stream is closed.
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            converted = new String(bout.toByteArray(), "ISO8859_1");
221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertTrue("Test 5: Invalid conversion: " + converted,
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                       converted.equals("\u001b$B$("));
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.close();
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            converted = new String(bout.toByteArray(), "ISO8859_1");
225f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertTrue("Test 6: Invalid conversion: " + converted,
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                       converted.equals("\u001b$B$(\u001b(B"));
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            bout.reset();
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer = new OutputStreamWriter(bout, "ISO2022JP");
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(new char[] { '\u3048' });
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(new char[] { '\u3048' });
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.close();
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // There should not be a mode switch between writes.
234f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertEquals("Test 7: Invalid conversion. ",
235f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                         "\u001b$B$($(\u001b(B",
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                         new String(bout.toByteArray(), "ISO8859_1"));
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedEncodingException e) {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Can't test missing converter.
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            System.out.println(e);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected: " + e);
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_flush() {
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.io.OutputStreamWriter.flush()
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            char[] buf = new char[testString.length()];
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.write(testString, 0, testString.length());
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.flush();
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            openInputStream();
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            isr.read(buf, 0, buf.length);
253f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertTrue("Test 1: Characters have not been flushed.",
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                       new String(buf, 0, buf.length).equals(testString));
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: Unexpected exception: " + e.getMessage());
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
258f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fos.setThrowsException(true);
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            osw.flush();
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: IOException expected.");
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        fos.setThrowsException(false);
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
269f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_US_ASCII() throws Exception {
270f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("US-ASCII", 128);
271f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
272f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
273f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_ISO_8859_1() throws Exception {
274f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("ISO-8859-1", 256);
275f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
276f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
277f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_UTF_16BE() throws Exception {
278f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("UTF-16BE", 0xd800);
279f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
280f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
281f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_UTF_16LE() throws Exception {
282f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("UTF-16LE", 0xd800);
283f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
284f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
285f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_UTF_16() throws Exception {
286f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("UTF-16", 0xd800);
287f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
288f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
289f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    public void test_write_UTF_8() throws Exception {
290f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        testEncodeCharset("UTF-8", 0xd800);
291f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
292f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
293f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    private void testEncodeCharset(String charset, int maxChar) throws Exception {
294f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        char[] chars = new char[maxChar];
295f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        for (int i = 0; i < maxChar; i++) {
296f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson            chars[i] = (char) i;
297f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        }
298f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
299f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        // to byte array
300f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
301f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        OutputStreamWriter charsOut = new OutputStreamWriter(bytesOut, charset);
302f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        charsOut.write(chars);
303f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        charsOut.flush();
304f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
305f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        // decode from byte array, one character at a time
306f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytesOut.toByteArray());
307f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        InputStreamReader charsIn = new InputStreamReader(bytesIn, charset);
308f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        for (int i = 0; i < maxChar; i++) {
309f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson            assertEquals(i, charsIn.read());
310f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        }
311f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        assertEquals(-1, charsIn.read());
312f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
313f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        // decode from byte array, using byte buffers
314f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        bytesIn = new ByteArrayInputStream(bytesOut.toByteArray());
315f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        charsIn = new InputStreamReader(bytesIn, charset);
316f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        char[] decoded = new char[maxChar];
317f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        for (int r = 0; r < maxChar; ) {
318f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson            r += charsIn.read(decoded, r, maxChar - r);
319f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        }
320f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        assertEquals(-1, charsIn.read());
321f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        for (int i = 0; i < maxChar; i++) {
322f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson            assertEquals(i, decoded[i]);
323f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        }
324f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson    }
325f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEncoding() throws IOException {
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(new Support_OutputStream(), "utf-8");
329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 1: Incorrect encoding returned.",
330f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                     Charset.forName("utf-8"),
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     Charset.forName(writer.getEncoding()));
332f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Test 2: getEncoding() did not return null for a closed writer.",
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                   writer.getEncoding());
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_write$CII() throws IOException {
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] chars = testString.toCharArray();
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_OutputStream out = new Support_OutputStream(500);
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, "utf-8");
345f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, -1, 1);
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: IndexOutOfBoundsException expected.");
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
352f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, 0, -1);
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: IndexOutOfBoundsException expected.");
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
359f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(new char[0], 0, 1);
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 3: IndexOutOfBoundsException expected.");
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write((char[]) null, 0, 1);
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4: NullPointerException expected.");
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, 1, chars.length);
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5a: IndexOutOfBoundsException expected.");
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, 0, chars.length + 1);
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5b: IndexOutOfBoundsException expected.");
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, chars.length, 1);
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5c: IndexOutOfBoundsException expected.");
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(chars, chars.length + 1, 0);
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5d: IndexOutOfBoundsException expected.");
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
398f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(true);
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < 200; i++) {
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                writer.write(chars, 0, chars.length);
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 6: IOException expected.");
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(false);
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(baos, "utf-8");
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(chars, 1, 2);
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
414f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 7: write(char[], int, int) has not produced the " +
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "expected content in the output stream.",
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "hi", baos.toString("utf-8"));
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(chars, 0, chars.length);
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
420f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 8: write(char[], int, int) has not produced the " +
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "expected content in the output stream.",
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "hi" + testString, baos.toString("utf-8"));
423f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write((char[]) null, -1, -1);
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 9: IOException expected.");
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
431f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    }
432f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_writeI() throws IOException {
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_OutputStream out = new Support_OutputStream(500);
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(true);
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, "utf-8");
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Since there is an internal buffer in the encoder, more than
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // one character needs to be written.
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < 200; i++) {
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                for (int j = 0; j < testString.length(); j++) {
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    writer.write(testString.charAt(j));
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
446f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            }
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: IOException expected.");
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(false);
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
453f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, "utf-8");
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(1);
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String str = new String(out.toByteArray(), "utf-8");
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 2: ", "\u0001", str);
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(2);
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        str = new String(out.toByteArray(), "utf-8");
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 3: ", "\u0001\u0002", str);
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(-1);
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        str = new String(out.toByteArray(), "utf-8");
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 4: ", "\u0001\u0002\uffff", str);
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(0xfedcb);
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        str = new String(out.toByteArray(), "utf-8");
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Test 5: ", "\u0001\u0002\uffff\uedcb", str);
474f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(1);
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 6: IOException expected.");
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_writeLjava_lang_StringII() throws IOException {
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Support_OutputStream out = new Support_OutputStream(500);
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStreamWriter writer;
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(out, "utf-8");
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write("Lorem", -1, 0);
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 1: IndexOutOfBoundsException expected.");
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
497f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write("Lorem", 0, -1);
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 2: IndexOutOfBoundsException expected.");
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
504f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write("", 0, 1);
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 3: IndexOutOfBoundsException expected.");
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(testString, 1, testString.length());
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4a: IndexOutOfBoundsException expected.");
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(testString, 0, testString.length() + 1);
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4b: IndexOutOfBoundsException expected.");
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(testString, testString.length(), 1);
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4c: IndexOutOfBoundsException expected.");
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write(testString, testString.length() + 1, 0);
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 4d: IndexOutOfBoundsException expected.");
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IndexOutOfBoundsException e) {
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write((String) null, 0, 1);
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 5: NullPointerException expected.");
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
546f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(true);
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < 200; i++) {
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                writer.write(testString, 0, testString.length());
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 6: IOException expected.");
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.setThrowsException(false);
557f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer = new OutputStreamWriter(baos, "utf-8");
560f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write("abc", 1, 2);
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
563f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 7: write(String, int, int) has not produced the " +
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "expected content in the output stream.",
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "bc", baos.toString("utf-8"));
566f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.write(testString, 0, testString.length());
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.flush();
569f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Test 7: write(String, int, int) has not produced the " +
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "expected content in the output stream.",
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                     "bc" + testString, baos.toString("utf-8"));
572f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        writer.close();
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            writer.write("abc", 0, 1);
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Test 8: IOException expected.");
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Expected
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void openInputStream() {
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            isr = new InputStreamReader(new ByteArrayInputStream(fos.toByteArray()), "UTF-8");
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedEncodingException e) {
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("UTF-8 not supported");
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
590