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 Kamath
18d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpackage org.apache.harmony.tests.java.util.zip;
19d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
20d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.ByteArrayInputStream;
21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.IOException;
22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.InputStream;
2314dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamathimport java.util.Arrays;
24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.DataFormatException;
25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Deflater;
26d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.DeflaterInputStream;
2714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamathimport libcore.io.Streams;
2827604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.junit3.TestCaseWithRules;
2927604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector;
3027604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector.DisableResourceLeakageDetection;
3127604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.Rule;
3227604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.rules.TestRule;
33d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
3427604018f783bf6354a13870b3e7785edca69b5fPaul Duffinpublic class DeflaterInputStreamTest extends TestCaseWithRules {
3527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @Rule
3627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    public TestRule guardRule = ResourceLeakageDetector.getRule();
37d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
3814dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    private static final String TEST_STR = "Hi,this is a test";
39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
4014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    private static final byte[] TEST_STRING_DEFLATED_BYTES = {
4114dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath            120, -100, -13, -56, -44, 41, -55, -56, 44, 86,
4214dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath            0, -94, 68, -123, -110, -44, -30, 18, 0, 52,
4314dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath            34, 5, -13 };
4414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
4514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    private InputStream is;
4614dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
4714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    @Override
4814dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    protected void setUp() throws Exception {
4914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        super.setUp();
5014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        is = new ByteArrayInputStream(TEST_STR.getBytes("UTF-8"));
5114dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    }
5214dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
5314dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    @Override
5414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    protected void tearDown() throws Exception {
5514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        is.close();
5614dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        super.tearDown();
5714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    }
58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#available()
61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testAvailable() throws IOException {
63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buf = new byte[1024];
64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(120, dis.read());
67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
68d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(22, dis.read(buf, 0, 1024));
6914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        assertEquals(0, dis.available());
70d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, dis.read());
71d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, dis.available());
72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.available();
75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
78d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
82d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#close()
83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testClose() throws IOException {
85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buf = new byte[1024];
86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.available();
91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
92d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
93d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf, 0, 1024);
97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // can close after close
102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#mark()
107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testMark() throws IOException {
109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // mark do nothing
110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.mark(-1);
112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.mark(0);
113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.mark(1);
114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.mark(1);
116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#markSupported()
120d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testMarkSupported() throws IOException {
122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse(dis.markSupported());
124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse(dis.markSupported());
126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
128d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#read()
130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testRead() throws IOException {
132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(120, dis.read());
135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(156, dis.read());
137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(243, dis.read());
139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read();
143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
145d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
146d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
14914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    public void testRead_golden() throws Exception {
15027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(is)) {
15127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            byte[] contents = Streams.readFully(dis);
15227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertTrue(Arrays.equals(TEST_STRING_DEFLATED_BYTES, contents));
15327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
15414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
15527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(
15627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new ByteArrayInputStream(TEST_STR.getBytes("UTF-8")))) {
15727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            byte[] result = new byte[32];
15827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            int count = 0;
15927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            int bytesRead;
16027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            while ((bytesRead = dis.read(result, count, 4)) != -1) {
16127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                count += bytesRead;
16227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
16327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(23, count);
16427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            byte[] splicedResult = new byte[23];
16527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            System.arraycopy(result, 0, splicedResult, 0, 23);
16627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertTrue(Arrays.equals(TEST_STRING_DEFLATED_BYTES, splicedResult));
16714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        }
16814dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    }
16914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
17014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    public void testRead_leavesBufUnmodified() throws Exception {
17114dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        DeflaterInputStreamWithPublicBuffer dis = new DeflaterInputStreamWithPublicBuffer(is);
17214dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        byte[] contents = Streams.readFully(dis);
17314dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        assertTrue(Arrays.equals(TEST_STRING_DEFLATED_BYTES, contents));
17414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
17514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        // protected field buf is a part of the public API of this class.
17614dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        // we guarantee that it's only used as an input buffer, and not for
17714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        // anything else.
17814dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        byte[] buf = dis.getBuffer();
17914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        byte[] expected = TEST_STR.getBytes("UTF-8");
18014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
18114dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        byte[] splicedBuf = new byte[expected.length];
182ab646c8866f5bf4bfaeb811c7dce434e130eb44eNarayan Kamath        System.arraycopy(buf, 0, splicedBuf, 0, splicedBuf.length);
183ab646c8866f5bf4bfaeb811c7dce434e130eb44eNarayan Kamath        assertTrue(Arrays.equals(expected, splicedBuf));
18414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    }
18514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
186d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
187d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#read(byte[], int, int)
188d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
189d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testReadByteArrayIntInt() throws IOException {
190d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buf1 = new byte[256];
191d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buf2 = new byte[256];
19227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(is)) {
19327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(23, dis.read(buf1, 0, 256));
19427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
19527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin
19627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(is)) {
19727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(8, dis.read(buf2, 0, 256));
19827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
19927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin
20014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        is = new ByteArrayInputStream(TEST_STR.getBytes("UTF-8"));
20127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        DeflaterInputStream dis = new DeflaterInputStream(is);
202d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
203d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(120, dis.read());
204d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
205d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(22, dis.read(buf2, 0, 256));
20614dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        assertEquals(0, dis.available());
207d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, dis.read());
208d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, dis.available());
209d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
210d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, 0, 512);
211d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IndexOutOfBoundsException");
212d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
213d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
214d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
215d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
216d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, 0, 0);
217d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw NullPointerException");
218d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
219d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
220d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
221d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
222d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, -1, 0);
223d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw NullPointerException");
224d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
225d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
226d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
227d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
228d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, -1, -1);
229d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw NullPointerException");
230d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
231d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
232d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
233d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
234d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, -1, -1);
235d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IndexOutOfBoundsException");
236d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
237d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
238d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
239d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
240d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, 0, -1);
241d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IndexOutOfBoundsException");
242d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
243d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
244d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
245d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
246d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
247d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, 0, 512);
248d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
249d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
250d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
251d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
252d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
253d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, 0, 1);
254d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
255d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
256d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
257d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
258d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
259d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, 0, 0);
260d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
261d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
262d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
263d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
264d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
265d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, -1, 0);
266d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
267d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
268d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
269d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
270d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
271d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(null, -1, -1);
272d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
273d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
274d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
275d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
276d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
277d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, -1, -1);
278d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
279d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
280d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
281d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
282d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
283d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.read(buf1, 0, -1);
284d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
285d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
286d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
287d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
288d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
289d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
290d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
291d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#reset()
292d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
293d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testReset() throws IOException {
294d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterInputStream dis = new DeflaterInputStream(is);
295d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
296d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.reset();
297d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
298d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
299d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
300d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
301d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
302d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
303d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.reset();
304d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
305d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
306d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
307d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
308d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
309d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
310d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
311d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#skip()
312d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
313d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testSkip() throws IOException {
314d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buf = new byte[1024];
31527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(is)) {
31627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(1, dis.available());
31727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            dis.skip(1);
31827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(1, dis.available());
31927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(22, dis.read(buf, 0, 1024));
32027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(0, dis.available());
32127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(0, dis.available());
32227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            is = new ByteArrayInputStream(TEST_STR.getBytes("UTF-8"));
32327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
32427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin
32514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        is = new ByteArrayInputStream(TEST_STR.getBytes("UTF-8"));
32627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (DeflaterInputStream dis = new DeflaterInputStream(is)) {
32727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(23, dis.skip(Long.MAX_VALUE));
32827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals(0, dis.available());
32927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
33027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin
33127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        DeflaterInputStream dis = new DeflaterInputStream(is);
332d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(1, dis.available());
333d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.skip(56);
334d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, dis.available());
335d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(-1, dis.read(buf, 0, 1024));
33614dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
337d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, dis.available());
338d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // can still skip
339d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.skip(1);
340d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dis.close();
341d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
342d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dis.skip(1);
343d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw IOException");
344d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
345d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
346d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
347d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
348d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
349d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
350d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#DeflaterInputStream(InputStream)
351d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
35227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @DisableResourceLeakageDetection(
35327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            why = "DeflaterInputStream does not clean up the default Deflater created in the"
35427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " constructor if the constructor fails; i.e. constructor calls"
35527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " this(..., new Deflater(), ...) and that constructor fails but does not know"
35627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " that it needs to call Deflater.end() as the caller has no access to it",
35727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            bug = "31798154")
35827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    public void testDeflaterInputStreamInputStream() throws IOException {
359d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // ok
36027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        new DeflaterInputStream(is).close();
361d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // fail
362d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
363d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            new DeflaterInputStream(null);
364d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("should throw NullPointerException");
365d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
366d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // expected
367d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
368d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
369d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
370d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
371d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DataFormatException#DataFormatException()
372d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
373d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testDataFormatException() {
374d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        new DataFormatException();
375d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
376d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
377d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
378d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#DeflaterInputStream(InputStream, Deflater)
379d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
38027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    public void testDeflaterInputStreamInputStreamDeflater() throws IOException {
381d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // ok
38227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater deflater = new Deflater();
383d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
38427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            new DeflaterInputStream(is, deflater).close();
38527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            // fail
38627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
38727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(is, null);
38827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
38927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
39027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
39127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
39227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
39327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(null, deflater);
39427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
39527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
39627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
39727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
39827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        } finally {
39927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            deflater.end();
400d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
401d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
402d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
403d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
404d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * DeflaterInputStream#DeflaterInputStream(InputStream, Deflater, int)
405d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
406d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void testDeflaterInputStreamInputStreamDeflaterInt() {
407d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // ok
40827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater deflater = new Deflater();
409d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
41027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            new DeflaterInputStream(is, deflater, 1024);
41127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            // fail
41227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
41327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(is, null, 1024);
41427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
41527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
41627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
41727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
41827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
41927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(null, deflater, 1024);
42027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
42127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
42227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
42327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
42427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
42527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(is, deflater, -1);
42627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw IllegalArgumentException");
42727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (IllegalArgumentException e) {
42827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
42927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
43027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
43127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(null, deflater, -1);
43227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
43327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
43427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
43527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
43627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
43727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                new DeflaterInputStream(is, null, -1);
43827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("should throw NullPointerException");
43927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (NullPointerException e) {
44027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                // expected
44127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
44227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        } finally {
44327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            deflater.end();
444d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
445d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
446d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
44714dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath    public static final class DeflaterInputStreamWithPublicBuffer extends DeflaterInputStream {
448d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
44914dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        public DeflaterInputStreamWithPublicBuffer(InputStream in) {
45014dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath            super(in);
45114dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        }
45214dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath
45314dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        public byte[] getBuffer() {
45414dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath            return buf;
45514dade3dfbf9933fd179af0d5f1f87ae6f608418Narayan Kamath        }
456d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
457d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath}
458