ZipInputStreamTest.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
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.KnownFailure; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.resource.Support_Resources; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileInputStream; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipEntry; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipException; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipInputStream; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipOutputStream; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(ZipInputStream.class) 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ZipInputStreamTest extends TestCase { 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // the file hyts_zipFile.zip used in setup needs to included as a resource 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ZipEntry zentry; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ZipInputStream zis; 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private byte[] zipBytes; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private byte[] dataBytes = "Some data in my file".getBytes(); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setUp() { 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project InputStream is = Support_Resources.getStream("hyts_ZipFile.zip"); 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (is == null) { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("file hyts_ZipFile.zip can not be found"); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis = new ZipInputStream(is); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream bos = new ByteArrayOutputStream(); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipOutputStream zos = new ZipOutputStream(bos); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipEntry entry = new ZipEntry("myFile"); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zos.putNextEntry(entry); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zos.write(dataBytes); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zos.closeEntry(); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zos.close(); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zipBytes = bos.toByteArray(); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Exception during ZipFile setup:"); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project e.printStackTrace(); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void tearDown() { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zis != null) { 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#ZipInputStream(java.io.InputStream) 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "ZipInputStream", 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.InputStream.class} 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_ConstructorLjava_io_InputStream() throws Exception { 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.closeEntry(); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#close() 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "close", 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_close() { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] rbuf = new byte[10]; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.read(rbuf, 0, 1); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Read data after stream was closed"); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#close() 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks calling method two times", 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "close", 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_close2() throws Exception { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Regression for HARMONY-1101 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // another call to close should NOT cause an exception 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#closeEntry() 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "closeEntry", 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_closeEntry() throws Exception { 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.closeEntry(); 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.closeEntry(); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(new File(resources, 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Broken_manifest.jar")); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < 6; i++) { 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.closeEntry(); 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipException expected"); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ZipException ee) { 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "close", 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @KnownFailure("The behaviour is different from RI, but not neccessarily wrong.") 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_closeAfterException() throws Exception { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(new File(resources, 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Broken_manifest.jar")); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < 6; i++) { 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipException expected"); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ZipException ee) { 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.close(); // Android throws exception here, but RI only when getNextEntry/read/skip are called. 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#getNextEntry() 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getNextEntry", 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_getNextEntry() throws Exception { 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull("getNextEntry failed", zis.getNextEntry()); 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(new File(resources, 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Broken_manifest.jar")); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < 6; i++) { 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipException expected"); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ZipException ee) { 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.close(); // Android throws exception here, already! 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); // But RI here, only! 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#read(byte[], int, int) 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "read", 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class, int.class, int.class} 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_read$BII() throws Exception { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] rbuf = new byte[(int) zentry.getSize()]; 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int r = zis.read(rbuf, 0, rbuf.length); 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new String(rbuf, 0, r); 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Failed to read entry", 12, r); 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(new File(resources, 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Broken_manifest.jar")); 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rbuf = new byte[100]; 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.read(rbuf, 10, 90); 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipException expected"); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ZipException ee) { 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.close(); // Android throws exception here, already! 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.read(rbuf, 10, 90); // But RI here, only! 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.util.zip.ZipInputStream#skip(long) 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "skip", 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {long.class} 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_skipJ() throws Exception { 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] rbuf = new byte[(int) zentry.getSize()]; 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.skip(2); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int r = zis.read(rbuf, 0, rbuf.length); 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Failed to skip data", 10, r); 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zentry = zis.getNextEntry(); 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long s = zis.skip(1025); 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("invalid skip: " + s, s == 1025); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream( 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zipBytes)); 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.getNextEntry(); 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project long skipLen = dataBytes.length / 2; 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Assert 0: failed valid skip", skipLen, zis.skip(skipLen)); 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.skip(dataBytes.length); 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Assert 1: performed invalid skip", 0, zis.skip(1)); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("Assert 2: failed zero len skip", 0, zis.skip(0)); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.skip(-1); 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Assert 3: Expected Illegal argument exception"); 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(new File(resources, 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Broken_manifest.jar")); 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.skip(10); 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipException expected"); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ZipException ee) { 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.close(); // Android throws exception here, already! 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.skip(10); // But RI here, only! 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "available", 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @KnownFailure("Needs investigation!!!") 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_available() throws Exception { 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File fl = new File(resources, "Broken_manifest.jar"); 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(fl); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis1 = new ZipInputStream(fis); 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectSystem.out.println(fl.length()); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (i = 0; i < fl.length(); i++) { 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//System.out.println(i); 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.skip(1); 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//System.out.println("Skipped 1"); 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint avail = zis1.available(); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//System.out.println(avail); 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zis1.available() == 0) break; // RI breaks at i = 0 already; Android loops till the end! 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project//System.out.println("Looping..."); 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (i == fl.length()) { 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ZipInputStream.available or ZipInputStream.skip does not working properly"); 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(zis1.available() == 0); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.skip(1); 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(zis.available() == 0); 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.close(); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.available(); 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException expected"); 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException ee) { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // expected 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class Mock_ZipInputStream extends ZipInputStream { 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean createFlag = false; 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Mock_ZipInputStream(InputStream arg0) { 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(arg0); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean getCreateFlag() { 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return createFlag; 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected ZipEntry createZipEntry(String name) { 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project createFlag = true; 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.createZipEntry(name); 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "createZipEntry", 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.String.class} 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_createZipEntryLjava_lang_String() throws Exception { 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File resources = Support_Resources.createTempFolder(); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_Resources.copyFile(resources, null, "Broken_manifest.jar"); 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File fl = new File(resources, "Broken_manifest.jar"); 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = new FileInputStream(fl); 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mock_ZipInputStream zis1 = new Mock_ZipInputStream(fis); 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(zis1.getCreateFlag()); 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis1.getNextEntry(); 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(zis1.getCreateFlag()); 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 420