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 20bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamathimport junit.framework.TestCase; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.BufferedInputStream; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayOutputStream; 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException; 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStream; 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStreamReader; 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.OutputStreamWriter; 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.UnsupportedEncodingException; 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.Charset; 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.CharsetDecoder; 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.CodingErrorAction; 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.nio.charset.MalformedInputException; 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Arrays; 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class InputStreamReaderTest extends TestCase { 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class LimitedByteArrayInputStream extends ByteArrayInputStream { 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // A ByteArrayInputStream that only returns a single byte per read 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] bytes; 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count; 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public LimitedByteArrayInputStream(int type) { 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(new byte[0]); 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath switch (type) { 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath case 0: 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes = new byte[] { 0x61, 0x72 }; 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath case 1: 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes = new byte[] { (byte) 0xff, (byte) 0xfe, 0x61, 0x72 }; 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath case 2: 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytes = new byte[] { '\u001b', '$', 'B', '6', 'e', 'B', 'h', 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath '\u001b', '(', 'B' }; 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count = bytes.length; 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int available() { 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return count; 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int read() { 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (count == 0) { 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return -1; 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count--; 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return bytes[bytes.length - count]; 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int read(byte[] buffer, int offset, int length) { 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (count == 0) { 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return -1; 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (length == 0) { 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return 0; 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath buffer[offset] = bytes[bytes.length - count]; 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count--; 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return 1; 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public String fileString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_java_io_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\n"; 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InputStream fis; 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InputStream in; 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InputStreamReader is; 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InputStreamReader reader; 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private final String source = "This is a test message with Unicode character. \u4e2d\u56fd is China's name in Chinese"; 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @see TestCase#setUp() 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void setUp() throws Exception { 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super.setUp(); 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = new ByteArrayInputStream(source.getBytes("UTF-8")); 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "UTF-8"); 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ByteArrayOutputStream bos = new ByteArrayOutputStream(); 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath OutputStreamWriter osw = new OutputStreamWriter(bos); 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] buf = new char[fileString.length()]; 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fileString.getChars(0, fileString.length(), buf, 0); 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath osw.write(buf); 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath osw.close(); 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fis = new ByteArrayInputStream(bos.toByteArray()); 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is = new InputStreamReader(fis); 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @see TestCase#tearDown() 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void tearDown() throws Exception { 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in.close(); 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is.close(); 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fis.close(); 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Ignored 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super.tearDown(); 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#close() 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_close() throws IOException { 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is.close(); 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is.read(); 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IOException"); 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.close(); 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.ready(); 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw IOException"); 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Should be a no-op 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.close(); 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Tests after reader closed 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = new BufferedInputStream( 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getClass() 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getClassLoader() 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getResourceAsStream( 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "org/apache/harmony/luni/tests/java/io/testfile-utf8.txt")); 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "utf-8"); 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in.close(); 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count = reader.read(new char[1]); 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("count:" + count); 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(); 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IOException e) { 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(reader.ready()); 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Charset cs = Charset.forName("utf-8"); 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(cs, Charset.forName(reader.getEncoding())); 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#InputStreamReader(java.io.InputStream) 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_io_InputStream() throws IOException { 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(null); 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader reader2 = new InputStreamReader(in); 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2.close(); 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#InputStreamReader(java.io.InputStream, 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *java.lang.String) 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_io_InputStreamLjava_lang_String() 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath throws IOException { 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is = new InputStreamReader(fis, "8859_1"); 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is = new InputStreamReader(fis, "Bogus"); 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Failed to throw Unsupported Encoding exception"); 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (UnsupportedEncodingException e) { 213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(e.getMessage()); 214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(null, "utf-8"); 218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, (String) null); 224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, ""); 230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (UnsupportedEncodingException e) { 232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "badname"); 236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (UnsupportedEncodingException e) { 238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader reader2 = new InputStreamReader(in, "utf-8"); 241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Charset.forName(reader2.getEncoding()), Charset 242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .forName("utf-8")); 243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2.close(); 244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2 = new InputStreamReader(in, "utf8"); 245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Charset.forName(reader2.getEncoding()), Charset 246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .forName("utf-8")); 247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2.close(); 248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader(java.io.InputStream, 252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *java.nio.charset.Charset) 253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_io_InputStreamLjava_nio_charset_Charset() 255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath throws IOException { 256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Charset cs = Charset.forName("utf-8"); 257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(null, cs); 259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, (Charset) null); 265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader reader2 = new InputStreamReader(in, cs); 270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Charset.forName(reader2.getEncoding()), cs); 271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2.close(); 272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader(java.io.InputStream, 276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *java.nio.charset.CharsetDecoder) 277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_io_InputStreamLjava_nio_charset_CharsetDecoder() 279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath throws IOException { 280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath CharsetDecoder decoder = Charset.forName("utf-8").newDecoder(); 281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(null, decoder); 283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, (CharsetDecoder) null); 289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader reader2 = new InputStreamReader(in, decoder); 294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Charset.forName(reader2.getEncoding()), decoder.charset()); 295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader2.close(); 296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 299bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamath * Unlike the RI, we return a canonical encoding name and not something 300bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamath * java specific. 301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getEncoding() throws IOException { 303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr = new InputStreamReader(fis, "8859_1"); 304bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamath assertEquals("ISO-8859-1", isr.getEncoding()); 305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr = new InputStreamReader(fis, "ISO-8859-1"); 307bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamath assertEquals("ISO-8859-1", isr.getEncoding()); 308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte b[] = new byte[5]; 310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr = new InputStreamReader(new ByteArrayInputStream(b), "UTF-16BE"); 311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr.close(); 312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull(isr.getEncoding()); 313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr = new InputStreamReader(System.in, "UTF-16BE"); 316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (UnsupportedEncodingException e) { 317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Ignored 318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 319bd024cc687470a008999d96fd3af4a1261413d55Narayan Kamath assertEquals("UTF-16BE", isr.getEncoding()); 320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#read() 324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read() throws IOException { 326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals('T', (char) reader.read()); 327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals('h', (char) reader.read()); 328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals('i', (char) reader.read()); 329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals('s', (char) reader.read()); 330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(' ', (char) reader.read()); 331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(new char[source.length() - 5], 0, source.length() - 5); 332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1, reader.read()); 333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int c = is.read(); 335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("returned incorrect char", (char) c == fileString.charAt(0)); 336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader reader = new InputStreamReader( 337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(new byte[] { (byte) 0xe8, (byte) 0x9d, 338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath (byte) 0xa5 }), "UTF8"); 339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("wrong double byte char", reader.read() == '\u8765'); 340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Regression for HARMONY-166 342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStream in; 343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = new LimitedByteArrayInputStream(0); 345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "UTF-16BE"); 346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect byte UTF-16BE", '\u6172', reader.read()); 347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = new LimitedByteArrayInputStream(0); 349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "UTF-16LE"); 350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect byte UTF-16BE", '\u7261', reader.read()); 351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = new LimitedByteArrayInputStream(1); 353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "UTF-16"); 354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect byte UTF-16BE", '\u7261', reader.read()); 355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Temporarily commented out due to lack of ISO2022 support in ICU4J 3.8 358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * in = new LimitedByteArrayInputStream(2); reader = new 359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * InputStreamReader(in, "ISO2022JP"); assertEquals("Incorrect byte 360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * ISO2022JP 1", '\u4e5d', reader.read()); assertEquals("Incorrect byte 361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * ISO2022JP 2", '\u7b2c', reader.read()); 362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Class under test for int read() Regression for Harmony-411 367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read_1() throws IOException { 369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // if the decoder is constructed by InputStreamReader itself, the 370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // decoder's default error action is REPLACE 371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream( 372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new byte[] { -32, -96 }), "UTF-8"); 373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read() return incorrect value", 65533, isr.read()); 374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr2 = new InputStreamReader( 376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(new byte[] { -32, -96 }), Charset 377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .forName("UTF-8")); 378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read() return incorrect value", 65533, isr2.read()); 379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // if the decoder is passed in, keep its status intact 381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder(); 382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath decoder.onMalformedInput(CodingErrorAction.REPORT); 383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr3 = new InputStreamReader( 384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(new byte[] { -32, -96 }), decoder); 385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr3.read(); 387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw MalformedInputException"); 388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (MalformedInputException e) { 389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // expected 390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath CharsetDecoder decoder2 = Charset.forName("UTF-8").newDecoder(); 393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath decoder2.onMalformedInput(CodingErrorAction.IGNORE); 394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr4 = new InputStreamReader( 395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(new byte[] { -32, -96 }), decoder2); 396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read() return incorrect value", -1, isr4.read()); 397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath CharsetDecoder decoder3 = Charset.forName("UTF-8").newDecoder(); 399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath decoder3.onMalformedInput(CodingErrorAction.REPLACE); 400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr5 = new InputStreamReader( 401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new ByteArrayInputStream(new byte[] { -32, -96 }), decoder3); 402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("read() return incorrect value", 65533, isr5.read()); 403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read_specialCharset() throws IOException { 406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.close(); 407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = this.getClass().getClassLoader().getResourceAsStream( 408e0e5a7a0bb9c4412664807c8150e453c611cc4f7Narayan Kamath "tests/api/java/io/testfile-utf8.txt"); 409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader = new InputStreamReader(in, "utf-8"); 410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int c; 411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath StringBuffer sb = new StringBuffer(); 412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while ((c = reader.read()) != -1) { 413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append((char) c); 414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // delete BOM 416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(source, sb.deleteCharAt(0).toString()); 417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.setLength(0); 419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.close(); 420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in = this.getClass().getClassLoader().getResourceAsStream( 421e0e5a7a0bb9c4412664807c8150e453c611cc4f7Narayan Kamath "tests/api/java/io/testfile.txt"); 422e0e5a7a0bb9c4412664807c8150e453c611cc4f7Narayan Kamath 423e0e5a7a0bb9c4412664807c8150e453c611cc4f7Narayan Kamath reader = new InputStreamReader(in, "gb18030"); 424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while ((c = reader.read()) != -1) { 425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath sb.append((char) c); 426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(source, sb.toString()); 428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#read(char[], int, int) 432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$CII() throws IOException { 434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] rbuf = new char[100]; 435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] sbuf = new char[100]; 436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fileString.getChars(0, 100, sbuf, 0); 437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is.read(rbuf, 0, 100); 438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < rbuf.length; i++) { 439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("returned incorrect chars", rbuf[i] == sbuf[i]); 440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test successive reads 443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] data = new byte[8192 * 2]; 444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Arrays.fill(data, (byte) 116); // 116 = ISO-8859-1 value for 't' 445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ByteArrayInputStream bis = new ByteArrayInputStream(data); 446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InputStreamReader isr = new InputStreamReader(bis, "ISO-8859-1"); 447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // One less than the InputStreamReader.BUFFER_SIZE 449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] buf = new char[8191]; 450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int bytesRead = isr.read(buf, 0, buf.length); 451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(-1 == bytesRead); 452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bytesRead = isr.read(buf, 0, buf.length); 453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(-1 == bytesRead); 454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath bis = new ByteArrayInputStream(source.getBytes("UTF-8")); 456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath isr = new InputStreamReader(in, "UTF-8"); 457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] chars = new char[source.length()]; 458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(source.length() - 3, isr.read(chars, 0, chars.length - 3)); 459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3, isr.read(chars, 0, 10)); 460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Class under test for int read(char[], int, int) 464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_read$CII_1() throws IOException { 466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(null, -1, 1); 468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException expected) { 470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException expected) { 471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(null, 0, -1); 475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException expected) { 478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(null, 0, 1); 482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(new char[3], -1, 1); 488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException e) { 490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(new char[3], 0, -1); 494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException e) { 496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(new char[3], 1, 3); 500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail(); 501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (IndexOutOfBoundsException e) { 502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0, reader.read(new char[3], 3, 0)); 505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath char[] chars = new char[source.length()]; 506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0, reader.read(chars, 0, 0)); 507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0, chars[0]); 508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3, reader.read(chars, 0, 3)); 509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(5, reader.read(chars, 3, 5)); 510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(source.length() - 8, reader.read(chars, 8, 511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath chars.length - 8)); 512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Arrays.equals(chars, source.toCharArray())); 513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1, reader.read(chars, 0, chars.length)); 514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Arrays.equals(chars, source.toCharArray())); 515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.io.InputStreamReader#ready() 519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ready() throws IOException { 521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Ready test failed", is.ready()); 522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath is.read(); 523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("More chars, but not ready", is.ready()); 524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(reader.ready()); 526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath reader.read(new char[source.length()]); 527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(reader.ready()); 528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 530