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