1d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath/*
2d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more
3d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * contributor license agreements.  See the NOTICE file distributed with
4d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * this work for additional information regarding copyright ownership.
5d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0
6d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * (the "License"); you may not use this file except in compliance with
7d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * the License.  You may obtain a copy of the License at
8d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *
9d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *
11d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Unless required by applicable law or agreed to in writing, software
12d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
13d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * See the License for the specific language governing permissions and
15d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * limitations under the License.
16d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */
17d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpackage org.apache.harmony.tests.java.util.zip;
18d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
19d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.ByteArrayInputStream;
20d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.ByteArrayOutputStream;
21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.EOFException;
22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.IOException;
23d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.InputStream;
24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.File;
25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.FileInputStream;
26d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.DeflaterOutputStream;
27d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Inflater;
28d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.InflaterInputStream;
29d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
30d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport junit.framework.TestCase;
31d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport tests.support.resource.Support_Resources;
32d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
33d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpublic class InflaterInputStreamTest extends TestCase {
34d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
35d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    // files hyts_construO,hyts_construOD,hyts_construODI needs to be
36d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    // included as resources
37d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    byte outPutBuf[] = new byte[500];
38d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    class MyInflaterInputStream extends InflaterInputStream {
40d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyInflaterInputStream(InputStream in) {
41d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(in);
42d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
43d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
44d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyInflaterInputStream(InputStream in, Inflater infl) {
45d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(in, infl);
46d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
47d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
48d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyInflaterInputStream(InputStream in, Inflater infl, int size) {
49d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(in, infl, size);
50d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
51d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
52d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        void myFill() throws IOException {
53d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fill();
54d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
55d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
56d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
57d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream)
59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_InputStream() throws IOException {
61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        //FIXME This test doesn't pass in Harmony classlib or Sun 5.0_7 RI
62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        /*
63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		int result = 0;
64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		int buffer[] = new int[500];
65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		InputStream infile = Support_Resources
66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath				.getStream("hyts_construO.bin");
67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
68d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		InflaterInputStream inflatIP = new InflaterInputStream(infile);
69d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
70d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		int i = 0;
71d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		while ((result = inflatIP.read()) != -1) {
72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath			buffer[i] = result;
73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath			i++;
74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		}
75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath		inflatIP.close();
76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        */
77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
78d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream,
81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     *java.util.zip.Inflater)
82d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_InputStreamLjava_util_zip_Inflater() throws IOException {
84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = new byte[100];
85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources.getStream("hyts_construOD.bin");
86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = new InflaterInputStream(infile,
88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                inflate);
89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.read(byteArray, 0, 5);// only suppose to read in 5 bytes
91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.close();
92d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
93d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream,
96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     *java.util.zip.Inflater, int)
97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_InputStreamLjava_util_zip_InflaterI() throws IOException {
99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int result = 0;
100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int buffer[] = new int[500];
101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources.getStream("hyts_construODI.bin");
102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = new InflaterInputStream(infile,
104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                inflate, 1);
105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int i = 0;
107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while ((result = inflatIP.read()) != -1) {
108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            buffer[i] = result;
109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            i++;
110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.close();
112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream,
116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     *java.util.zip.Inflater, int)
117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_InputStreamLjava_util_zip_InflaterI_1() throws IOException {
119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources.getStream("hyts_construODI.bin");
120d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = null;
122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            inflatIP = new InflaterInputStream(infile, null, 1);
124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("NullPointerException expected");
125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException NPE) {
126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
128d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            inflatIP = new InflaterInputStream(null, inflate, 1);
131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("NullPointerException expected");
132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException NPE) {
133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            inflatIP = new InflaterInputStream(infile, inflate, -1);
138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException expected");
139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException iae) {
140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
145d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#mark(int)
146d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_markI() {
148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = new ByteArrayInputStream(new byte[10]);
149d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
150d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // mark do nothing, do no check
151d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.mark(0);
152d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.mark(-1);
153d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.mark(10000000);
154d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
155d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
156d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
157d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#markSupported()
158d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
159d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_markSupported() {
160d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = new ByteArrayInputStream(new byte[10]);
161d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
162d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse(iis.markSupported());
163d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue(is.markSupported());
164d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
165d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
166d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
167d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#read()
168d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
169d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_read() throws IOException {
170d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int result = 0;
171d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int buffer[] = new int[500];
172d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte orgBuffer[] = { 1, 3, 4, 7, 8 };
173d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources
174d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .getStream("hyts_construOD.bin");
175d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
176d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = new InflaterInputStream(infile,
177d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                inflate);
178d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
179d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int i = 0;
180d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while ((result = inflatIP.read()) != -1) {
181d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            buffer[i] = result;
182d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            i++;
183d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
184d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.close();
185d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
186d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int j = 0; j < orgBuffer.length; j++) {
187d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(
188d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    "original compressed data did not equal decompressed data",
189d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    orgBuffer[j], buffer[j]);
190d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
191d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
192d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
193d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
194d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#read(byte [], int, int)
195d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
196d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_read_LBII() throws IOException {
197d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int result = 0;
198d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources.getStream("hyts_construOD.bin");
199d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
200d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = new InflaterInputStream(infile, inflate);
201d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
202d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] b = new byte[3];
203d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
204d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            result = inflatIP.read(null, 0, 1);
205d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("NullPointerException expected");
206d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException npe) {
207d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
208d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
209d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
210d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, inflatIP.read(b, 0, 0));
211d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
212d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
213d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            result = inflatIP.read(b, 5, 2); //offset higher
214d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IndexOutOfBoundsException expected");
215d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException iobe) {
216d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
217d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
218d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
219d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.close();
220d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
221d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            inflatIP.read(b, 0, 1); //read after close
222d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException expected");
223d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException ioe) {
224d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            //expected
225d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
226d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
227d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
228d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testAvailableNonEmptySource() throws Exception {
229d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // this byte[] is a deflation of these bytes: { 1, 3, 4, 6 }
230d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] deflated = { 72, -119, 99, 100, 102, 97, 3, 0, 0, 31, 0, 15, 0 };
231d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
232d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // InflaterInputStream.available() returns either 1 or 0, even though
233d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // that contradicts the behavior defined in InputStream.available()
234d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, in.read());
235d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, in.available());
236d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(3, in.read());
237d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, in.available());
238d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(4, in.read());
239d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, in.available());
240d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(6, in.read());
241d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, in.available());
242d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, in.read());
243d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, in.read());
244d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
245d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
246d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testAvailableSkip() throws Exception {
247d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // this byte[] is a deflation of these bytes: { 1, 3, 4, 6 }
248d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] deflated = { 72, -119, 99, 100, 102, 97, 3, 0, 0, 31, 0, 15, 0 };
249d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
250d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, in.available());
251d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(4, in.skip(4));
252d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, in.available());
253d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
254d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
255d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testAvailableEmptySource() throws Exception {
256d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // this byte[] is a deflation of the empty file
257d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] deflated = { 120, -100, 3, 0, 0, 0, 0, 1 };
258d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
259d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, in.read());
260d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, in.read());
261d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, in.available());
262d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
263d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
264d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
265d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#read(byte[], int, int)
266d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
267d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_read$BII() throws IOException {
268d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] test = new byte[507];
269d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 256; i++) {
270d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            test[i] = (byte) i;
271d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
272d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 256; i < test.length; i++) {
273d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            test[i] = (byte) (256 - i);
274d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
275d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        ByteArrayOutputStream baos = new ByteArrayOutputStream();
276d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos = new DeflaterOutputStream(baos);
277d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.write(test);
278d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
279d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = new ByteArrayInputStream(baos.toByteArray());
280d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
281d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outBuf = new byte[530];
282d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int result = 0;
283d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (true) {
284d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            result = iis.read(outBuf, 0, 5);
285d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (result == -1) {
286d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                //"EOF was reached";
287d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                break;
288d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
289d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
290d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
291d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.read(outBuf, -1, 10);
292d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOOBE.");
293d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
294d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected;
295d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
296d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
297d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
298d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_read$BII2() throws IOException {
299d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        File resources = Support_Resources.createTempFolder();
300d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Support_Resources.copyFile(resources, null, "Broken_manifest.jar");
301d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileInputStream fis = new FileInputStream(new File(resources,
302d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "Broken_manifest.jar"));
303d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(fis);
304d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outBuf = new byte[530];
305d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
306d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.close();
307d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
308d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.read(outBuf, 0, 5);
309d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException expected");
310d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException ee) {
311d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected.
312d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
313d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
314d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
315d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_read$BII3() throws IOException {
316d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        File resources = Support_Resources.createTempFolder();
317d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Support_Resources.copyFile(resources, null, "Broken_manifest.jar");
318d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileInputStream fis = new FileInputStream(new File(resources,
319d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "Broken_manifest.jar"));
320d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(fis);
321d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outBuf = new byte[530];
322d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
323d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
324d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.read();
325d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException expected.");
326d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException ee) {
327d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
328d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
329d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
330d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
331d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
332d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#reset()
333d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
334d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_reset() {
335d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = new ByteArrayInputStream(new byte[10]);
336d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
337d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
338d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.reset();
339d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("Should throw IOException");
340d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
341d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // correct
342d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
343d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
344d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
345d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
346d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#skip(long)
347d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
348d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_skipJ() throws IOException {
349d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = Support_Resources.getStream("hyts_available.tst");
350d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
351d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
352d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Tests for skipping a negative number of bytes.
353d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
354d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.skip(-3);
355d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown");
356d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
357d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Expected
358d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
359d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 5, iis.read());
360d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
361d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
362d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.skip(Integer.MIN_VALUE);
363d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown");
364d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
365d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Expected
366d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
367d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 4, iis.read());
368d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
369d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to make sure the correct number of bytes were skipped
370d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Number Of Bytes Skipped.", 3, iis.skip(3));
371d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
372d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if the number of bytes skipped returned is true.
373d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 7, iis.read());
374d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
375d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Number Of Bytes Skipped.", 0, iis.skip(0));
376d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 0, iis.read());
377d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
378d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for skipping more bytes than available in the stream
379d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Number Of Bytes Skipped.", 2, iis.skip(4));
380d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", -1, iis.read());
381d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.close();
382d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
383d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
384d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
385d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#skip(long)
386d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
387d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_skipJ2() throws IOException {
388d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int result = 0;
389d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int buffer[] = new int[100];
390d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte orgBuffer[] = { 1, 3, 4, 7, 8 };
391d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
392d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // testing for negative input to skip
393d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile = Support_Resources
394d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .getStream("hyts_construOD.bin");
395d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater inflate = new Inflater();
396d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP = new InflaterInputStream(infile,
397d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                inflate, 10);
398d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long skip;
399d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
400d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            skip = inflatIP.skip(Integer.MIN_VALUE);
401d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("Expected IllegalArgumentException when skip() is called with negative parameter");
402d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
403d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Expected
404d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
405d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP.close();
406d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
407d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // testing for number of bytes greater than input.
408d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile2 = Support_Resources
409d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .getStream("hyts_construOD.bin");
410d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP2 = new InflaterInputStream(infile2);
411d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
412d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // looked at how many bytes the skip skipped. It is
413d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // 5 and its supposed to be the entire input stream.
414d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
415d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        skip = inflatIP2.skip(Integer.MAX_VALUE);
416d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // System.out.println(skip);
417d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("method skip() returned wrong number of bytes skipped",
418d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                5, skip);
419d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
420d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // test for skipping of 2 bytes
421d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream infile3 = Support_Resources
422d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .getStream("hyts_construOD.bin");
423d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream inflatIP3 = new InflaterInputStream(infile3);
424d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        skip = inflatIP3.skip(2);
425d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("the number of bytes returned by skip did not correspond with its input parameters",
426d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                2, skip);
427d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int i = 0;
428d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        result = 0;
429d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while ((result = inflatIP3.read()) != -1) {
430d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            buffer[i] = result;
431d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            i++;
432d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
433d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inflatIP2.close();
434d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
435d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int j = 2; j < orgBuffer.length; j++) {
436d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(
437d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    "original compressed data did not equal decompressed data",
438d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    orgBuffer[j], buffer[j - 2]);
439d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
440d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
441d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
442d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
443d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#available()
444d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
445d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_available() throws IOException {
446d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream is = Support_Resources.getStream("hyts_available.tst");
447d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(is);
448d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
449d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int available;
450d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 11; i++) {
451d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.read();
452d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            available = iis.available();
453d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (available == 0) {
454d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals("Expected no more bytes to read", -1, iis.read());
455d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
456d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals("Bytes Available Should Return 1.", 1, available);
457d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
458d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
459d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
460d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.close();
461d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
462d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            iis.available();
463d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("available after close should throw IOException.");
464d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
465d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Expected
466d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
467d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
468d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
469d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
470d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.InflaterInputStream#close()
471d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
472d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_close() throws IOException {
473d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iin = new InflaterInputStream(
474d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                new ByteArrayInputStream(new byte[0]));
475d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iin.close();
476d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
477d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // test for exception
478d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iin.close();
479d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
480d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath}
481