Author: bodewig Date: Tue Oct 22 04:51:39 2013 New Revision: 1534491 URL: http://svn.apache.org/r1534491 Log: another edge case for delaying stream creation and more tests
Added: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java (with props) Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java?rev=1534491&r1=1534490&r2=1534491&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java Tue Oct 22 04:51:39 2013 @@ -161,7 +161,7 @@ public class SevenZOutputFile { * @throws IOException on error */ public void write(final byte[] b) throws IOException { - getCurrentOutputStream().write(b); + write(b, 0, b.length); } /** @@ -172,7 +172,9 @@ public class SevenZOutputFile { * @throws IOException on error */ public void write(final byte[] b, final int off, final int len) throws IOException { - getCurrentOutputStream().write(b, off, len); + if (len > 0) { + getCurrentOutputStream().write(b, off, len); + } } /** Added: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java?rev=1534491&view=auto ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java (added) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java Tue Oct 22 04:51:39 2013 @@ -0,0 +1,39 @@ +/* + * 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.archivers.sevenz; + +import org.junit.Test; + +public class SevenZArchiveEntryTest { + + @Test(expected=UnsupportedOperationException.class) + public void shouldThrowIfNoLastModifiedDateIsSet() { + new SevenZArchiveEntry().getLastModifiedDate(); + } + + @Test(expected=UnsupportedOperationException.class) + public void shouldThrowIfNoCreationDateIsSet() { + new SevenZArchiveEntry().getCreationDate(); + } + + @Test(expected=UnsupportedOperationException.class) + public void shouldThrowIfNoAccessDateIsSet() { + new SevenZArchiveEntry().getAccessDate(); + } + +} Propchange: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java?rev=1534491&r1=1534490&r2=1534491&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java Tue Oct 22 04:51:39 2013 @@ -18,6 +18,7 @@ package org.apache.commons.compress.archivers.sevenz; import java.io.File; +import java.io.IOException; import org.apache.commons.compress.AbstractTestCase; public class SevenZFileTest extends AbstractTestCase { @@ -57,6 +58,16 @@ public class SevenZFileTest extends Abst test7zUnarchive(f, null); } + public void testEncryptedArchiveRequiresPassword() throws Exception { + try { + SevenZFile sevenZFile = new SevenZFile(getFile("bla.encrypted.7z")); + fail("shouldn't decrypt without a password"); + } catch (IOException ex) { + assertEquals("Cannot read encrypted files without a password", + ex.getMessage()); + } + } + private void test7zUnarchive(File f, byte[] password) throws Exception { SevenZFile sevenZFile = new SevenZFile(f, password); try { Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java?rev=1534491&r1=1534490&r2=1534491&view=diff ============================================================================== --- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java (original) +++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java Tue Oct 22 04:51:39 2013 @@ -18,6 +18,7 @@ package org.apache.commons.compress.archivers.sevenz; import java.io.File; +import java.io.IOException; import java.util.Calendar; import java.util.Date; import org.apache.commons.compress.AbstractTestCase; @@ -67,8 +68,11 @@ public class SevenZOutputFileTest extend entry = new SevenZArchiveEntry(); entry.setName("dada"); + entry.setHasWindowsAttributes(true); + entry.setWindowsAttributes(17); outArchive.putArchiveEntry(entry); outArchive.write(5); + outArchive.write(42); outArchive.closeArchiveEntry(); outArchive.finish(); @@ -111,8 +115,12 @@ public class SevenZOutputFileTest extend entry = archive.getNextEntry(); assert(entry != null); assertEquals("dada", entry.getName()); - assertEquals(1, entry.getSize()); - assertEquals(5, archive.read()); + assertEquals(2, entry.getSize()); + byte[] content = new byte[2]; + assertEquals(2, archive.read(content)); + assertEquals(5, content[0]); + assertEquals(42, content[1]); + assertEquals(17, entry.getWindowsAttributes()); assert(archive.getNextEntry() == null); } finally { @@ -121,4 +129,46 @@ public class SevenZOutputFileTest extend } + public void testDirectoriesOnly() throws Exception { + File output = new File(dir, "dirs.7z"); + SevenZOutputFile outArchive = new SevenZOutputFile(output); + try { + SevenZArchiveEntry entry = new SevenZArchiveEntry(); + entry.setName("foo/"); + entry.setDirectory(true); + outArchive.putArchiveEntry(entry); + outArchive.closeArchiveEntry(); + } finally { + outArchive.close(); + } + + final SevenZFile archive = new SevenZFile(output); + try { + SevenZArchiveEntry entry = archive.getNextEntry(); + assert(entry != null); + assertEquals("foo/", entry.getName()); + assertTrue(entry.isDirectory()); + assertFalse(entry.isAntiItem()); + + assert(archive.getNextEntry() == null); + } finally { + archive.close(); + } + + } + + public void testCantFinishTwice() throws Exception { + File output = new File(dir, "finish.7z"); + SevenZOutputFile outArchive = new SevenZOutputFile(output); + try { + outArchive.finish(); + outArchive.finish(); + fail("shouldn't be able to call finish twice"); + } catch (IOException ex) { + assertEquals("This archive has already been finished", ex.getMessage()); + } finally { + outArchive.close(); + } + } + }