1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License.  You may obtain a copy of the License at
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.archive.tests.java.util.zip;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_PlatformFile;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.resource.Support_Resources;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileOutputStream;
26ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Projectimport java.io.FilePermission;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.zip.ZipEntry;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.zip.ZipException;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.zip.ZipFile;
35fce022be38a2c79f9cdc8d9fea33c72cf2f16528Elliott Hughesimport libcore.java.lang.ref.FinalizationTester;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ZipFileTest extends junit.framework.TestCase {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte[] getAllBytesFromStream(InputStream is) throws IOException {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream bs = new ByteArrayOutputStream();
41ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project        byte[] buf = new byte[512];
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int iRead;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int off;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (is.available() > 0) {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            iRead = is.read(buf, 0, buf.length);
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (iRead > 0) bs.write(buf, 0, iRead);
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return bs.toByteArray();
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // the file hyts_zipFile.zip in setup must be included as a resource
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String tempFileName;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private ZipFile zfile;
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // custom security manager
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    SecurityManager sm = new SecurityManager() {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final String forbidenPermissionAction = "read";
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkPermission(Permission perm) {
63ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project            // only check if it's a FilePermission because Locale checks
64ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project            // for a PropertyPermission with action"read" to get system props.
6557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson            if (perm instanceof FilePermission
66ab28398a565e5ce8a56cdfd50ac6226e5317cf66The Android Open Source Project                    && perm.getActions().equals(forbidenPermissionAction)) {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new SecurityException();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    };
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
73229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#ZipFile(java.io.File)
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_io_File() {
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.zip.ZipFile(java.io.File)
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Used to test", true);
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
81229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#ZipFile(java.io.File, int)
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_io_FileI() throws IOException {
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zfile.close(); // about to reopen the same temp file
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File file = new File(tempFileName);
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ZipFile zip = new ZipFile(file, ZipFile.OPEN_DELETE | ZipFile.OPEN_READ);
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zip.close();
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Zip should not exist", !file.exists());
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        file = new File(tempFileName);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        file.delete();
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zip = new ZipFile(file, ZipFile.OPEN_READ);
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException expected");
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ee) {
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        file = new File(tempFileName);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zip = new ZipFile(file, -1);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected");
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException ee) {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
108229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#ZipFile(java.lang.String)
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjava_lang_String() throws IOException {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        System.setProperty("user.dir", System.getProperty("java.io.tmpdir"));
11257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zfile.close(); // about to reopen the same temp file
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ZipFile zip = new ZipFile(tempFileName);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zip.close();
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File file = File.createTempFile("zip", "tmp");
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zip = new ZipFile(file.getName());
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("ZipException expected");
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ZipException ee) {
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        file.delete();
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected ZipEntry test_finalize1(ZipFile zip) {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return zip.getEntry("File1.txt");
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected ZipFile test_finalize2(File file) throws IOException {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new ZipFile(file);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
135229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#finalize()
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_finalize() throws IOException {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream in = Support_Resources.getStream("hyts_ZipFile.zip");
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File file = Support_Resources.createTempFile(".jar");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        OutputStream out = new FileOutputStream(file);
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int result;
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] buf = new byte[4096];
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while ((result = in.read(buf)) != -1) {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            out.write(buf, 0, result);
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in.close();
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.close();
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /*
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * ZipFile zip = new ZipFile(file); ZipEntry entry1 =
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * zip.getEntry("File1.txt"); assertNotNull("Did not find entry",
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * entry1); entry1 = null; zip = null;
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
154fce022be38a2c79f9cdc8d9fea33c72cf2f16528Elliott Hughes        assertNotNull("Did not find entry", test_finalize1(test_finalize2(file)));
155fce022be38a2c79f9cdc8d9fea33c72cf2f16528Elliott Hughes        FinalizationTester.induceFinalization();
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        file.delete();
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Zip should not exist", !file.exists());
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
162229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#close()
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_close() throws IOException {
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method void java.util.zip.ZipFile.close()
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        File fl = new File(tempFileName);
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ZipFile zf = new ZipFile(fl);
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream is1 = zf.getInputStream(zf.getEntry("File1.txt"));
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream is2 = zf.getInputStream(zf.getEntry("File2.txt"));
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        is1.read();
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        is2.read();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zf.close();
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is1.read();
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException expected");
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ee) {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is2.read();
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException expected");
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException ee) {
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
192229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#entries()
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
19457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    public void test_entries() throws Exception {
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.Enumeration java.util.zip.ZipFile.entries()
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Enumeration<? extends ZipEntry> enumer = zfile.entries();
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int c = 0;
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (enumer.hasMoreElements()) {
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ++c;
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            enumer.nextElement();
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Incorrect number of entries returned: " + c, c == 6);
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        Enumeration<? extends ZipEntry> enumeration = zfile.entries();
20557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        zfile.close();
206f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        try {
207f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            enumeration.nextElement();
208f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            fail("did not detect closed file");
209f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        } catch (IllegalStateException expected) {
210f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        }
211f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
21357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson            enumeration.hasMoreElements();
214f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            fail("did not detect closed file");
215f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        } catch (IllegalStateException expected) {
216f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        }
217f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson
218f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        try {
219f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            zfile.entries();
220f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            fail("did not detect closed file");
221f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        } catch (IllegalStateException expected) {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
226229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#getEntry(java.lang.String)
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEntryLjava_lang_String() throws IOException {
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.util.zip.ZipEntry
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.zip.ZipFile.getEntry(java.lang.String)
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        java.util.zip.ZipEntry zentry = zfile.getEntry("File1.txt");
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry", zentry);
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int r;
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream in;
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zentry = zfile.getEntry("testdir1/File1.txt");
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry: testdir1/File1.txt", zentry);
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zentry = zfile.getEntry("testdir1/");
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry: testdir1/", zentry);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in = zfile.getInputStream(zentry);
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("testdir1/ should not have null input stream", in);
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        r = in.read();
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in.close();
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("testdir1/ should not contain data", -1, r);
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zentry = zfile.getEntry("testdir1/testdir1");
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry: testdir1/testdir1", zentry);
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in = zfile.getInputStream(zentry);
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] buf = new byte[256];
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        r = in.read(buf);
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in.close();
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("incorrect contents", "This is also text", new String(buf,
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                0, r));
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEntryLjava_lang_String_AndroidOnly() throws IOException {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        java.util.zip.ZipEntry zentry = zfile.getEntry("File1.txt");
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry", zentry);
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int r;
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream in;
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zentry = zfile.getEntry("testdir1");
2631b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        assertNotNull("Must be able to obtain ZipEntry: testdir1", zentry);
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        in = zfile.getInputStream(zentry);
2651b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        /*
2661b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann         * Android delivers empty InputStream, RI no InputStream at all. The
2671b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann         * spec doesn't clarify this, so we need to deal with both situations.
2681b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann         */
2691b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        int data = -1;
2701b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        if (in != null) {
2711b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann            data = in.read();
2721b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann            in.close();
2731b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        }
2741b965e80442efbf1802adb7113749c385c7466eaJorg Pleumann        assertEquals("Must not be able to read directory data", -1, data);
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getEntryLjava_lang_String_Ex() throws IOException {
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        java.util.zip.ZipEntry zentry = zfile.getEntry("File1.txt");
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Could not obtain ZipEntry", zentry);
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zfile.close();
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
283f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            zfile.getEntry("File2.txt");
284f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            fail("IllegalStateException expected");
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalStateException ee) {
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
291229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#getInputStream(java.util.zip.ZipEntry)
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInputStreamLjava_util_zip_ZipEntry() throws IOException {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.io.InputStream
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // java.util.zip.ZipFile.getInputStream(java.util.zip.ZipEntry)
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ZipEntry zentry = null;
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream is = null;
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zentry = zfile.getEntry("File1.txt");
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is = zfile.getInputStream(zentry);
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            byte[] rbuf = new byte[1000];
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int r;
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is.read(rbuf, 0, r = (int) zentry.getSize());
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("getInputStream read incorrect data", "This is text",
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new String(rbuf, 0, r));
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (java.io.IOException e) {
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IOException during getInputStream");
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                is.close();
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (java.io.IOException e) {
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Failed to close input stream");
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zentry = zfile.getEntry("File2.txt");
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zfile.close();
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is = zfile.getInputStream(zentry);
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalStateException expected");
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalStateException ee) {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // ZipException can not be checked. Stream object returned or null.
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
329229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#getName()
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getName() {
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Test for method java.lang.String java.util.zip.ZipFile.getName()
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("Returned incorrect name: " + zfile.getName(), zfile
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getName().equals(tempFileName));
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
339229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.util.zip.ZipFile#size()
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_size() throws IOException {
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(6, zfile.size());
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        zfile.close();
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zfile.size();
346f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson            fail("IllegalStateException expected");
347f7f90ec7f63bd80b7724d64ea664fdb589052fceJesse Wilson        } catch (IllegalStateException expected) {
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
352229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.io.InputStream#reset()
35357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson     */
35457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    public void test_reset() throws IOException {
35557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        // read an uncompressed entry
35657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        ZipEntry zentry = zfile.getEntry("File1.txt");
35757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        InputStream is = zfile.getInputStream(zentry);
35857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf1 = new byte[6];
35957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf2 = new byte[6];
36057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        int r1, r2;
36157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r1 = is.read(rbuf1);
36257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(rbuf1.length, r1);
36357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r2 = is.read(rbuf2);
36457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(rbuf2.length, r2);
36557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
36640fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        try {
36740fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            is.reset();
36840fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            fail();
36940fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        } catch (IOException expected) {
37040fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        }
37157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.close();
37257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
37357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        // read a compressed entry
37457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf3 = new byte[4185];
37557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        ZipEntry zentry2 = zfile.getEntry("File3.txt");
37657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is = zfile.getInputStream(zentry2);
37757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r1 = is.read(rbuf3);
37857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(4183, r1);
37940fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        try {
38040fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            is.reset();
38140fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            fail();
38240fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        } catch (IOException expected) {
38340fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        }
38457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.close();
38557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
38657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is = zfile.getInputStream(zentry2);
38757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r1 = is.read(rbuf3, 0, 3000);
38857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(3000, r1);
38940fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        try {
39040fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            is.reset();
39140fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            fail();
39240fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        } catch (IOException expected) {
39340fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        }
39457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.close();
39557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    }
39657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
39757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    /**
398229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.io.InputStream#reset()
39957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson     */
40057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    public void test_reset_subtest0() throws IOException {
40157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        // read an uncompressed entry
40257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        ZipEntry zentry = zfile.getEntry("File1.txt");
40357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        InputStream is = zfile.getInputStream(zentry);
40457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf1 = new byte[12];
40557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf2 = new byte[12];
40657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        int r = is.read(rbuf1, 0, 4);
40757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(4, r);
40857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.mark(0);
40957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r = is.read(rbuf1);
41057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(8, r);
41157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(-1, is.read());
41257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
41340fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        try {
41440fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            is.reset();
41540fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            fail();
41640fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        } catch (IOException expected) {
41740fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        }
41840fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes
41957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.close();
42057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
42157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        // read a compressed entry
42257995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        byte[] rbuf3 = new byte[4185];
42357995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        ZipEntry zentry2 = zfile.getEntry("File3.txt");
42457995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is = zfile.getInputStream(zentry2);
42557995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r = is.read(rbuf3, 0, 3000);
42657995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(3000, r);
42757995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.mark(0);
42857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        r = is.read(rbuf3);
42957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(1183, r);
43057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        assertEquals(-1, is.read());
43157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
43240fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        try {
43340fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            is.reset();
43440fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes            fail();
43540fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        } catch (IOException expected) {
43640fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes        }
43740fbee4b04c5345a3a4e4297f46909d7f76378ccElliott Hughes
43857995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson        is.close();
43957995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson    }
44057995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson
44157995e8186b54515d5a03bf2ab104c3dc247f1b6Jesse Wilson	/**
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Sets up the fixture, for example, open a network connection. This method
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is called before a test is executed.
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Create a local copy of the file since some tests want to alter
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // information.
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            tempFileName = System.getProperty("java.io.tmpdir");
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String separator = System.getProperty("file.separator");
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (tempFileName.charAt(tempFileName.length() - 1) == separator
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .charAt(0)) {
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                tempFileName = Support_PlatformFile.getNewPlatformFile(
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        tempFileName, "gabba.zip");
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                tempFileName = Support_PlatformFile.getNewPlatformFile(
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        tempFileName + separator, "gabba.zip");
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            File f = new File(tempFileName);
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            f.delete();
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            InputStream is = Support_Resources.getStream("hyts_ZipFile.zip");
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            FileOutputStream fos = new FileOutputStream(f);
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            byte[] rbuf = getAllBytesFromStream(is);
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fos.write(rbuf, 0, rbuf.length);
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            is.close();
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fos.close();
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            zfile = new ZipFile(f);
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            System.out.println("Exception during ZipFile setup:");
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Tears down the fixture, for example, close a network connection. This
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method is called after a test is executed.
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (zfile != null) {
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // Note zfile is a user-defined zip file used by other tests and
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // should not be deleted
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                zfile.close();
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                tempFileName = System.getProperty("java.io.tmpdir");
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String separator = System.getProperty("file.separator");
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (tempFileName.charAt(tempFileName.length() - 1) == separator
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .charAt(0)) {
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    tempFileName = Support_PlatformFile.getNewPlatformFile(
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            tempFileName, "gabba.zip");
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } else {
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    tempFileName = Support_PlatformFile.getNewPlatformFile(
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            tempFileName + separator, "gabba.zip");
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                File f = new File(tempFileName);
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                f.delete();
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
506