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