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