1d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath/*
2d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more
3d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * contributor license agreements.  See the NOTICE file distributed with
4d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * this work for additional information regarding copyright ownership.
5d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0
6d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * (the "License"); you may not use this file except in compliance with
7d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * the License.  You may obtain a copy of the License at
8d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *
9d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath *
11d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * Unless required by applicable law or agreed to in writing, software
12d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
13d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * See the License for the specific language governing permissions and
15d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath * limitations under the License.
16d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath */
17d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
18d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathpackage org.apache.harmony.tests.java.util.zip;
19d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
20d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.EOFException;
21d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.File;
22d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.FileInputStream;
23d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.FileOutputStream;
24d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.IOException;
25d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.io.OutputStream;
26d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.Deflater;
27d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.DeflaterOutputStream;
28d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamathimport java.util.zip.InflaterInputStream;
2927604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.junit3.TestCaseWithRules;
3027604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector;
3127604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector.DisableResourceLeakageDetection;
3227604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.Rule;
3327604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.rules.TestRule;
34d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
3527604018f783bf6354a13870b3e7785edca69b5fPaul Duffinpublic class DeflaterOutputStreamTest extends TestCaseWithRules {
3627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @Rule
3727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    public TestRule guardRule = ResourceLeakageDetector.getRule();
38d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
39d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    private class MyDeflaterOutputStream extends DeflaterOutputStream {
40d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        boolean deflateFlag = false;
41d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
42d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream(OutputStream out) {
43d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(out);
44d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
45d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
46d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream(OutputStream out, Deflater defl) {
47d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(out, defl);
48d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
49d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
50d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream(OutputStream out, Deflater defl, int size) {
51d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super(out, defl, size);
52d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
53d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
54d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte[] getProtectedBuf() {
55d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return buf;
56d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
57d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
58d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        protected void deflate() throws IOException {
59d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            deflateFlag = true;
60d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            super.deflate();
61d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
62d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
63d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        boolean getDaflateFlag() {
64d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            return deflateFlag;
65d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
66d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
67d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
68e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath    private final byte outputBuf[] = new byte[500];
69d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
70d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    @Override
71d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    protected void setUp() {
72d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // setting up a deflater to be used
73d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8 };
74d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int x = 0;
75d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater deflate = new Deflater(1);
76d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflate.setInput(byteArray);
77d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!(deflate.needsInput())) {
78e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath            x += deflate.deflate(outputBuf, x, outputBuf.length - x);
79d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
80d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflate.finish();
81d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        while (!(deflate.finished())) {
82e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath            x = x + deflate.deflate(outputBuf, x, outputBuf.length - x);
83d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
84d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        deflate.end();
85d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
86d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
87d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
88d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#DeflaterOutputStream(java.io.OutputStream,
89d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     *java.util.zip.Deflater)
90d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
91d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_OutputStreamLjava_util_zip_Deflater() throws Exception {
92d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8 };
93e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("hyts_ConstruOD", ".tst");
94d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
95d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = null;
96d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream dos;
97d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for a null Deflater.
98d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
99d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos = new MyDeflaterOutputStream(fos, defl);
100d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("NullPointerException Not Thrown");
101d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
102d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
103d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
104d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos = new MyDeflaterOutputStream(fos, defl);
105d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
106d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if DeflaterOutputStream was created with the correct
107d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // buffer.
108d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Buffer Size", 512, dos.getProtectedBuf().length);
109d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
110d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.write(byteArray);
111d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
112d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
11327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
114d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
115d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
116d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
117d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#DeflaterOutputStream(java.io.OutputStream)
118d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
119d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_OutputStream() throws Exception {
120e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("hyts_ConstruO", ".tst");
121d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
122d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream dos = new MyDeflaterOutputStream(fos);
123d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
124d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if DeflaterOutputStream was created with the correct
125d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // buffer.
126d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Buffer Size", 512, dos.getProtectedBuf().length);
127d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
128e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        dos.write(outputBuf);
129d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
130d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
131d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
132d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
133d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
134d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#DeflaterOutputStream(java.io.OutputStream,
135d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     *java.util.zip.Deflater, int)
136d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
137d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_ConstructorLjava_io_OutputStreamLjava_util_zip_DeflaterI()
138d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            throws Exception {
139d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int buf = 5;
140d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int negBuf = -5;
141d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        int zeroBuf = 0;
142d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8, 3, 6 };
143e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("hyts_ConstruODI", ".tst");
144d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
145d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        Deflater defl = null;
146d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream dos;
147d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
148d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for a null Deflater.
149d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
150d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos = new MyDeflaterOutputStream(fos, defl, buf);
151d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("NullPointerException Not Thrown");
152d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (NullPointerException e) {
153d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
154d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        defl = new Deflater();
155d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
156d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for a negative buf.
157d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
158d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos = new MyDeflaterOutputStream(fos, defl, negBuf);
159d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException Not Thrown");
160d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
161d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
162d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
163d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for a zero buf.
164d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
165d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos = new MyDeflaterOutputStream(fos, defl, zeroBuf);
166d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IllegalArgumentException Not Thrown");
167d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IllegalArgumentException e) {
168d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
169d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
170d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if DeflaterOutputStream was created with the correct
171d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // buffer.
172d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos = new MyDeflaterOutputStream(fos, defl, buf);
173d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Buffer Size", 5, dos.getProtectedBuf().length);
174d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
175d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.write(byteArray);
176d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
177d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
17827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        defl.end();
179d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
180d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
181d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
182d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#close()
183d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
18427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @DisableResourceLeakageDetection(
18527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            why = "DeflaterOutputStream.close() does not work properly if finish() throws an"
18627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " exception; DeflaterOutputStream.finish() throws an exception if the"
18727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " underlying OutputStream has been closed and the Deflater still has data to"
18827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " write.",
18927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            bug = "31797037")
190d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_close() throws Exception {
191d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        File f1 = File.createTempFile("close", ".tst");
192d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
19327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (InflaterInputStream iis = new InflaterInputStream(new FileInputStream(f1))) {
19427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            try {
19527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                iis.read();
19627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                fail("EOFException Not Thrown");
19727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            } catch (EOFException e) {
19827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            }
199d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
200d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
201d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
202d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos = new DeflaterOutputStream(fos);
203d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 6 };
204d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.write(byteArray);
205d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
206d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
20727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try (InflaterInputStream iis = new InflaterInputStream(new FileInputStream(f1))) {
20827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            // Test to see if the finish method wrote the bytes to the file.
20927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", 1, iis.read());
21027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", 3, iis.read());
21127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", 4, iis.read());
21227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", 6, iis.read());
21327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", -1, iis.read());
21427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            assertEquals("Incorrect Byte Returned.", -1, iis.read());
21527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
216d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
217d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Not sure if this test will stay.
218d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos2 = new FileOutputStream(f1);
219d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos2 = new DeflaterOutputStream(fos2);
220d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos2.close();
221d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
222d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.close();
223d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException not thrown");
224d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
225d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
226d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
227d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to write to a closed DeflaterOutputStream
228d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
229d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos.write(5);
230d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("DeflaterOutputStream Able To Write After Being Closed.");
231d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
232d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
233d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
234d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to write to a FileOutputStream that should have been closed
235d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // by
236d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // the DeflaterOutputStream.
237d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
238d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fos.write(("testing").getBytes());
239d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("FileOutputStream Able To Write After Being Closed.");
240d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
241d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
242d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
243d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
244d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
245d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
246d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
247d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#finish()
248d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
249d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_finish() throws Exception {
250d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Need test to see if method finish() actually finishes
251d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Only testing possible errors, not if it actually works
252d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
253e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("finish", ".tst");
254d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos1 = new FileOutputStream(f1);
255d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos = new DeflaterOutputStream(fos1);
256d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 6 };
257d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.write(byteArray);
258d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.finish();
259d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
260d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if the same FileOutputStream can be used with the
261d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // DeflaterOutputStream after finish is called.
262d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
263d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos.write(1);
264d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException not thrown");
265d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
266d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
267d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
268d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for writing with a new FileOutputStream using the same
269d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // DeflaterOutputStream.
270d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos2 = new FileOutputStream(f1);
27127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        DeflaterOutputStream dos4 = new DeflaterOutputStream(fos2);
27227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        dos4.write(1);
273d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
274d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for writing to FileOutputStream fos1, which should be open.
275d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos1.write(("testing").getBytes());
276d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
277d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for writing to FileOutputStream fos2, which should be open.
278d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos2.write(("testing").getBytes());
279d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
280d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Not sure if this test will stay.
281d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos3 = new FileOutputStream(f1);
282d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos3 = new DeflaterOutputStream(fos3);
283d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos3.close();
284d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
285d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos3.finish();
286d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException not thrown");
287d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
288d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
28927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        dos3.close();
290d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
291d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
29227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        dos4.close();
293d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
294d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
295d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
296d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
297d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#write(int)
298d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
29927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @DisableResourceLeakageDetection(
30027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            why = "DeflaterOutputStream.close() does not work properly if finish() throws an"
30127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " exception; DeflaterOutputStream.finish() throws an exception if the"
30227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " underlying OutputStream has been closed and the Deflater still has data to"
30327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " write.",
30427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            bug = "31797037")
305d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_writeI() throws Exception {
306e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("writeIL", ".tst");
307d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
308d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos = new DeflaterOutputStream(fos);
309d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 3; i++) {
310d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos.write(i);
311d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
312d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
313d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileInputStream fis = new FileInputStream(f1);
314d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(fis);
315d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 3; i++) {
316d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            assertEquals("Incorrect Byte Returned.", i, iis.read());
317d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
318d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned (EOF).", -1, iis.read());
319d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned (EOF).", -1, iis.read());
320d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.close();
321d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
322d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Not sure if this test is that important.
323d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Checks to see if you can write using the DeflaterOutputStream
324d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // after
325d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // the FileOutputStream has been closed.
326d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos2 = new FileOutputStream(f1);
327d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos2 = new DeflaterOutputStream(fos2);
328d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos2.close();
329d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
330d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.write(2);
331d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException not thrown");
332d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
333d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
33427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        // Close to try and free up the resources.
33527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try {
33627604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            dos2.close();
33727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            fail("IOException not thrown");
33827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        } catch (IOException e) {
33927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
340d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
341d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
342d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
343d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
344d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    /**
345d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     * java.util.zip.DeflaterOutputStream#write(byte[], int, int)
346d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath     */
34727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin    @DisableResourceLeakageDetection(
34827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            why = "DeflaterOutputStream.close() does not work properly if finish() throws an"
34927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " exception; DeflaterOutputStream.finish() throws an exception if the"
35027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " underlying OutputStream has been closed and the Deflater still has data to"
35127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin                    + " write.",
35227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            bug = "31797037")
353d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_write$BII() throws Exception {
354d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        byte byteArray[] = { 1, 3, 4, 7, 8, 3, 6 };
355d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
356d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test to see if the correct bytes are saved.
357e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f1 = File.createTempFile("writeBII", ".tst");
358d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos1 = new FileOutputStream(f1);
359d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos1 = new DeflaterOutputStream(fos1);
360d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos1.write(byteArray, 2, 3);
361d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos1.close();
362d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileInputStream fis = new FileInputStream(f1);
363d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        InflaterInputStream iis = new InflaterInputStream(fis);
364d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 4, iis.read());
365d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 7, iis.read());
366d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned.", 8, iis.read());
367d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned (EOF).", -1, iis.read());
368d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertEquals("Incorrect Byte Returned (EOF).", -1, iis.read());
369d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        iis.close();
370d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f1.delete();
371d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
372d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for trying to write more bytes than available from the array
373e10c61bb13373b95ba857cc3af60f94b9941ab9eNarayan Kamath        File f2 = File.createTempFile("writeBII2", ".tst");
374d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos2 = new FileOutputStream(f2);
375d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos2 = new DeflaterOutputStream(fos2);
376d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
377d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.write(byteArray, 2, 10);
378d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IndexOutOfBoundsException not thrown");
379d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
380d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
381d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
382d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for trying to write a negative number of bytes.
383d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
384d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.write(byteArray, 2, Integer.MIN_VALUE);
385d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IndexOutOfBoundsException not thrown");
386d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
387d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
388d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
389d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for trying to start writing from a byte < 0 from the array.
390d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
391d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.write(byteArray, Integer.MIN_VALUE, 2);
392d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IndexOutOfBoundsException not thrown");
393d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
394d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
395d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
396d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Test for trying to start writing from a byte > than the array
397d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // size.
398d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
399d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos2.write(byteArray, 10, 2);
400d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IndexOutOfBoundsException not thrown");
401d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IndexOutOfBoundsException e) {
402d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
403d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos2.close();
404d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
405d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Not sure if this test is that important.
406d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // Checks to see if you can write using the DeflaterOutputStream
407d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // after
408d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        // the FileOutputStream has been closed.
409d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos3 = new FileOutputStream(f2);
410d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        DeflaterOutputStream dos3 = new DeflaterOutputStream(fos3);
411d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        fos3.close();
412d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        try {
413d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos3.write(byteArray, 2, 3);
414d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            fail("IOException not thrown");
415d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        } catch (IOException e) {
416d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
41727604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        // Close to try and free up the resources.
41827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        try {
41927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            dos3.close();
42027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin            fail("IOException not thrown");
42127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        } catch (IOException e) {
42227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin        }
423d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
424d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        f2.delete();
425d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
426d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath
427d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    public void test_deflate() throws Exception {
428d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        File f1 = File.createTempFile("writeI1", ".tst");
429d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        FileOutputStream fos = new FileOutputStream(f1);
430d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        MyDeflaterOutputStream dos = new MyDeflaterOutputStream(fos);
431d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertFalse(dos.getDaflateFlag());
432d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        for (int i = 0; i < 3; i++) {
433d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath            dos.write(i);
434d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        }
435d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        assertTrue(dos.getDaflateFlag());
436d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath        dos.close();
437d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath    }
438d567f9025c4b94fc5e9b47f5702c1b48c2a45c96Narayan Kamath}
439