Add test cases for concatenated compressed files
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/compress/trunk@1660151 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
index b459fff..677da4e 100644
--- a/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
+++ b/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
@@ -358,4 +358,9 @@
}
throw new CompressorException("Compressor: " + name + " not found.");
}
+
+ // For Unit tests
+ boolean getDecompressConcatenated() {
+ return decompressConcatenated;
+ }
}
diff --git a/src/test/java/org/apache/commons/compress/DetectCompressorTestCase.java b/src/test/java/org/apache/commons/compress/DetectCompressorTestCase.java
deleted file mode 100644
index 09e7b85..0000000
--- a/src/test/java/org/apache/commons/compress/DetectCompressorTestCase.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.commons.compress;
-
-import static org.apache.commons.compress.AbstractTestCase.getFile;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import junit.framework.TestCase;
-
-import org.apache.commons.compress.compressors.CompressorException;
-import org.apache.commons.compress.compressors.CompressorInputStream;
-import org.apache.commons.compress.compressors.CompressorStreamFactory;
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-import org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
-import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
-
-public final class DetectCompressorTestCase extends TestCase {
-
- public DetectCompressorTestCase(String name) {
- super(name);
- }
-
- final CompressorStreamFactory factory = new CompressorStreamFactory();
-
- public void testDetection() throws Exception {
- CompressorInputStream bzip2 = getStreamFor("bla.txt.bz2");
- assertNotNull(bzip2);
- assertTrue(bzip2 instanceof BZip2CompressorInputStream);
-
- CompressorInputStream gzip = getStreamFor("bla.tgz");
- assertNotNull(gzip);
- assertTrue(gzip instanceof GzipCompressorInputStream);
-
- CompressorInputStream pack200 = getStreamFor("bla.pack");
- assertNotNull(pack200);
- assertTrue(pack200 instanceof Pack200CompressorInputStream);
-
- CompressorInputStream xz = getStreamFor("bla.tar.xz");
- assertNotNull(xz);
- assertTrue(xz instanceof XZCompressorInputStream);
-
- try {
- factory.createCompressorInputStream(new ByteArrayInputStream(new byte[0]));
- fail("No exception thrown for an empty input stream");
- } catch (CompressorException e) {
- // expected
- }
- }
-
- private CompressorInputStream getStreamFor(String resource)
- throws CompressorException, IOException {
- return factory.createCompressorInputStream(
- new BufferedInputStream(new FileInputStream(
- getFile(resource))));
- }
-
-}
diff --git a/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java b/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java
new file mode 100644
index 0000000..9554bdd
--- /dev/null
+++ b/src/test/java/org/apache/commons/compress/compressors/DetectCompressorTestCase.java
@@ -0,0 +1,148 @@
+/*
+ * 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.commons.compress.compressors;
+
+import static org.apache.commons.compress.AbstractTestCase.getFile;
+
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.compress.compressors.CompressorException;
+import org.apache.commons.compress.compressors.CompressorInputStream;
+import org.apache.commons.compress.compressors.CompressorStreamFactory;
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
+import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
+
+@SuppressWarnings("deprecation") // deliberately tests setDecompressConcatenated
+public final class DetectCompressorTestCase extends TestCase {
+
+ public DetectCompressorTestCase(String name) {
+ super(name);
+ }
+
+ final CompressorStreamFactory factory = new CompressorStreamFactory();
+ private static final CompressorStreamFactory factoryTrue = new CompressorStreamFactory(true);
+ private static final CompressorStreamFactory factoryFalse = new CompressorStreamFactory(false);
+
+ // Must be static to allow use in the TestData entries
+ private static final CompressorStreamFactory factorySetTrue;
+ private static final CompressorStreamFactory factorySetFalse;
+
+ static {
+ factorySetTrue = new CompressorStreamFactory();
+ factorySetTrue.setDecompressConcatenated(true);
+ factorySetFalse = new CompressorStreamFactory();
+ factorySetFalse.setDecompressConcatenated(false);
+ }
+
+ static class TestData {
+ final String fileName; // The multiple file name
+ final char[] entryNames; // expected entries ...
+ final CompressorStreamFactory factory; // ... when using this factory
+ final boolean concat; // expected value for decompressConcatenated
+ TestData(String name, char[] names, CompressorStreamFactory factory, boolean concat) {
+ this.fileName = name;
+ this.entryNames = names;
+ this.factory = factory;
+ this.concat = concat;
+ }
+ }
+
+ private final TestData[] tests = {
+ new TestData("multiple.bz2", new char[]{'a','b'}, factoryTrue, true),
+ new TestData("multiple.bz2", new char[]{'a','b'}, factorySetTrue, true),
+ new TestData("multiple.bz2", new char[]{'a'}, factoryFalse, false),
+ new TestData("multiple.bz2", new char[]{'a'}, factorySetFalse, false),
+ new TestData("multiple.bz2", new char[]{'a'}, factory, false),
+
+ new TestData("multiple.gz", new char[]{'a','b'}, factoryTrue, true),
+ new TestData("multiple.gz", new char[]{'a','b'}, factorySetTrue, true),
+ new TestData("multiple.gz", new char[]{'a'}, factoryFalse, false),
+ new TestData("multiple.gz", new char[]{'a'}, factorySetFalse, false),
+ new TestData("multiple.gz", new char[]{'a'}, factory, false),
+
+ new TestData("multiple.xz", new char[]{'a','b'}, factoryTrue, true),
+ new TestData("multiple.xz", new char[]{'a','b'}, factorySetTrue, true),
+ new TestData("multiple.xz", new char[]{'a'}, factoryFalse, false),
+ new TestData("multiple.xz", new char[]{'a'}, factorySetFalse, false),
+ new TestData("multiple.xz", new char[]{'a'}, factory, false),
+ };
+
+ public void testDetection() throws Exception {
+ CompressorInputStream bzip2 = getStreamFor("bla.txt.bz2");
+ assertNotNull(bzip2);
+ assertTrue(bzip2 instanceof BZip2CompressorInputStream);
+
+ CompressorInputStream gzip = getStreamFor("bla.tgz");
+ assertNotNull(gzip);
+ assertTrue(gzip instanceof GzipCompressorInputStream);
+
+ CompressorInputStream pack200 = getStreamFor("bla.pack");
+ assertNotNull(pack200);
+ assertTrue(pack200 instanceof Pack200CompressorInputStream);
+
+ CompressorInputStream xz = getStreamFor("bla.tar.xz");
+ assertNotNull(xz);
+ assertTrue(xz instanceof XZCompressorInputStream);
+
+ try {
+ factory.createCompressorInputStream(new ByteArrayInputStream(new byte[0]));
+ fail("No exception thrown for an empty input stream");
+ } catch (CompressorException e) {
+ // expected
+ }
+ }
+
+ public void testMutiples() throws Exception {
+ for(int i=0; i <tests.length; i++) {
+ TestData test = tests[i];
+ final CompressorStreamFactory fac = test.factory;
+ assertNotNull("Test entry "+i, fac);
+ assertEquals("Test entry "+i, test.concat, fac.getDecompressConcatenated());
+ CompressorInputStream in = getStreamFor(test.fileName, fac);
+ assertNotNull("Test entry "+i,in);
+ for (char entry : test.entryNames) {
+ assertEquals("Test entry" + i, entry, in.read());
+ }
+ assertEquals(0, in.available());
+ assertEquals(-1, in.read());
+ }
+ }
+
+ private CompressorInputStream getStreamFor(String resource)
+ throws CompressorException, IOException {
+ return factory.createCompressorInputStream(
+ new BufferedInputStream(new FileInputStream(
+ getFile(resource))));
+ }
+
+ private CompressorInputStream getStreamFor(String resource, CompressorStreamFactory factory)
+ throws CompressorException, IOException {
+ return factory.createCompressorInputStream(
+ new BufferedInputStream(new FileInputStream(
+ getFile(resource))));
+ }
+
+}