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
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.ByteArrayInputStream;
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.IOException;
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStream;
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.io.InputStreamReader;
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class ByteArrayInputStreamTest extends junit.framework.TestCase {
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private InputStream is;
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public String fileString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\n";
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#ByteArrayInputStream(byte[])
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor$B() throws IOException {
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStream bis = new ByteArrayInputStream(fileString.getBytes());
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Unable to create ByteArrayInputStream",
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                bis.available() == fileString.length());
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#ByteArrayInputStream(byte[], int, int)
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_Constructor$BII() throws IOException {
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] zz = fileString.getBytes();
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStream bis = new ByteArrayInputStream(zz, 0, 100);
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Unable to create ByteArrayInputStream", 100, bis
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .available());
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Regression test for Harmony-2405
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        new SubByteArrayInputStream(new byte[] { 1, 2 }, 444, 13);
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(444, SubByteArrayInputStream.pos);
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(444, SubByteArrayInputStream.mark);
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(2, SubByteArrayInputStream.count);
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static class SubByteArrayInputStream extends ByteArrayInputStream {
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public static byte[] buf;
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        public static int mark, pos, count;
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        SubByteArrayInputStream(byte[] buf, int offset, int length)
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                throws IOException {
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            super(buf, offset, length);
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            buf = super.buf;
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            mark = super.mark;
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            pos = super.pos;
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            count = super.count;
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#available()
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_available() throws IOException {
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Returned incorrect number of available bytes", is
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .available() == fileString.length());
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#close()
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_close() throws IOException {
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read();
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.close();
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(); // Should be able to read from a closed stream
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#mark(int)
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markI() throws IOException {
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf1 = new byte[100];
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf2 = new byte[100];
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.skip(3000);
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.mark(1000);
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf1, 0, buf1.length);
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.reset();
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf2, 0, buf2.length);
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.reset();
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to mark correct position", new String(buf1, 0,
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                buf1.length).equals(new String(buf2, 0, buf2.length)));
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#markSupported()
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_markSupported() {
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("markSupported returned incorrect value", is.markSupported());
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#read()
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read() throws IOException {
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        InputStreamReader isr = new InputStreamReader(is);
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int c = isr.read();
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.reset();
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("read returned incorrect char", c == fileString.charAt(0));
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#read(byte[], int, int)
125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_read$BII() throws IOException {
127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf1 = new byte[20];
128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.skip(50);
129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.mark(100);
130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf1, 0, buf1.length);
131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to read correct data", new String(buf1, 0,
132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                buf1.length).equals(fileString.substring(50, 70)));
133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#reset()
137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_reset() throws IOException {
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf1 = new byte[10];
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf2 = new byte[10];
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.mark(200);
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf1, 0, 10);
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.reset();
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf2, 0, 10);
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.reset();
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Reset failed", new String(buf1, 0, buf1.length)
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .equals(new String(buf2, 0, buf2.length)));
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * ByteArrayInputStream#skip(long)
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_skipJ() throws IOException {
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        byte[] buf1 = new byte[10];
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.skip(100);
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is.read(buf1, 0, buf1.length);
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to skip to correct position", new String(buf1, 0,
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                buf1.length).equals(fileString.substring(100, 110)));
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Sets up the fixture, for example, open a network connection. This method
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * is called before a test is executed.
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void setUp() {
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        is = new ByteArrayInputStream(fileString.getBytes());
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Tears down the fixture, for example, close a network connection. This
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * method is called after a test is executed.
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    protected void tearDown() {
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            is.close();
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (Exception e) {
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
181