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.InputStream;
21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.UnsupportedEncodingException;
22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Adler32;
23d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.DataFormatException;
24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Deflater;
25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Inflater;
2627604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.junit3.TestCaseWithRules;
2727604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector;
2827604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.Rule;
2927604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.rules.TestRule;
30d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport tests.support.resource.Support_Resources;
31d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
3227604018f783bf6354a13870b3e7785edca69b5fPaul Duffinpublic class DeflaterTest extends TestCaseWithRules {
3327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @Rule
3427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    public TestRule guardRule = ResourceLeakageDetector.getRule();
35d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
36d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    class MyDeflater extends Deflater {
37d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflater() {
38d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super();
39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
40d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
41d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflater(int lvl) {
42d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(lvl);
43d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
44d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
45d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        void myFinalize() {
46d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            finalize();
47d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
48d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
49d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int getDefCompression() {
50d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return DEFAULT_COMPRESSION;
51d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
52d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
53d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int getDefStrategy() {
54d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return DEFAULT_STRATEGY;
55d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
56d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
57d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int getHuffman() {
58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return HUFFMAN_ONLY;
59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int getFiltered() {
62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return FILTERED;
63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#deflate(byte[])
68d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
69d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_deflate$B() {
70d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[50];
71d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8 };
72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutInf[] = new byte[50];
73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
78d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            x += defl.deflate(outPutBuf);
80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Deflater at end of stream, should return 0", 0, defl
82d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .deflate(outPutBuf));
83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalIn = defl.getTotalIn();
85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(x, totalOut);
86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(byteArray.length, totalIn);
87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater();
90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.setInput(outPutBuf);
92d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!infl.finished()) {
93d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.inflate(outPutInf);
94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (DataFormatException e) {
96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("Invalid input to be decompressed");
97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalIn, infl.getTotalOut());
99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, infl.getTotalIn());
100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < byteArray.length; i++) {
101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i], outPutInf[i]);
102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Final decompressed data contained more bytes than original",
104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                0, outPutInf[byteArray.length]);
105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#deflate(byte[], int, int)
110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_deflate$BII() {
112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[50];
113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutInf[] = new byte[50];
115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int offSet = 1;
116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int length = outPutBuf.length - 1;
117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
120d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            x += defl.deflate(outPutBuf, offSet, length);
124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Deflater at end of stream, should return 0", 0, defl.deflate(
126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                outPutBuf, offSet, length));
127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
128d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalIn = defl.getTotalIn();
129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(x, totalOut);
130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(byteArray.length, totalIn);
131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater();
134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.setInput(outPutBuf, offSet, length);
136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!infl.finished()) {
137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.inflate(outPutInf);
138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (DataFormatException e) {
140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("Invalid input to be decompressed");
141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalIn, infl.getTotalOut());
143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, infl.getTotalIn());
144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < byteArray.length; i++) {
145d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i], outPutInf[i]);
146d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Final decompressed data contained more bytes than original",
148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                0, outPutInf[byteArray.length]);
149d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
150d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
151d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Set of tests testing the boundaries of the offSet/length
152d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
153d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[100];
154d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
155d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 2; i++) {
156d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
157d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = outPutBuf.length + 1;
158d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = outPutBuf.length;
159d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
160d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = 0;
161d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = outPutBuf.length + 1;
162d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
163d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            try {
164d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.deflate(outPutBuf, offSet, length);
165d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                fail("Test " + i
166d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        + ": ArrayIndexOutOfBoundsException not thrown");
167d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } catch (ArrayIndexOutOfBoundsException e) {
168d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
169d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
170d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
171d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
172d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
173d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
174d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#end()
175d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
176d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_end() {
177d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
178d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
179d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
180d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
181d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
182d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
183d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
184d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
185d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
186d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
187d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        helper_end_test(defl, "end");
188d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
189d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
190d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
191d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#finalize()
192d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
193d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_finalize() {
194d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflater mdefl = new MyDeflater();
195d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        mdefl.myFinalize();
196d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        System.gc();
197d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        helper_end_test(mdefl, "finalize");
198d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
199d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
200d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
201d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#finish()
202d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
203d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_finish() throws Exception {
204d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // This test already here, its the same as test_deflate()
205d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
206d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
207d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutInf[] = new byte[100];
208d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
209d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
210d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
211d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
212d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
213d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // needsInput should never return true after finish() is called
214d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        if (System.getProperty("java.vendor").startsWith("IBM")) {
215d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertFalse("needsInput() should return false after finish() is called", defl
216d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    .needsInput());
217d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
218d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
219d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
220d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            x += defl.deflate(outPutBuf);
221d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
222d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
223d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalIn = defl.getTotalIn();
224d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(x, totalOut);
225d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(byteArray.length, totalIn);
226d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
227d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
228d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater();
229d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.setInput(outPutBuf);
230d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!infl.finished()) {
231d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.inflate(outPutInf);
232d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
233d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalIn, infl.getTotalOut());
234d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, infl.getTotalIn());
235d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < byteArray.length; i++) {
236d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i], outPutInf[i]);
237d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
238d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Final decompressed data contained more bytes than original",
239d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                0, outPutInf[byteArray.length]);
240d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
241d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
242d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
243d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
244d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#finished()
245d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
246d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_finished() {
247d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
248d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
249d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
250d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("Test 1: Deflater should not be finished.", !defl.finished());
251d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
252d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("Test 2: Deflater should not be finished.", !defl.finished());
253d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
254d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("Test 3: Deflater should not be finished.", !defl.finished());
255d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
256d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
257d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
258d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("Test 4: Deflater should be finished.", defl.finished());
259d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
260d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("Test 5: Deflater should be finished.", defl.finished());
261d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
262d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
263d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
264d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#getAdler()
265d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
266d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_getAdler() {
267d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 'a', 'b', 'c', 1, 2, 3 };
268d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
269d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
270d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
271d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // getting the checkSum value using the Adler
272d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
273d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
274d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
275d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
276d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
277d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long checkSumD = defl.getAdler();
278d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
279d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
280d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // getting the checkSum value through the Adler32 class
281d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Adler32 adl = new Adler32();
282d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl.update(byteArray);
283d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long checkSumR = adl.getValue();
284d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(
285d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "The checksum value returned by getAdler() is not the same as the checksum returned by creating the adler32 instance",
286d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                checkSumD, checkSumR);
287d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
288d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
289d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
290d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#getTotalIn()
291d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
292d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_getTotalIn() {
293d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[5];
294d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8 };
295d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
296d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
297d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
298d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
299d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
300d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
301d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
302d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(byteArray.length, defl.getTotalIn());
303d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
304d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
305d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
306d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int offSet = 2;
307d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int length = 3;
308d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[5];
309d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray, offSet, length);
310d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
311d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
312d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
313d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
314d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(length, defl.getTotalIn());
315d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
316d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
317d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
318d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
319d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#getTotalOut()
320d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
321d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_getTotalOut() {
322d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // the getTotalOut should equal the sum of value returned by deflate()
323d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[5];
324d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
325d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
326d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
327d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
328d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
329d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
330d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            x += defl.deflate(outPutBuf);
331d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
332d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(x, defl.getTotalOut());
333d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
334d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
335d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        x = 0;
336d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int offSet = 2;
337d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int length = 3;
338d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
339d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[5];
340d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray, offSet, length);
341d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
342d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
343d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            x += defl.deflate(outPutBuf);
344d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
345d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(x, defl.getTotalOut());
34627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
347d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
348d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
349d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
350d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#needsInput()
351d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
352d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_needsInput() {
353d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
354d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue(
355d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "needsInput give the wrong boolean value as a result of no input buffer",
356d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.needsInput());
357d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 2, 3 };
358d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
359d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse(
360d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "needsInput give wrong boolean value as a result of a full input buffer",
361d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.needsInput());
362d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutBuf = new byte[50];
363d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
364d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
365d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
366d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte emptyByteArray[] = new byte[0];
367d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(emptyByteArray);
368d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue(
369d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "needsInput give wrong boolean value as a result of an empty input buffer",
370d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.needsInput());
371d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
372d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
373d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
374d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
375d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
376d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // needsInput should NOT return true after finish() has been
377d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // called.
378d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        if (System.getProperty("java.vendor").startsWith("IBM")) {
379d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertFalse(
380d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    "needsInput gave wrong boolean value as a result of finish() being called",
381d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    defl.needsInput());
382d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
383d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
384d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
385d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
386d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
387d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#reset()
388d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
389d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_reset() {
390d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
391d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutInf[] = new byte[100];
392d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte curArray[] = new byte[5];
393d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8 };
394d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray2[] = { 8, 7, 4, 3, 1 };
395d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
396d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int orgValue = 0;
397d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
398d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
399d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 3; i++) {
400d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
401d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                curArray = byteArray;
402d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else if (i == 1) {
403d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                curArray = byteArray2;
404d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
405d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.reset();
406d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
407d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
408d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setInput(curArray);
409d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.finish();
410d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!defl.finished()) {
411d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                x += defl.deflate(outPutBuf);
412d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
413d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
414d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
415d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals(x, defl.getTotalOut());
416d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else if (i == 1) {
417d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals(x, orgValue);
418d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
419d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals(x, orgValue * 2);
420d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
421d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
422d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
423d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                orgValue = x;
424d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
425d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
426d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            try {
427d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                Inflater infl = new Inflater();
428d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.setInput(outPutBuf);
429d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                while (!infl.finished()) {
430d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    infl.inflate(outPutInf);
431d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                }
432d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.end();
433d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } catch (DataFormatException e) {
434d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                fail("Test " + i + ": Invalid input to be decompressed");
435d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
436d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
437d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 1) {
438d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                curArray = byteArray;
439d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
440d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
441d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            for (int j = 0; j < curArray.length; j++) {
442d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals(curArray[j], outPutInf[j]);
443d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
444d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(0, outPutInf[curArray.length]);
445d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
44627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
447d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
448d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
449d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
450d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setDictionary(byte[])
451d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
452d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setDictionary$B() {
453d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // This test is very close to getAdler()
454d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte dictionaryArray[] = { 'e', 'r', 't', 'a', 'b', 2, 3 };
455d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3',
456d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                'w', 'r' };
457d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[100];
458d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
459d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
460d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long deflAdler = defl.getAdler();
461d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("No dictionary set, no data deflated, getAdler should return 1",
462d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                1, deflAdler);
463d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setDictionary(dictionaryArray);
464d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflAdler = defl.getAdler();
465d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
466d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // getting the checkSum value through the Adler32 class
467d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Adler32 adl = new Adler32();
468d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl.update(dictionaryArray);
469d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long realAdler = adl.getValue();
470d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(deflAdler, realAdler);
471d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
472d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
473d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
474d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
475d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
476d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
477d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflAdler = defl.getAdler();
478d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl = new Adler32();
479d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl.update(byteArray);
480d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        realAdler = adl.getValue();
481d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Deflate is finished and there were bytes deflated that did not occur
482d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // in the dictionaryArray, therefore a new dictionary was automatically
483d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // set.
484d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(realAdler, deflAdler);
485d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
486d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
487d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
488d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
489d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setDictionary(byte[], int, int)
490d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
491d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setDictionary$BII() {
492d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // This test is very close to getAdler()
493d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte dictionaryArray[] = { 'e', 'r', 't', 'a', 'b', 2, 3, 'o', 't' };
494d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3',
495d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                'w', 'r', 't', 'u', 'i', 'o', 4, 5, 6, 7 };
496d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[500];
497d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
498d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int offSet = 4;
499d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int length = 5;
500d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
501d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
502d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long deflAdler = defl.getAdler();
503d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("No dictionary set, no data deflated, getAdler should return 1",
504d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                1, deflAdler);
505d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setDictionary(dictionaryArray, offSet, length);
506d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflAdler = defl.getAdler();
507d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
508d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // getting the checkSum value through the Adler32 class
509d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Adler32 adl = new Adler32();
510d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl.update(dictionaryArray, offSet, length);
511d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        long realAdler = adl.getValue();
512d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(deflAdler, realAdler);
513d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
514d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
515d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
516d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
517d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
518d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflAdler = defl.getAdler();
519d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl = new Adler32();
520d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        adl.update(byteArray);
521d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        realAdler = adl.getValue();
522d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Deflate is finished and there were bytes deflated that did not occur
523d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // in the dictionaryArray, therefore a new dictionary was automatically
524d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // set.
525d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(realAdler, deflAdler);
526d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
527d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
528d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // boundary check
529d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
530d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 2; i++) {
531d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
532d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = 0;
533d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = dictionaryArray.length + 1;
534d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
535d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = dictionaryArray.length + 1;
536d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = 1;
537d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
538d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            try {
539d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.setDictionary(dictionaryArray, offSet, length);
540d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                fail(
541d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        "Test "
542d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                                + i
543d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                                + ": boundary check for setDictionary failed for offset "
544d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                                + offSet + " and length " + length);
545d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } catch (ArrayIndexOutOfBoundsException e) {
546d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
547d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
54827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
549d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
550d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
551d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
552d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setInput(byte[])
553d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
554d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setInput$B() {
555d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = { 1, 2, 3 };
556d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutBuf = new byte[50];
557d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutInf = new byte[50];
558d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
559d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
560d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
561d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue("the array buffer in setInput() is empty", !defl
562d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                .needsInput());
563d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // The second setInput() should be ignored since needsInput() return
564d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // false
565d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
566d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
567d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
568d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
569d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
570d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
571d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
572d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater();
573d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
574d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.setInput(outPutBuf);
575d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!infl.finished()) {
576d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.inflate(outPutInf);
577d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
578d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (DataFormatException e) {
579d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("Invalid input to be decompressed");
580d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
581d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < byteArray.length; i++) {
582d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i], outPutInf[i]);
583d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
584d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(byteArray.length, infl.getTotalOut());
585d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
586d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
587d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
588d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
589d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setInput(byte[], int, int)
590d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
591d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setInput$BII() throws Exception {
592d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = { 1, 2, 3, 4, 5 };
593d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutBuf = new byte[50];
594d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutInf = new byte[50];
595d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int offSet = 1;
596d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int length = 3;
597d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
598d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
599d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray, offSet, length);
600d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse("the array buffer in setInput() is empty", defl.needsInput());
601d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // The second setInput() should be ignored since needsInput() return
602d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // false
603d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray, offSet, length);
604d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
605d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
606d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
607d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
608d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
609d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
610d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater();
611d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.setInput(outPutBuf);
612d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!infl.finished()) {
613d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.inflate(outPutInf);
614d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
615d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < length; i++) {
616d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i + offSet], outPutInf[i]);
617d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
618d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(length, infl.getTotalOut());
619d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
620d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
621d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // boundary check
622d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
623d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 2; i++) {
624d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
625d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = 0;
626d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = byteArray.length + 1;
627d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
628d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                offSet = byteArray.length + 1;
629d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                length = 1;
630d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
631d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            try {
632d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.setInput(byteArray, offSet, length);
633d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                fail("Test " + i
634d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        + ": boundary check for setInput failed for offset "
635d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        + offSet + " and length " + length);
636d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } catch (ArrayIndexOutOfBoundsException e) {
637d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
638d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
63927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
640d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
641d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
642d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
643d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setLevel(int)
644d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
645d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setLevelI() throws Exception {
646d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Very similar to test_Constructor(int)
647d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = new byte[100];
648d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt");
649d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.read(byteArray);
650d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.close();
651d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
652d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutBuf;
653d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut;
654d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 10; i++) {
655d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            Deflater defl = new Deflater();
656d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setLevel(i);
657d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            outPutBuf = new byte[500];
658d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setInput(byteArray);
659d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!defl.needsInput()) {
660d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.deflate(outPutBuf);
661d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
662d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.finish();
663d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!defl.finished()) {
664d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.deflate(outPutBuf);
665d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
666d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            totalOut = defl.getTotalOut();
667d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.end();
668d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
669d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            outPutBuf = new byte[500];
670d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl = new Deflater(i);
671d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setInput(byteArray);
672d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!defl.needsInput()) {
673d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.deflate(outPutBuf);
674d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
675d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.finish();
676d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!defl.finished()) {
677d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.deflate(outPutBuf);
678d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
679d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(totalOut, defl.getTotalOut());
680d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.end();
681d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
682d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
683d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // testing boundaries
68427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater boundDefl = new Deflater();
685d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
686d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Level must be between 0-9
687d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(-2);
688d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail(
689d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    "IllegalArgumentException not thrown when setting level to a number < 0.");
690d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
691d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
692d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
693d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(10);
694d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail(
695d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    "IllegalArgumentException not thrown when setting level to a number > 9.");
696d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
697d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
69827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        boundDefl.end();
699d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
700d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
701d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
702d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#setStrategy(int)
703d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
704d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_setStrategyI() throws Exception {
705d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = new byte[100];
706d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt");
707d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.read(byteArray);
708d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.close();
709d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
710d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 3; i++) {
711d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            byte outPutBuf[] = new byte[500];
712d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            MyDeflater mdefl = new MyDeflater();
713d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
714d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
715d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                mdefl.setStrategy(mdefl.getDefStrategy());
716d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else if (i == 1) {
717d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                mdefl.setStrategy(mdefl.getHuffman());
718d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
719d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                mdefl.setStrategy(mdefl.getFiltered());
720d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
721d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
722d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            mdefl.setInput(byteArray);
723d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!mdefl.needsInput()) {
724d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                mdefl.deflate(outPutBuf);
725d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
726d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            mdefl.finish();
727d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!mdefl.finished()) {
728d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                mdefl.deflate(outPutBuf);
729d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
730d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
731d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (i == 0) {
732d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // System.out.println(mdefl.getTotalOut());
733d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // ran JDK and found that getTotalOut() = 86 for this particular
734d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // file
735d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals("getTotalOut() for the default strategy did not correspond with JDK",
736d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        86, mdefl.getTotalOut());
737d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else if (i == 1) {
738d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // System.out.println(mdefl.getTotalOut());
739d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // ran JDK and found that getTotalOut() = 100 for this
740d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // particular file
741d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals("getTotalOut() for the Huffman strategy did not correspond with JDK",
742d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        100, mdefl.getTotalOut());
743d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } else {
744d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // System.out.println(mdefl.getTotalOut());
745d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                // ran JDK and found that totalOut = 93 for this particular file
746d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                assertEquals("Total Out for the Filtered strategy did not correspond with JDK",
747d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        93, mdefl.getTotalOut());
748d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
749d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            mdefl.end();
750d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
751d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
752d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Attempting to setStrategy to an invalid value
75327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater defl = new Deflater();
754d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
755d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setStrategy(-412);
75627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            fail("IllegalArgumentException not thrown when setting strategy to an invalid value.");
757d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
758d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
75927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
760d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
761d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
762d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
763d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#Deflater()
764d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
765d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_Constructor() throws Exception {
766d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = new byte[100];
767d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt");
768d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.read(byteArray);
769d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.close();
770d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
771d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
772d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] outPutBuf = new byte[500];
773d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
774d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
775d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
776d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
777d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
778d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
779d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
780d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
781d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
782d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
783d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
784d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // creating a Deflater using the DEFAULT_COMPRESSION as the int
785d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflater mdefl = new MyDeflater();
78627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        mdefl.end();
78727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin
788d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        mdefl = new MyDeflater(mdefl.getDefCompression());
789d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[500];
790d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        mdefl.setInput(byteArray);
791d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!mdefl.needsInput()) {
792d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            mdefl.deflate(outPutBuf);
793d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
794d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        mdefl.finish();
795d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!mdefl.finished()) {
796d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            mdefl.deflate(outPutBuf);
797d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
798d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, mdefl.getTotalOut());
799d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        mdefl.end();
800d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
801d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
802d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
803d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#Deflater(int, boolean)
804d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
805d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorIZ() throws Exception {
806d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3',
807d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                'w', 'r' };
808d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
809d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater();
810d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[500];
811d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setLevel(2);
812d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
813d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
814d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
815d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
816d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
817d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
818d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
819d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
820d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
821d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
822d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
823d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[500];
824d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater(2, false);
825d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
826d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
827d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
828d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
829d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
830d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
831d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
832d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
833d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, defl.getTotalOut());
834d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
835d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
836d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[500];
837d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater(2, true);
838d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
839d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
840d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
841d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
842d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
843d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
844d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
845d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
846d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue(
847d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                "getTotalOut() should not be equal comparing two Deflaters with different header options.",
848d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.getTotalOut() != totalOut);
849d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
850d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
851d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutInf[] = new byte[500];
852d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Inflater infl = new Inflater(true);
853d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!infl.finished()) {
854d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            if (infl.needsInput()) {
855d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.setInput(outPutBuf);
856d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
857d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            infl.inflate(outPutInf);
858d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
859d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < byteArray.length; i++) {
860d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(byteArray[i], outPutInf[i]);
861d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
862d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("final decompressed data contained more bytes than original - constructorIZ",
863d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                0, outPutInf[byteArray.length]);
864d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl.end();
865d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
866d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        infl = new Inflater(false);
867d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutInf = new byte[500];
868d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int r = 0;
869d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
870d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            while (!infl.finished()) {
871d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                if (infl.needsInput()) {
872d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    infl.setInput(outPutBuf);
873d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                }
874d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                infl.inflate(outPutInf);
875d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
876d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (DataFormatException e) {
877d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            r = 1;
878d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
87927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        infl.end();
880d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("header option did not correspond", 1, r);
881d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
882d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // testing boundaries
88327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater boundDefl = new Deflater();
884d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
885d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Level must be between 0-9
886d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(-2);
887d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when setting level to a number < 0.");
888d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
889d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
890d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
891d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(10);
892d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when setting level to a number > 9.");
893d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
894d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
89527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        boundDefl.end();
896d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
89727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            new Deflater(-2, true).end();
898d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when passing level to a number < 0.");
899d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
900d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
901d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
902d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
90327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            new Deflater(10, true).end();
904d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when passing level to a number > 9.");
905d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
906d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
907d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
908d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
909d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
910d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#Deflater(int)
911d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
912d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorI() throws Exception {
913d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] byteArray = new byte[100];
914d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt");
915d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.read(byteArray);
916d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        inFile.close();
917d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
918d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte outPutBuf[] = new byte[500];
919d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = new Deflater(3);
920d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
921d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
922d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
923d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
924d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
925d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
926d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
927d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
928d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int totalOut = defl.getTotalOut();
929d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
930d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
931d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // test to see if the compression ratio is the same as setting the level
932d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // on a deflater
933d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        outPutBuf = new byte[500];
934d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
935d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setLevel(3);
936d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setInput(byteArray);
937d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.needsInput()) {
938d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
939d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
940d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.finish();
941d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!defl.finished()) {
942d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(outPutBuf);
943d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
944d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(totalOut, defl.getTotalOut());
945d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
946d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
947d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // testing boundaries
94827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        Deflater boundDefl = new Deflater();
949d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
950d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            // Level must be between 0-9
951d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(-2);
952d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when setting level to a number < 0.");
953d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
954d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
955d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
956d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            boundDefl.setLevel(10);
957d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException not thrown when setting level to a number > 9.");
958d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
959d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
96027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        boundDefl.end();
961d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
962d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
963d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    private void helper_end_test(Deflater defl, String desc) {
964d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Help tests for test_end() and test_reset().
965d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 5, 2, 3, 7, 8 };
966d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
967d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods where we expect IllegalStateException or NullPointerException
968d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // to be thrown
969d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
970d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getTotalOut();
971d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getTotalOut() can still be used after " + desc
972d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
973d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
974d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
975d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
976d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
977d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getTotalIn();
978d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getTotalIn() can still be used after " + desc
979d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
980d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
981d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
982d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
983d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
984d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getAdler();
985d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getAdler() can still be used after " + desc
986d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
987d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
988d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
989d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
990d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
991d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            byte[] dict = { 'a', 'b', 'c' };
992d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.setDictionary(dict);
993d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.setDictionary() can still be used after " + desc
994d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
995d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
996d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
997d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
998d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
999d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getTotalIn();
1000d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getTotalIn() can still be used after " + desc
1001d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1002d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
1003d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
1004d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1005d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
1006d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getTotalIn();
1007d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getTotalIn() can still be used after " + desc
1008d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1009d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
1010d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
1011d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1012d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
1013d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.deflate(byteArray);
1014d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.deflate() can still be used after " + desc
1015d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1016d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException e) {
1017d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
1018d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1019d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1020d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods where we expect NullPointerException to be thrown
1021d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
1022d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.reset();
1023d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.reset() can still be used after " + desc
1024d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1025d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException expected) {
1026d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException expected) {
1027d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1028d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1029d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods where we expect NullPointerException to be thrown
1030d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
1031d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getBytesRead();
1032d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.reset() can still be used after " + desc
1033d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1034d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException expected) {
1035d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException expected) {
1036d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1037d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1038d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods where we expect NullPointerException to be thrown
1039d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
1040d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            defl.getBytesWritten();
1041d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("defl.getBytesWritten() can still be used after " + desc
1042d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                    + " is called in test_" + desc);
1043d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException expected) {
1044d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalStateException expected) {
1045d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1046d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1047d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods that should be allowed to be called after end() is called
1048d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.needsInput();
1049d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setStrategy(1);
1050d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.setLevel(1);
1051d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl.end();
1052d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1053d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Methods where exceptions should be thrown
1054d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        String vendor = System.getProperty("java.vendor");
1055d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        if (vendor.indexOf("IBM") != -1) {
1056d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            try {
1057d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                defl.setInput(byteArray);
1058d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                fail("defl.setInput() can still be used after " + desc
1059d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath                        + " is called in test_" + desc);
1060d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            } catch (IllegalStateException e) {
1061d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            }
1062d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
1063d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
1064d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1065d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
1066d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater()
1067d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
1068d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_needsDictionary() {
1069d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater inf = new Deflater();
1070d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, inf.getTotalIn());
1071d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, inf.getTotalOut());
1072d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, inf.getBytesRead());
1073d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, inf.getBytesWritten());
107427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        inf.end();
1075d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
1076d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1077d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
1078d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * @throws DataFormatException
1079d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * @throws UnsupportedEncodingException
1080d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#getBytesRead()
1081d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
1082d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_getBytesRead() throws DataFormatException,
1083d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            UnsupportedEncodingException {
1084d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Regression test for HARMONY-158
1085d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater def = new Deflater();
1086d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getTotalIn());
1087d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getTotalOut());
1088d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getBytesRead());
1089d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Encode a String into bytes
1090d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        String inputString = "blahblahblah??";
1091d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] input = inputString.getBytes("UTF-8");
1092d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1093d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Compress the bytes
1094d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] output = new byte[100];
1095d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        def.setInput(input);
1096d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        def.finish();
1097d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int compressedDataLength = def.deflate(output);
1098d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(14, def.getTotalIn());
1099d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(compressedDataLength, def.getTotalOut());
1100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(14, def.getBytesRead());
110127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        def.end();
1102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
1103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
1105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * @throws DataFormatException
1106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * @throws UnsupportedEncodingException
1107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.Deflater#getBytesRead()
1108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
1109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_getBytesWritten() throws DataFormatException,
1110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            UnsupportedEncodingException {
1111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Regression test for HARMONY-158
1112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater def = new Deflater();
1113d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getTotalIn());
1114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getTotalOut());
1115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(0, def.getBytesWritten());
1116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Encode a String into bytes
1117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        String inputString = "blahblahblah??";
1118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] input = inputString.getBytes("UTF-8");
1119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1120d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Compress the bytes
1121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] output = new byte[100];
1122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        def.setInput(input);
1123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        def.finish();
1124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int compressedDataLength = def.deflate(output);
1125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(14, def.getTotalIn());
1126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(compressedDataLength, def.getTotalOut());
1127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(compressedDataLength, def.getBytesWritten());
112827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        def.end();
1129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
1130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
1131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    //Regression Test for HARMONY-2481
1132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_deflate_beforeSetInput() throws Exception {
1133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater deflater = new Deflater();
1134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflater.finish();
1135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] buffer = new byte[1024];
1136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals(8, deflater.deflate(buffer));
1137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] expectedBytes = { 120, -100, 3, 0, 0, 0, 0, 1 };
1138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < expectedBytes.length; i++) {
1139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals(expectedBytes[i], buffer[i]);
1140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
114127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        deflater.end();
1142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
1143d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath}
1144