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