1935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson/* 2935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * this work for additional information regarding copyright ownership. 5935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * (the "License"); you may not use this file except in compliance with 7935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * the License. You may obtain a copy of the License at 8935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 9935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 11935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * See the License for the specific language governing permissions and 15935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * limitations under the License. 16935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 17935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io; 19935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 20935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.IOException; 21935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.SequenceInputStream; 22935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport tests.support.Support_ASimpleInputStream; 23935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 24935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldSequenceInputStreamTest extends junit.framework.TestCase { 25935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 26935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson Support_ASimpleInputStream simple1, simple2; 27935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson SequenceInputStream si; 28935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String s1 = "Hello"; 29935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String s2 = "World"; 30935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 31935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_available() throws IOException { 32935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Returned incorrect number of bytes!", s1.length(), si.available()); 33935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2.throwExceptionOnNextUse = true; 34935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("IOException on second stream should not affect at this time!", 35935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.available() == s1.length()); 36935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = true; 37935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 38935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.available(); 39935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IOException not thrown!"); 40935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 41935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // expected 42935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 43935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 44935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 45935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_close2() throws IOException { 46935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = true; 47935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 48935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.close(); 49935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IOException not thrown!"); 50935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 51935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // expected 52935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 53935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 54935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 55935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_read() throws IOException { 56935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 57935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 1: Incorrect char read;", 58935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s1.charAt(1), (char) si.read()); 59935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 60935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // We are still reading from the first input stream, should be ok. 61935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2.throwExceptionOnNextUse = true; 62935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 63935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 2: Incorrect char read;", 64935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s1.charAt(2), (char) si.read()); 65935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 66935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 3: Unexpected IOException."); 67935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 68935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 69935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = true; 70935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 71935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 72935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 4: IOException expected."); 73935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 74935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 75935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 76935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = false; 77935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 78935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Reading bytes 4 and 5 of the first input stream should be ok again. 79935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 80935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 81935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 82935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Reading the first byte of the second input stream should fail. 83935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 84935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 85935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 5: IOException expected."); 86935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 87935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 88935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 89935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 90935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Reading from the second input stream should be ok now. 91935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2.throwExceptionOnNextUse = false; 92935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 93935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Test 6: Incorrect char read;", 94935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson s2.charAt(0), (char) si.read()); 95935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 96935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 7: Unexpected IOException."); 97935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 98935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 99935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.close(); 100935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertTrue("Test 8: -1 expected when reading from a closed " + 101935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson "sequence input stream.", si.read() == -1); 102935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 103935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 104935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_read_exc() throws IOException { 105935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2.throwExceptionOnNextUse = true; 106935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("IOException on second stream should not affect at this time!", 72, si.read()); 107935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = true; 108935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 109935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(); 110935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IOException not thrown!"); 111935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 112935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // expected 113935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 114935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 115935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 116935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_read$BII_Excpetion() throws IOException { 117935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson byte[] buf = new byte[4]; 118935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 0, 2); 119935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 2, 1); 120935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2.throwExceptionOnNextUse = true; 121935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 3, 1); 122935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals("Wrong stuff read!", "Hell", new String(buf)); 123935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1.throwExceptionOnNextUse = true; 124935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 125935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 3, 1); 126935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IOException not thrown!"); 127935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 128935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // expected 129935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 130935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 131935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson buf = new byte[10]; 132935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1 = new Support_ASimpleInputStream(s1); 133935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2 = new Support_ASimpleInputStream(s2); 134935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si = new SequenceInputStream(simple1, simple2); 135935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 136935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, -1, 1); 137935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException was not thrown"); 138935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 139935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 140935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 141935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 142935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 0, -1); 143935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException was not thrown"); 144935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 145935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 146935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 147935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 148935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si.read(buf, 1, 10); 149935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("IndexOutOfBoundsException was not thrown"); 150935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IndexOutOfBoundsException e) { 151935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected 152935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 153935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 154935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 155935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void setUp() { 156935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple1 = new Support_ASimpleInputStream(s1); 157935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson simple2 = new Support_ASimpleInputStream(s2); 158935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson si = new SequenceInputStream(simple1, simple2); 159935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 160935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson} 161