blob: 8f37652efe4d37d48df34b22a2e589ab8b1e4d0c [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.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import junit.framework.TestCase;
import tests.support.resource.Support_Resources;
public class InflaterInputStreamTest extends TestCase {
// files hyts_constru(O),hyts_constru(OD),hyts_constru(ODI) needs to be
// included as resources
// android-changed: we removed the parentheses for the benefit of our broken build system.
byte outPutBuf[] = new byte[500];
class MyInflaterInputStream extends InflaterInputStream {
MyInflaterInputStream(InputStream in) {
super(in);
}
MyInflaterInputStream(InputStream in, Inflater infl) {
super(in, infl);
}
MyInflaterInputStream(InputStream in, Inflater infl, int size) {
super(in, infl, size);
}
void myFill() throws IOException {
fill();
}
}
/**
* @tests java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream)
*/
public void test_ConstructorLjava_io_InputStream() throws IOException {
//FIXME This test doesn't pass in Harmony classlib or Sun 5.0_7 RI
/*
int result = 0;
int buffer[] = new int[500];
InputStream infile = Support_Resources
.getStream("hyts_constru_O.txt"); // android-changed
InflaterInputStream inflatIP = new InflaterInputStream(infile);
int i = 0;
while ((result = inflatIP.read()) != -1) {
buffer[i] = result;
i++;
}
inflatIP.close();
*/
}
/**
* @tests java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream,
* java.util.zip.Inflater)
*/
public void test_ConstructorLjava_io_InputStreamLjava_util_zip_Inflater() throws IOException {
byte byteArray[] = new byte[100];
InputStream infile = Support_Resources.getStream("hyts_constru_OD.txt"); // android-changed
Inflater inflate = new Inflater();
InflaterInputStream inflatIP = new InflaterInputStream(infile,
inflate);
inflatIP.read(byteArray, 0, 5);// only suppose to read in 5 bytes
inflatIP.close();
}
/**
* @tests java.util.zip.InflaterInputStream#InflaterInputStream(java.io.InputStream,
* java.util.zip.Inflater, int)
*/
public void test_ConstructorLjava_io_InputStreamLjava_util_zip_InflaterI() throws IOException {
int result = 0;
int buffer[] = new int[500];
InputStream infile = Support_Resources.getStream("hyts_constru_ODI.txt"); // android-changed
Inflater inflate = new Inflater();
InflaterInputStream inflatIP = new InflaterInputStream(infile,
inflate, 1);
int i = 0;
while ((result = inflatIP.read()) != -1) {
buffer[i] = result;
i++;
}
inflatIP.close();
}
/**
* @tests java.util.zip.InflaterInputStream#mark(int)
*/
public void test_markI() {
InputStream is = new ByteArrayInputStream(new byte[10]);
InflaterInputStream iis = new InflaterInputStream(is);
// mark do nothing, do no check
iis.mark(0);
iis.mark(-1);
iis.mark(10000000);
}
/**
* @tests java.util.zip.InflaterInputStream#markSupported()
*/
public void test_markSupported() {
InputStream is = new ByteArrayInputStream(new byte[10]);
InflaterInputStream iis = new InflaterInputStream(is);
assertFalse(iis.markSupported());
assertTrue(is.markSupported());
}
/**
* @tests java.util.zip.InflaterInputStream#read()
*/
public void test_read() throws IOException {
int result = 0;
int buffer[] = new int[500];
byte orgBuffer[] = { 1, 3, 4, 7, 8 };
InputStream infile = Support_Resources
.getStream("hyts_constru_OD.txt"); // android-changed
Inflater inflate = new Inflater();
InflaterInputStream inflatIP = new InflaterInputStream(infile,
inflate);
int i = 0;
while ((result = inflatIP.read()) != -1) {
buffer[i] = result;
i++;
}
inflatIP.close();
for (int j = 0; j < orgBuffer.length; j++) {
assertTrue(
"original compressed data did not equal decompressed data",
buffer[j] == orgBuffer[j]);
}
}
public void testAvailableNonEmptySource() throws Exception {
// this byte[] is a deflation of these bytes: { 1, 3, 4, 6 }
byte[] deflated = { 72, -119, 99, 100, 102, 97, 3, 0, 0, 31, 0, 15, 0 };
InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
// InflaterInputStream.available() returns either 1 or 0, even though
// that contradicts the behavior defined in InputStream.available()
assertEquals(1, in.read());
assertEquals(1, in.available());
assertEquals(3, in.read());
assertEquals(1, in.available());
assertEquals(4, in.read());
assertEquals(1, in.available());
assertEquals(6, in.read());
assertEquals(0, in.available());
assertEquals(-1, in.read());
assertEquals(-1, in.read());
}
public void testAvailableSkip() throws Exception {
// this byte[] is a deflation of these bytes: { 1, 3, 4, 6 }
byte[] deflated = { 72, -119, 99, 100, 102, 97, 3, 0, 0, 31, 0, 15, 0 };
InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
assertEquals(1, in.available());
assertEquals(4, in.skip(4));
assertEquals(0, in.available());
}
public void testAvailableEmptySource() throws Exception {
// this byte[] is a deflation of the empty file
byte[] deflated = { 120, -100, 3, 0, 0, 0, 0, 1 };
InputStream in = new InflaterInputStream(new ByteArrayInputStream(deflated));
assertEquals(-1, in.read());
assertEquals(-1, in.read());
assertEquals(0, in.available());
}
/**
* @tests java.util.zip.InflaterInputStream#read(byte[], int, int)
*/
public void test_read$BII() throws IOException{
byte[] test = new byte[507];
for (int i = 0; i < 256; i++) {
test[i] = (byte) i;
}
for (int i = 256; i < test.length; i++) {
test[i] = (byte) (256 - i);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(baos);
dos.write(test);
dos.close();
InputStream is = new ByteArrayInputStream(baos.toByteArray());
InflaterInputStream iis = new InflaterInputStream(is);
byte[] outBuf = new byte[530];
int result = 0;
while (true) {
result = iis.read(outBuf, 0, 5);
if (result == -1) {
//"EOF was reached";
break;
}
}
try {
iis.read(outBuf, -1, 10);
fail("should throw IOOBE.");
} catch (IndexOutOfBoundsException e) {
// expected;
}
}
public void test_read$BII2() throws IOException {
File resources = Support_Resources.createTempFolder();
Support_Resources.copyFile(resources, null, "Broken_manifest.jar");
FileInputStream fis = new FileInputStream(new File(resources,
"Broken_manifest.jar"));
InflaterInputStream iis = new InflaterInputStream(fis);
byte[] outBuf = new byte[530];
iis.close();
try {
iis.read(outBuf, 0, 5);
fail("IOException expected");
} catch (IOException ee) {
// expected.
}
}
public void test_read$BII3() throws IOException {
File resources = Support_Resources.createTempFolder();
Support_Resources.copyFile(resources, null, "Broken_manifest.jar");
FileInputStream fis = new FileInputStream(new File(resources,
"Broken_manifest.jar"));
InflaterInputStream iis = new InflaterInputStream(fis);
byte[] outBuf = new byte[530];
try {
iis.read();
fail("IOException expected.");
} catch (IOException ee) {
// expected
}
}
/**
* @tests java.util.zip.InflaterInputStream#reset()
*/
public void test_reset() {
InputStream is = new ByteArrayInputStream(new byte[10]);
InflaterInputStream iis = new InflaterInputStream(is);
try {
iis.reset();
fail("Should throw IOException");
} catch (IOException e) {
// correct
}
}
/**
* @tests java.util.zip.InflaterInputStream#skip(long)
*/
public void test_skipJ() throws IOException {
InputStream is = Support_Resources.getStream("hyts_available.tst");
InflaterInputStream iis = new InflaterInputStream(is);
// Tests for skipping a negative number of bytes.
try {
iis.skip(-3);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
// Expected
}
assertEquals("Incorrect Byte Returned.", 5, iis.read());
try {
iis.skip(Integer.MIN_VALUE);
fail("IllegalArgumentException not thrown");
} catch (IllegalArgumentException e) {
// Expected
}
assertEquals("Incorrect Byte Returned.", 4, iis.read());
// Test to make sure the correct number of bytes were skipped
assertEquals("Incorrect Number Of Bytes Skipped.", 3, iis.skip(3));
// Test to see if the number of bytes skipped returned is true.
assertEquals("Incorrect Byte Returned.", 7, iis.read());
assertEquals("Incorrect Number Of Bytes Skipped.", 0, iis.skip(0));
assertEquals("Incorrect Byte Returned.", 0, iis.read());
// Test for skipping more bytes than available in the stream
assertEquals("Incorrect Number Of Bytes Skipped.", 2, iis.skip(4));
assertEquals("Incorrect Byte Returned.", -1, iis.read());
iis.close();
}
/**
* @tests java.util.zip.InflaterInputStream#skip(long)
*/
public void test_skipJ2() throws IOException {
int result = 0;
int buffer[] = new int[100];
byte orgBuffer[] = { 1, 3, 4, 7, 8 };
// testing for negative input to skip
InputStream infile = Support_Resources
.getStream("hyts_constru_OD.txt"); // android-changed
Inflater inflate = new Inflater();
InflaterInputStream inflatIP = new InflaterInputStream(infile,
inflate, 10);
long skip;
try {
skip = inflatIP.skip(Integer.MIN_VALUE);
fail("Expected IllegalArgumentException when skip() is called with negative parameter");
} catch (IllegalArgumentException e) {
// Expected
}
inflatIP.close();
// testing for number of bytes greater than input.
InputStream infile2 = Support_Resources
.getStream("hyts_constru_OD.txt"); // android-changed
InflaterInputStream inflatIP2 = new InflaterInputStream(infile2);
// looked at how many bytes the skip skipped. It is
// 5 and its supposed to be the entire input stream.
skip = inflatIP2.skip(Integer.MAX_VALUE);
// System.out.println(skip);
assertEquals("method skip() returned wrong number of bytes skipped",
5, skip);
// test for skipping of 2 bytes
InputStream infile3 = Support_Resources
.getStream("hyts_constru_OD.txt"); // android-changed
InflaterInputStream inflatIP3 = new InflaterInputStream(infile3);
skip = inflatIP3.skip(2);
assertEquals("the number of bytes returned by skip did not correspond with its input parameters",
2, skip);
int i = 0;
result = 0;
while ((result = inflatIP3.read()) != -1) {
buffer[i] = result;
i++;
}
inflatIP2.close();
for (int j = 2; j < orgBuffer.length; j++) {
assertTrue(
"original compressed data did not equal decompressed data",
buffer[j - 2] == orgBuffer[j]);
}
}
/**
* @tests java.util.zip.InflaterInputStream#available()
*/
public void test_available() throws IOException {
InputStream is = Support_Resources.getStream("hyts_available.tst");
InflaterInputStream iis = new InflaterInputStream(is);
int available;
for (int i = 0; i < 11; i++) {
iis.read();
available = iis.available();
if (available == 0) {
assertEquals("Expected no more bytes to read", -1, iis.read());
} else {
assertEquals("Bytes Available Should Return 1.", 1, available);
}
}
iis.close();
try {
iis.available();
fail("available after close should throw IOException.");
} catch (IOException e) {
// Expected
}
}
/**
* @tests java.util.zip.InflaterInputStream#close()
*/
public void test_close() throws IOException {
InflaterInputStream iin = new InflaterInputStream(
new ByteArrayInputStream(new byte[0]));
iin.close();
// test for exception
iin.close();
}
}