blob: 9754134c441be2422b66ea575ea803d8d7387647 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.archive.tests.java.util.zip;
import java.util.TimeZone;
import java.util.zip.ZipEntry;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import tests.support.resource.Support_Resources;
public class ZipEntryTest extends junit.framework.TestCase {
public byte[] getAllBytesFromStream(InputStream is) throws IOException {
ByteArrayOutputStream bs = new ByteArrayOutputStream();
byte[] buf = new byte[512];
int iRead;
int off;
while (is.available() > 0) {
iRead = is.read(buf, 0, buf.length);
if (iRead > 0) bs.write(buf, 0, iRead);
}
return bs.toByteArray();
}
// zip file hyts_ZipFile.zip must be included as a resource
java.util.zip.ZipEntry zentry;
java.util.zip.ZipFile zfile;
private static final String platformId = System.getProperty(
"com.ibm.oti.configuration", "JDK")
+ System.getProperty("java.vm.version");
static final String tempFileName = platformId + "zfzezi.zip";
long orgSize;
long orgCompressedSize;
long orgCrc;
long orgTime;
String orgComment;
/**
* @tests java.util.zip.ZipEntry#ZipEntry(java.lang.String)
*/
public void test_ConstructorLjava_lang_String() {
// Test for method java.util.zip.ZipEntry(java.lang.String)
zentry = zfile.getEntry("File3.txt");
assertNotNull("Failed to create ZipEntry", zentry);
try {
zentry = zfile.getEntry(null);
fail("NullPointerException not thrown");
} catch (NullPointerException e) {
}
StringBuffer s = new StringBuffer();
for (int i = 0; i < 65535; i++) {
s.append('a');
}
try {
zentry = new ZipEntry(s.toString());
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException During Test.");
}
try {
s.append('a');
zentry = new ZipEntry(s.toString());
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
try {
String n = null;
zentry = new ZipEntry(n);
fail("NullPointerException not thrown");
} catch (NullPointerException e) {
}
}
/**
* @tests java.util.zip.ZipEntry#getComment()
*/
public void test_getComment() {
// Test for method java.lang.String java.util.zip.ZipEntry.getComment()
ZipEntry zipEntry = new ZipEntry("zippy.zip");
assertNull("Incorrect Comment Returned.", zipEntry.getComment());
zipEntry.setComment("This Is A Comment");
assertEquals("Incorrect Comment Returned.",
"This Is A Comment", zipEntry.getComment());
}
/**
* @tests java.util.zip.ZipEntry#getCompressedSize()
*/
public void test_getCompressedSize() {
// Test for method long java.util.zip.ZipEntry.getCompressedSize()
assertTrue("Incorrect compressed size returned", zentry
.getCompressedSize() == orgCompressedSize);
}
/**
* @tests java.util.zip.ZipEntry#getCrc()
*/
public void test_getCrc() {
// Test for method long java.util.zip.ZipEntry.getCrc()
assertTrue("Failed to get Crc", zentry.getCrc() == orgCrc);
}
/**
* @tests java.util.zip.ZipEntry#getExtra()
*/
public void test_getExtra() {
// Test for method byte [] java.util.zip.ZipEntry.getExtra()
assertNull("Incorrect extra information returned",
zentry.getExtra());
byte[] ba = { 'T', 'E', 'S', 'T' };
zentry = new ZipEntry("test.tst");
zentry.setExtra(ba);
assertTrue("Incorrect Extra Information Returned.",
zentry.getExtra() == ba);
}
/**
* @tests java.util.zip.ZipEntry#getMethod()
*/
public void test_getMethod() {
// Test for method int java.util.zip.ZipEntry.getMethod()
zentry = zfile.getEntry("File1.txt");
assertTrue("Incorrect compression method returned",
zentry.getMethod() == java.util.zip.ZipEntry.STORED);
zentry = zfile.getEntry("File3.txt");
assertTrue("Incorrect compression method returned",
zentry.getMethod() == java.util.zip.ZipEntry.DEFLATED);
zentry = new ZipEntry("test.tst");
assertEquals("Incorrect Method Returned.", -1, zentry.getMethod());
}
/**
* @tests java.util.zip.ZipEntry#getName()
*/
public void test_getName() {
// Test for method java.lang.String java.util.zip.ZipEntry.getName()
assertEquals("Incorrect name returned - Note return result somewhat ambiguous in spec",
"File1.txt", zentry.getName());
}
/**
* @tests java.util.zip.ZipEntry#getSize()
*/
public void test_getSize() {
// Test for method long java.util.zip.ZipEntry.getSize()
assertTrue("Incorrect size returned", zentry.getSize() == orgSize);
}
/**
* @tests java.util.zip.ZipEntry#getTime()
*/
public void test_getTime() {
// Test for method long java.util.zip.ZipEntry.getTime()
assertTrue("Failed to get time", zentry.getTime() == orgTime);
}
/**
* @tests java.util.zip.ZipEntry#isDirectory()
*/
public void test_isDirectory() {
// Test for method boolean java.util.zip.ZipEntry.isDirectory()
assertTrue("Entry should not answer true to isDirectory", !zentry
.isDirectory());
zentry = new ZipEntry("Directory/");
assertTrue("Entry should answer true to isDirectory", zentry
.isDirectory());
}
/**
* @tests java.util.zip.ZipEntry#setComment(java.lang.String)
*/
public void test_setCommentLjava_lang_String() {
// Test for method void
// java.util.zip.ZipEntry.setComment(java.lang.String)
zentry = zfile.getEntry("File1.txt");
zentry.setComment("Set comment using api");
assertEquals("Comment not correctly set",
"Set comment using api", zentry.getComment());
String n = null;
zentry.setComment(n);
assertNull("Comment not correctly set", zentry.getComment());
StringBuffer s = new StringBuffer();
for (int i = 0; i < 0xFFFF; i++) {
s.append('a');
}
try {
zentry.setComment(s.toString());
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException During Test.");
}
try {
s.append('a');
zentry.setComment(s.toString());
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
}
/**
* @tests java.util.zip.ZipEntry#setCompressedSize(long)
*/
public void test_setCompressedSizeJ() {
// Test for method void java.util.zip.ZipEntry.setCompressedSize(long)
zentry.setCompressedSize(orgCompressedSize + 10);
assertTrue("Set compressed size failed",
zentry.getCompressedSize() == (orgCompressedSize + 10));
zentry.setCompressedSize(0);
assertEquals("Set compressed size failed",
0, zentry.getCompressedSize());
zentry.setCompressedSize(-25);
assertEquals("Set compressed size failed",
-25, zentry.getCompressedSize());
zentry.setCompressedSize(4294967296l);
assertTrue("Set compressed size failed",
zentry.getCompressedSize() == 4294967296l);
}
/**
* @tests java.util.zip.ZipEntry#setCrc(long)
*/
public void test_setCrcJ() {
// Test for method void java.util.zip.ZipEntry.setCrc(long)
zentry.setCrc(orgCrc + 100);
assertTrue("Failed to set Crc", zentry.getCrc() == (orgCrc + 100));
zentry.setCrc(0);
assertEquals("Failed to set Crc", 0, zentry.getCrc());
try {
zentry.setCrc(-25);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
try {
zentry.setCrc(4294967295l);
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException during test");
}
try {
zentry.setCrc(4294967296l);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
}
/**
* @tests java.util.zip.ZipEntry#setExtra(byte[])
*/
public void test_setExtra$B() {
// Test for method void java.util.zip.ZipEntry.setExtra(byte [])
zentry = zfile.getEntry("File1.txt");
zentry.setExtra("Test setting extra information".getBytes());
assertEquals("Extra information not written properly", "Test setting extra information", new String(zentry
.getExtra(), 0, zentry.getExtra().length)
);
zentry = new ZipEntry("test.tst");
byte[] ba = new byte[0xFFFF];
try {
zentry.setExtra(ba);
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException during test");
}
try {
ba = new byte[0xFFFF + 1];
zentry.setExtra(ba);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
// One constructor
ZipEntry zeInput = new ZipEntry("InputZIP");
byte[] extraB = { 'a', 'b', 'd', 'e' };
zeInput.setExtra(extraB);
assertEquals(extraB, zeInput.getExtra());
assertEquals(extraB[3], zeInput.getExtra()[3]);
assertEquals(extraB.length, zeInput.getExtra().length);
// test another constructor
ZipEntry zeOutput = new ZipEntry(zeInput);
assertEquals(zeInput.getExtra()[3], zeOutput.getExtra()[3]);
assertEquals(zeInput.getExtra().length, zeOutput.getExtra().length);
assertEquals(extraB[3], zeOutput.getExtra()[3]);
assertEquals(extraB.length, zeOutput.getExtra().length);
}
/**
* @tests java.util.zip.ZipEntry#setMethod(int)
*/
public void test_setMethodI() {
// Test for method void java.util.zip.ZipEntry.setMethod(int)
zentry = zfile.getEntry("File3.txt");
zentry.setMethod(ZipEntry.STORED);
assertTrue("Failed to set compression method",
zentry.getMethod() == ZipEntry.STORED);
zentry.setMethod(ZipEntry.DEFLATED);
assertTrue("Failed to set compression method",
zentry.getMethod() == ZipEntry.DEFLATED);
try {
int error = 1;
zentry = new ZipEntry("test.tst");
zentry.setMethod(error);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
}
/**
* @tests java.util.zip.ZipEntry#setSize(long)
*/
public void test_setSizeJ() {
// Test for method void java.util.zip.ZipEntry.setSize(long)
zentry.setSize(orgSize + 10);
assertTrue("Set size failed", zentry.getSize() == (orgSize + 10));
zentry.setSize(0);
assertEquals("Set size failed", 0, zentry.getSize());
try {
zentry.setSize(-25);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
try {
zentry.setCrc(4294967295l);
} catch (IllegalArgumentException e) {
fail("Unexpected IllegalArgumentException during test");
}
try {
zentry.setCrc(4294967296l);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
}
}
/**
* @tests java.util.zip.ZipEntry#setTime(long)
*/
public void test_setTimeJ() {
// Test for method void java.util.zip.ZipEntry.setTime(long)
zentry.setTime(orgTime + 10000);
assertTrue("Test 1: Failed to set time: " + zentry.getTime(), zentry
.getTime() == (orgTime + 10000));
zentry.setTime(orgTime - 10000);
assertTrue("Test 2: Failed to set time: " + zentry.getTime(), zentry
.getTime() == (orgTime - 10000));
TimeZone zone = TimeZone.getDefault();
try {
TimeZone.setDefault(TimeZone.getTimeZone("EST"));
zentry.setTime(0);
assertTrue("Test 3: Failed to set time: " + zentry.getTime(),
zentry.getTime() == 315550800000L);
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
assertTrue("Test 3a: Failed to set time: " + zentry.getTime(),
zentry.getTime() == 315532800000L);
zentry.setTime(0);
TimeZone.setDefault(TimeZone.getTimeZone("EST"));
assertTrue("Test 3b: Failed to set time: " + zentry.getTime(),
zentry.getTime() == 315550800000L);
zentry.setTime(-25);
assertTrue("Test 4: Failed to set time: " + zentry.getTime(),
zentry.getTime() == 315550800000L);
zentry.setTime(4354837200000L);
assertTrue("Test 5: Failed to set time: " + zentry.getTime(),
zentry.getTime() == 315550800000L);
} finally {
TimeZone.setDefault(zone);
}
}
/**
* @tests java.util.zip.ZipEntry#toString()
*/
public void test_toString() {
// Test for method java.lang.String java.util.zip.ZipEntry.toString()
assertTrue("Returned incorrect entry name", zentry.toString().indexOf(
"File1.txt") >= 0);
}
/**
* @tests java.util.zip.ZipEntry#ZipEntry(java.util.zip.ZipEntry)
*/
public void test_ConstructorLjava_util_zip_ZipEntry() {
// Test for method java.util.zip.ZipEntry(util.zip.ZipEntry)
zentry.setSize(2);
zentry.setCompressedSize(4);
zentry.setComment("Testing");
ZipEntry zentry2 = new ZipEntry(zentry);
assertEquals("ZipEntry Created With Incorrect Size.",
2, zentry2.getSize());
assertEquals("ZipEntry Created With Incorrect Compressed Size.", 4, zentry2
.getCompressedSize());
assertEquals("ZipEntry Created With Incorrect Comment.", "Testing", zentry2
.getComment());
assertTrue("ZipEntry Created With Incorrect Crc.",
zentry2.getCrc() == orgCrc);
assertTrue("ZipEntry Created With Incorrect Time.",
zentry2.getTime() == orgTime);
}
/**
* @tests java.util.zip.ZipEntry#clone()
*/
public void test_clone() {
// Test for method java.util.zip.ZipEntry.clone()
Object obj = zentry.clone();
assertTrue("toString()", obj.toString().equals(zentry.toString()));
assertTrue("hashCode()", obj.hashCode() == zentry.hashCode());
// One constructor
ZipEntry zeInput = new ZipEntry("InputZIP");
byte[] extraB = { 'a', 'b', 'd', 'e' };
zeInput.setExtra(extraB);
assertEquals(extraB, zeInput.getExtra());
assertEquals(extraB[3], zeInput.getExtra()[3]);
assertEquals(extraB.length, zeInput.getExtra().length);
// test Clone()
ZipEntry zeOutput = (ZipEntry) zeInput.clone();
assertEquals(zeInput.getExtra()[3], zeOutput.getExtra()[3]);
assertEquals(zeInput.getExtra().length, zeOutput.getExtra().length);
assertEquals(extraB[3], zeOutput.getExtra()[3]);
assertEquals(extraB.length, zeOutput.getExtra().length);
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
@Override
protected void setUp() {
java.io.File f = null;
try {
// Create a local copy of the file since some tests want to alter
// information.
f = new java.io.File(tempFileName);
// Create absolute filename as ZipFile does not resolve using
// user.dir
f = new java.io.File(f.getAbsolutePath());
f.delete();
java.io.InputStream is = Support_Resources
.getStream("hyts_ZipFile.zip");
java.io.FileOutputStream fos = new java.io.FileOutputStream(f);
byte[] rbuf = getAllBytesFromStream(is);
fos.write(rbuf, 0, rbuf.length);
is.close();
fos.close();
zfile = new java.util.zip.ZipFile(f);
zentry = zfile.getEntry("File1.txt");
orgSize = zentry.getSize();
orgCompressedSize = zentry.getCompressedSize();
orgCrc = zentry.getCrc();
orgTime = zentry.getTime();
orgComment = zentry.getComment();
} catch (Exception e) {
System.out.println("Exception during ZipFile setup <"
+ f.getAbsolutePath() + ">: ");
e.printStackTrace();
}
}
/**
* Tears down the fixture, for example, close a network connection. This
* method is called after a test is executed.
*/
@Override
protected void tearDown() {
try {
if (zfile != null) {
zfile.close();
}
java.io.File f = new java.io.File(tempFileName);
f.delete();
} catch (java.io.IOException e) {
System.out.println("Exception during tearDown");
}
}
}