/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/ZipOutputStreamTest.java
Java | 292 lines | 201 code | 31 blank | 60 comment | 11 complexity | 282a10c9c5e22029b6bd71d73e0c7d7a MD5 | raw file
- /*
- * 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.tests.java.util.zip;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.zip.CRC32;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipException;
- import java.util.zip.ZipInputStream;
- import java.util.zip.ZipOutputStream;
- public class ZipOutputStreamTest extends junit.framework.TestCase {
- ZipOutputStream zos;
- ByteArrayOutputStream bos;
- ZipInputStream zis;
- static final String data = "HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld";
- /**
- * java.util.zip.ZipOutputStream#close()
- */
- public void test_close() throws Exception {
- zos = new ZipOutputStream(bos);
- zos.putNextEntry(new ZipEntry("XX"));
- zos.closeEntry();
- zos.close();
- // Regression for HARMONY-97
- ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream());
- zos.putNextEntry(new ZipEntry("myFile"));
- zos.close();
- zos.close(); // Should be a no-op
- }
- /**
- * java.util.zip.ZipOutputStream#closeEntry()
- */
- public void test_closeEntry() throws IOException {
- ZipEntry ze = new ZipEntry("testEntry");
- ze.setTime(System.currentTimeMillis());
- zos.putNextEntry(ze);
- zos.write("Hello World".getBytes("UTF-8"));
- zos.closeEntry();
- assertTrue("closeEntry failed to update required fields",
- ze.getSize() == 11 && ze.getCompressedSize() == 13);
- }
- /**
- * java.util.zip.ZipOutputStream#finish()
- */
- public void test_finish() throws Exception {
- ZipEntry ze = new ZipEntry("test");
- zos.putNextEntry(ze);
- zos.write("Hello World".getBytes());
- zos.finish();
- assertEquals("Finish failed to closeCurrentEntry", 11, ze.getSize());
- ZipOutputStream zos = new ZipOutputStream(new ByteArrayOutputStream());
- zos.putNextEntry(new ZipEntry("myFile"));
- zos.finish();
- zos.close();
- try {
- zos.finish();
- fail("Assert 0: Expected IOException");
- } catch (IOException e) {
- // Expected
- }
- }
- /**
- * java.util.zip.ZipOutputStream#putNextEntry(java.util.zip.ZipEntry)
- */
- public void test_putNextEntryLjava_util_zip_ZipEntry() throws IOException {
- ZipEntry ze = new ZipEntry("testEntry");
- ze.setTime(System.currentTimeMillis());
- zos.putNextEntry(ze);
- zos.write("Hello World".getBytes());
- zos.closeEntry();
- zos.close();
- zis = new ZipInputStream(new ByteArrayInputStream(bos.toByteArray()));
- ZipEntry ze2 = zis.getNextEntry();
- zis.closeEntry();
- assertEquals("Failed to write correct entry", ze.getName(), ze2.getName());
- assertEquals("Failed to write correct entry", ze.getCrc(), ze2.getCrc());
- try {
- zos.putNextEntry(ze);
- fail("Entry with incorrect setting failed to throw exception");
- } catch (IOException e) {
- // expected
- }
- }
- /**
- * java.util.zip.ZipOutputStream#setComment(java.lang.String)
- */
- public void test_setCommentLjava_lang_String() {
- // There is no way to get the comment back, so no way to determine if
- // the comment is set correct
- zos.setComment("test setComment");
- try {
- zos.setComment(new String(new byte[0xFFFF + 1]));
- fail("Comment over 0xFFFF in length should throw exception");
- } catch (IllegalArgumentException e) {
- // Passed
- }
- }
- /**
- * java.util.zip.ZipOutputStream#setLevel(int)
- */
- public void test_setLevelI() throws IOException {
- ZipEntry ze = new ZipEntry("test");
- zos.putNextEntry(ze);
- zos.write(data.getBytes());
- zos.closeEntry();
- long csize = ze.getCompressedSize();
- zos.setLevel(9); // Max Compression
- zos.putNextEntry(ze = new ZipEntry("test2"));
- zos.write(data.getBytes());
- zos.closeEntry();
- assertTrue("setLevel failed", csize <= ze.getCompressedSize());
- }
- /**
- * java.util.zip.ZipOutputStream#setMethod(int)
- */
- public void test_setMethodI() throws IOException {
- ZipEntry ze = new ZipEntry("test");
- zos.setMethod(ZipOutputStream.STORED);
- CRC32 tempCrc = new CRC32();
- tempCrc.update(data.getBytes());
- ze.setCrc(tempCrc.getValue());
- ze.setSize(new String(data).length());
- zos.putNextEntry(ze);
- zos.write(data.getBytes());
- zos.closeEntry();
- long csize = ze.getCompressedSize();
- zos.setMethod(ZipOutputStream.DEFLATED);
- zos.putNextEntry(ze = new ZipEntry("test2"));
- zos.write(data.getBytes());
- zos.closeEntry();
- assertTrue("setLevel failed", csize >= ze.getCompressedSize());
- }
- /**
- * java.util.zip.ZipOutputStream#write(byte[], int, int)
- */
- public void test_write$BII() throws IOException {
- ZipEntry ze = new ZipEntry("test");
- zos.putNextEntry(ze);
- zos.write(data.getBytes());
- zos.closeEntry();
- zos.close();
- zos = null;
- zis = new ZipInputStream(new ByteArrayInputStream(bos.toByteArray()));
- zis.getNextEntry();
- byte[] b = new byte[data.length()];
- int r = 0;
- int count = 0;
- while (count != b.length && (r = zis.read(b, count, b.length)) != -1) {
- count += r;
- }
- zis.closeEntry();
- assertEquals("Write failed to write correct bytes", new String(b), data);
- File f = File.createTempFile("testZip", "tst");
- f.deleteOnExit();
- FileOutputStream stream = new FileOutputStream(f);
- ZipOutputStream zip = new ZipOutputStream(stream);
- zip.setMethod(ZipEntry.STORED);
- try {
- zip.putNextEntry(new ZipEntry("Second"));
- fail("Not set an entry. Should have thrown ZipException.");
- } catch (ZipException e) {
- // expected -- We have not set an entry
- }
- try {
- // We try to write data without entry
- zip.write(new byte[2]);
- fail("Writing data without an entry. Should have thrown IOException");
- } catch (IOException e) {
- // expected
- }
- try {
- // Try to write without an entry and with nonsense offset and
- // length
- zip.write(new byte[2], 0, 12);
- fail("Writing data without an entry. Should have thrown IndexOutOfBoundsException");
- } catch (IndexOutOfBoundsException e) {
- // expected
- }
- // Regression for HARMONY-4405
- try {
- zip.write(null, 0, -2);
- fail();
- } catch (NullPointerException expected) {
- } catch (IndexOutOfBoundsException expected) {
- }
- try {
- zip.write(null, 0, 2);
- fail();
- } catch (NullPointerException expected) {
- }
- try {
- zip.write(new byte[2], 0, -2);
- fail();
- } catch (IndexOutOfBoundsException expected) {
- }
- // Close stream because ZIP is invalid
- stream.close();
- }
- /**
- * java.util.zip.ZipOutputStream#write(byte[], int, int)
- */
- public void test_write$BII_2() throws IOException {
- // Regression for HARMONY-577
- File f1 = File.createTempFile("testZip1", "tst");
- f1.deleteOnExit();
- FileOutputStream stream1 = new FileOutputStream(f1);
- ZipOutputStream zip1 = new ZipOutputStream(stream1);
- zip1.putNextEntry(new ZipEntry("one"));
- zip1.setMethod(ZipOutputStream.STORED);
- zip1.setMethod(ZipEntry.STORED);
- zip1.write(new byte[2]);
- try {
- zip1.putNextEntry(new ZipEntry("Second"));
- fail("ZipException expected");
- } catch (ZipException e) {
- // expected - We have not set an entry
- }
- try {
- zip1.write(new byte[2]); // try to write data without entry
- fail("expected IOE there");
- } catch (IOException e2) {
- // expected
- }
- zip1.close();
- }
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- zos = new ZipOutputStream(bos = new ByteArrayOutputStream());
- }
- @Override
- protected void tearDown() throws Exception {
- try {
- if (zos != null) {
- zos.close();
- }
- if (zis != null) {
- zis.close();
- }
- } catch (Exception e) {
- }
- super.tearDown();
- }
- }