You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2013/12/30 10:55:12 UTC
svn commit: r1554174 - in /commons/proper/compress/branches/compress-2.0: ./
src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/commons/
src/main/java/org/apache/commons/compress2/ src/main/java/org/apac...
Author: bodewig
Date: Mon Dec 30 09:55:11 2013
New Revision: 1554174
URL: http://svn.apache.org/r1554174
Log:
WIP for defining the ArchiveEntry API - need to think about permissions and non-File POSIX stuff
Added:
commons/proper/compress/branches/compress-2.0/findbugs-exclude-filter.xml
- copied, changed from r1553074, commons/proper/compress/trunk/findbugs-exclude-filter.xml
commons/proper/compress/branches/compress-2.0/pmd-ruleset.xml
- copied unchanged from r1553074, commons/proper/compress/trunk/pmd-ruleset.xml
commons/proper/compress/branches/compress-2.0/pom.xml
- copied, changed from r1553074, commons/proper/compress/trunk/pom.xml
commons/proper/compress/branches/compress-2.0/src/
commons/proper/compress/branches/compress-2.0/src/main/
commons/proper/compress/branches/compress-2.0/src/main/java/
commons/proper/compress/branches/compress-2.0/src/main/java/org/
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntry.java
- copied, changed from r1553074, commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveEntry.java
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java (with props)
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java (with props)
commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/package.html
- copied unchanged from r1553074, commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/package.html
commons/proper/compress/branches/compress-2.0/src/test/
commons/proper/compress/branches/compress-2.0/src/test/java/
commons/proper/compress/branches/compress-2.0/src/test/java/org/
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/
commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java (with props)
Modified:
commons/proper/compress/branches/compress-2.0/ (props changed)
Propchange: commons/proper/compress/branches/compress-2.0/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Dec 30 09:55:11 2013
@@ -0,0 +1 @@
+target
Copied: commons/proper/compress/branches/compress-2.0/findbugs-exclude-filter.xml (from r1553074, commons/proper/compress/trunk/findbugs-exclude-filter.xml)
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/findbugs-exclude-filter.xml?p2=commons/proper/compress/branches/compress-2.0/findbugs-exclude-filter.xml&p1=commons/proper/compress/trunk/findbugs-exclude-filter.xml&r1=1553074&r2=1554174&rev=1554174&view=diff
==============================================================================
--- commons/proper/compress/trunk/findbugs-exclude-filter.xml (original)
+++ commons/proper/compress/branches/compress-2.0/findbugs-exclude-filter.xml Mon Dec 30 09:55:11 2013
@@ -23,87 +23,5 @@
-->
<FindBugsFilter>
- <!-- Reason: References to System.out/err == -->
- <Match>
- <Class name="org.apache.commons.compress.archivers.Lister" />
- <Or>
- <Method name="main" />
- <Method name="usage" />
- </Or>
- <Bug pattern="NP_ALWAYS_NULL" />
- </Match>
- <Match>
- <Class name="org.apache.commons.compress.archivers.zip.ZipFile" />
- <Method name="finalize" />
- <Bug pattern="NP_ALWAYS_NULL" />
- </Match>
- <Match>
- <Class name="org.apache.commons.compress.archivers.dump.DumpArchiveUtil" />
- <Method name="dumpBlock" />
- <Bug pattern="NP_ALWAYS_NULL" />
- </Match>
-
- <!-- Reason: fallthrough is intended -->
- <Match>
- <Class name="org.apache.commons.compress.archivers.zip.ExtraFieldUtils" />
- <Method name="parse" />
- <Bug pattern="SF_SWITCH_FALLTHROUGH" />
- </Match>
-
- <!-- Reason: fields unused as documented -->
- <Match>
- <Class name="org.apache.commons.compress.archivers.jar.JarArchiveEntry" />
- <Or>
- <Field name="certificates"/>
- <Field name="manifestAttributes"/>
- </Or>
- <Bug pattern="UWF_NULL_FIELD" />
- </Match>
- <Match>
- <Class name="org.apache.commons.compress.archivers.dump.DumpArchiveEntry" />
- <Field name="summary"/>
- <Bug pattern="UWF_NULL_FIELD" />
- </Match>
-
- <!-- Reason: exception in close swallowed in order to re-throw original -->
- <Match>
- <Class name="org.apache.commons.compress.archivers.zip.ZipFile" />
- <Method name="<init>" />
- <Bug pattern="DE_MIGHT_IGNORE" />
- </Match>
- <Match>
- <Class name="org.apache.commons.compress.compressors.pack200.Pack200CompressorOutputStream" />
- <Method name="finish" />
- <Bug pattern="DE_MIGHT_IGNORE" />
- </Match>
-
- <!-- Reason: skip(Long.MAX_VALUE) called to drain stream completely,
- the class overrides skip to ensure it reads the full amount
- until EOF is reached -->
- <Match>
- <Class name="org.apache.commons.compress.archivers.zip.ZipArchiveInputStream" />
- <Method name="closeEntry" />
- <Bug pattern="SR_NOT_CHECKED" />
- </Match>
-
- <!-- Reason: trying to delete a temporary file that has deleteOnExit set
- anyway -->
- <Match>
- <Class name="org.apache.commons.compress.compressors.pack200.Pack200Utils" />
- <Method name="normalize" />
- <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
- </Match>
- <Match>
- <Class name="org.apache.commons.compress.compressors.pack200.TempFileCachingStreamBridge$1" />
- <Method name="close" />
- <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
- </Match>
-
- <!-- Reason: It is the Pack200*Stream that's going to close it. -->
- <Match>
- <Class name="org.apache.commons.compress.compressors.pack200.TempFileCachingStreamBridge$1" />
- <Method name="<init>" />
- <Bug pattern="OBL_UNSATISFIED_OBLIGATION" />
- </Match>
</FindBugsFilter>
Copied: commons/proper/compress/branches/compress-2.0/pom.xml (from r1553074, commons/proper/compress/trunk/pom.xml)
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/pom.xml?p2=commons/proper/compress/branches/compress-2.0/pom.xml&p1=commons/proper/compress/trunk/pom.xml&r1=1553074&r2=1554174&rev=1554174&view=diff
==============================================================================
--- commons/proper/compress/trunk/pom.xml (original)
+++ commons/proper/compress/branches/compress-2.0/pom.xml Mon Dec 30 09:55:11 2013
@@ -24,8 +24,8 @@
</parent>
<groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>1.7-SNAPSHOT</version>
+ <artifactId>commons-compress2</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
<name>Apache Commons Compress</name>
<url>http://commons.apache.org/proper/commons-compress/</url>
<!-- The description is not indented to make it look better in the release notes -->
@@ -41,7 +41,7 @@ These include: bzip2, gzip, pack200, lzm
<commons.jira.id>COMPRESS</commons.jira.id>
<commons.jira.pid>12310904</commons.jira.pid>
<!-- configuration bits for cutting a release candidate -->
- <commons.release.version>1.6</commons.release.version>
+ <commons.release.version>2.0.0</commons.release.version>
<commons.rc.version>RC1</commons.rc.version>
</properties>
@@ -155,8 +155,8 @@ These include: bzip2, gzip, pack200, lzm
<configuration>
<archive>
<manifestEntries>
- <Main-Class>org.apache.commons.compress.archivers.Lister</Main-Class>
- <Extension-Name>org.apache.commons.compress</Extension-Name>
+ <!--Main-Class>org.apache.commons.compress.archivers.Lister</Main-Class-->
+ <Extension-Name>org.apache.commons.compress2</Extension-Name>
</manifestEntries>
</archive>
</configuration>
Copied: commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntry.java (from r1553074, commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveEntry.java)
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntry.java?p2=commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntry.java&p1=commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveEntry.java&r1=1553074&r2=1554174&rev=1554174&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveEntry.java (original)
+++ commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntry.java Mon Dec 30 09:55:11 2013
@@ -16,44 +16,56 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.commons.compress.archivers;
+package org.apache.commons.compress2.archivers;
import java.util.Date;
+import java.util.Map;
+import java.util.Set;
/**
* Represents an entry of an archive.
+ * @Immutable
*/
public interface ArchiveEntry {
+ /** Special value indicating that the size is unknown */
+ static final long SIZE_UNKNOWN = -1;
+
/**
* Gets the name of the entry in this archive. May refer to a file or directory or other item.
- *
+ *
+ * <p>The name will use '/' as directory separator and end with a '/' if and only if the entry represents a
+ * directory.</p>
+ *
* @return The name of this entry in the archive.
*/
- public String getName();
+ String getName();
/**
- * Gets the uncompressed size of this entry. May be -1 (SIZE_UNKNOWN) if the size is unknown
+ * Gets the uncompressed size of this entry. May be -1 ({@link #SIZE_UNKNOWN}) if the size is unknown.
*
* @return the uncompressed size of this entry.
*/
- public long getSize();
-
- /** Special value indicating that the size is unknown */
- public static final long SIZE_UNKNOWN = -1;
+ long getSize();
/**
* Returns true if this entry refers to a directory.
*
* @return true if this entry refers to a directory.
*/
- public boolean isDirectory();
+ boolean isDirectory();
/**
* Gets the last modified date of this entry.
*
* @return the last modified date of this entry.
- * @since 1.1
*/
- public Date getLastModifiedDate();
+ Date getLastModifiedDate();
+
+ /**
+ * Provides information about the owner.
+ *
+ * @return information about the entry's owner or null if the format doesn't support owner information
+ */
+ OwnerInformation getOwnerInformation();
}
Added: commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java?rev=1554174&view=auto
==============================================================================
--- commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java (added)
+++ commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java Mon Dec 30 09:55:11 2013
@@ -0,0 +1,186 @@
+/*
+ * 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.compress2.archivers;
+
+import java.io.File;
+import java.util.Date;
+
+/**
+ * A parameter object useful for creating new ArchiveEntries.
+ * @NotThreadSafe
+ */
+public class ArchiveEntryParameters {
+
+ private static final char SLASH = '/';
+
+ private String name;
+ private long size = ArchiveEntry.SIZE_UNKNOWN;
+ private boolean dirFlag = false;
+ private Date lastModified;
+ private OwnerInformation owner;
+
+ /**
+ * Creates parameters as a copy of an existing entry.
+ * @param otherEntry the other entry.
+ * @return parameters copied from the other entry
+ */
+ public static ArchiveEntryParameters copyOf(ArchiveEntry otherEntry) {
+ return new ArchiveEntryParameters()
+ .withName(otherEntry.getName())
+ .asDirectory(otherEntry.isDirectory())
+ .withSize(otherEntry.getSize())
+ .withLastModifiedDate(otherEntry.getLastModifiedDate())
+ .withOwnerInformation(otherEntry.getOwnerInformation());
+ }
+
+ /**
+ * Populates parameters from a File instance.
+ * @param file the File to read information from
+ * @return parameters populated from the file instance
+ */
+ public static ArchiveEntryParameters fromFile(File file) {
+ return new ArchiveEntryParameters()
+ .withName(file.getName())
+ .asDirectory(file.isDirectory())
+ .withSize(file.exists() ? file.length() : ArchiveEntry.SIZE_UNKNOWN)
+ .withLastModifiedDate(new Date(file.lastModified()));
+ }
+
+ /**
+ * Sets the name.
+ *
+ * <p>The name will be normalized to only contain '/' separators and end with a '/' if and only if the entry
+ * represents a directory.</p>
+ *
+ * @param name the name of the entry to build
+ * @return the parameters object
+ */
+ public ArchiveEntryParameters withName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Sets the size of the entry.
+ * @param size the size of the entry to build
+ * @return the parameters object
+ */
+ public ArchiveEntryParameters withSize(long size) {
+ this.size = size;
+ return this;
+ }
+
+ /**
+ * Marks the entry to build as a directory.
+ * @param b whether the entry is supposed to represent a directory
+ * @return the parameters object
+ */
+ public ArchiveEntryParameters asDirectory(boolean b) {
+ this.dirFlag = b;
+ return this;
+ }
+
+ /**
+ * Sets the last modified date of the entry.
+ * @param lastModified the last modified date of the entry to build
+ * @return the parameters object
+ */
+ public ArchiveEntryParameters withLastModifiedDate(Date lastModified) {
+ this.lastModified = clone(lastModified);
+ return this;
+ }
+
+ /**
+ * Sets the owner information of the entry.
+ * @param owner the owner information for the entry to build
+ * @return the parameters object
+ */
+ public ArchiveEntryParameters withOwnerInformation(OwnerInformation owner) {
+ this.owner = owner;
+ return this;
+ }
+
+ /**
+ * Gets the configured name.
+ *
+ * <p>The name will use '/' as directory separator and end with a '/' if and only if the entry represents a
+ * directory.</p>
+ *
+ * @return the normalized name
+ */
+ public String getName() {
+ return normalize(name, dirFlag);
+ }
+
+ /**
+ * Gets the configured size or {@link #SIZE_UNKNOWN}) if the size is not configured.
+ *
+ * @return the configured size
+ */
+ public long getSize() {
+ return dirFlag ? 0 : size;
+ }
+
+ /**
+ * Returns true if parameters are configured to represent a directory.
+ *
+ * @return true if this parameters refer to a directory.
+ */
+ public boolean isDirectory() {
+ return dirFlag;
+ }
+
+ /**
+ * Gets the configured last modified date.
+ *
+ * @return the configured last modified date or null if no date was configured.
+ */
+ public Date getLastModifiedDate() {
+ return clone(lastModified);
+ }
+
+ /**
+ * Gets the configured information about the owner.
+ *
+ * @return information about the entry's owner or null if no information was configured
+ */
+ public OwnerInformation getOwnerInformation() {
+ return owner;
+ }
+
+ private static String normalize(String name, boolean dirFlag) {
+ if (name != null) {
+ name = name.replace('\\', SLASH);
+ int nameLength = name.length();
+ boolean endsWithSlash = nameLength > 0 && name.charAt(nameLength - 1) == SLASH;
+ if (endsWithSlash != dirFlag) {
+ if (dirFlag) {
+ name += SLASH;
+ } else {
+ name = name.substring(0, nameLength - 1);
+ }
+ }
+ }
+ return name;
+ }
+
+ private static Date clone(Date d) {
+ return d == null ? null : (Date) d.clone();
+ }
+}
Propchange: commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/ArchiveEntryParameters.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java?rev=1554174&view=auto
==============================================================================
--- commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java (added)
+++ commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java Mon Dec 30 09:55:11 2013
@@ -0,0 +1,87 @@
+/*
+ * 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.compress2.archivers;
+
+/**
+ * Encapsulates owner information of an archive entry.
+ *
+ * <p>Fields that are not supported by the archive format may be null.</p>
+ * @Immutable
+ */
+public class OwnerInformation {
+
+ private final String userName, groupName;
+ private final int userId, groupId;
+
+ /**
+ * Creates an OwnerInformation without names.
+ * @param userId numerical id of the owner
+ * @param groupId numerical id of the group owning the entry
+ */
+ public OwnerInformation(int userId, int groupId) {
+ this(null, null, userId, groupId);
+ }
+
+ /**
+ * Creates an OwnerInformation.
+ * @param userName the name of the owner
+ * @param groupName the name of the group owning the entry
+ * @param userId numerical id of the owner
+ * @param groupId numerical id of the group owning the entry
+ */
+ public OwnerInformation(String userName, String groupName, int userId, int groupId) {
+ this.userName = userName;
+ this.groupName = groupName;
+ this.userId = userId;
+ this.groupId = groupId;
+ }
+
+ /**
+ * Gets the name of the owner.
+ * @return the name of the owner, may be null
+ */
+ public String getUserName() {
+ return userName;
+ }
+
+ /**
+ * Gets the name of the group owning the entry.
+ * @return the name of the group owning the entry, may be null
+ */
+ public String getGroupName() {
+ return groupName;
+ }
+
+ /**
+ * Gets numerical id of the owner.
+ * @return numerical id of the owner
+ */
+ public int getUserId() {
+ return userId;
+ }
+
+ /**
+ * Gets numerical id of the group owning the entry.
+ * @return numerical id of the group owning the entry
+ */
+ public int getGroupId() {
+ return groupId;
+ }
+
+}
Propchange: commons/proper/compress/branches/compress-2.0/src/main/java/org/apache/commons/compress2/archivers/OwnerInformation.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java?rev=1554174&view=auto
==============================================================================
--- commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java (added)
+++ commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java Mon Dec 30 09:55:11 2013
@@ -0,0 +1,132 @@
+/*
+ * 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.compress2.archivers;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import org.junit.Test;
+
+public class ArchiveEntryParametersTest {
+
+ @Test
+ public void defaultValues() {
+ ArchiveEntryParameters p = new ArchiveEntryParameters();
+ assertEquals(null, p.getName());
+ assertEquals(-1, p.getSize());
+ assertEquals(false, p.isDirectory());
+ assertEquals(null, p.getLastModifiedDate());
+ assertEquals(null, p.getOwnerInformation());
+ }
+
+ @Test
+ public void shouldAddTrailingSlashForDirectories() {
+ ArchiveEntryParameters p = new ArchiveEntryParameters()
+ .withName("foo").asDirectory(true);
+ assertEquals("foo/", p.getName());
+ p.withName("foo/");
+ assertEquals("foo/", p.getName());
+ p.withName("");
+ assertEquals("/", p.getName());
+ }
+
+ @Test
+ public void shouldStripTrailingSlashForNonDirectories() {
+ ArchiveEntryParameters p = new ArchiveEntryParameters()
+ .withName("foo").asDirectory(false);
+ assertEquals("foo", p.getName());
+ p.withName("foo/");
+ assertEquals("foo", p.getName());
+ p.withName("");
+ assertEquals("", p.getName());
+ }
+
+ @Test
+ public void sizeShouldBe0ForDirectories() {
+ ArchiveEntryParameters p = new ArchiveEntryParameters()
+ .asDirectory(true);
+ assertEquals(0, p.getSize());
+ p.withSize(42);
+ assertEquals(0, p.getSize());
+ }
+
+ @Test
+ public void copyActuallyCopies() {
+ final Date d = new Date();
+ final OwnerInformation o = new OwnerInformation(17, 4);
+ ArchiveEntryParameters p = ArchiveEntryParameters.copyOf(new ArchiveEntry() {
+ public String getName() {return "baz";}
+ public long getSize() {return 42;}
+ public boolean isDirectory() {return false;}
+ public Date getLastModifiedDate() {return d;}
+ public OwnerInformation getOwnerInformation() {return o;}
+ });
+ assertEquals("baz", p.getName());
+ assertEquals(42, p.getSize());
+ assertEquals(false, p.isDirectory());
+ assertEquals(d, p.getLastModifiedDate());
+ assertEquals(o, p.getOwnerInformation());
+ }
+
+ @Test
+ public void fromExistingFileHasExpectedValues() throws IOException {
+ final Date d = new Date();
+ File f = File.createTempFile("pre", "suf");
+ f.deleteOnExit();
+ f.setLastModified(d.getTime());
+ ArchiveEntryParameters p = ArchiveEntryParameters.fromFile(f);
+ assert p.getName().endsWith("suf");
+ assert p.getName().startsWith("pre");
+ assertEquals(0, p.getSize());
+ assertEquals(false, p.isDirectory());
+ assertWithinTwoSecondsOf(d, p.getLastModifiedDate());
+ assertEquals(null, p.getOwnerInformation());
+ }
+
+ @Test
+ public void fromExistingDirectoryHasExpectedValues() throws IOException {
+ final Date d = new Date();
+ File f = File.createTempFile("pre", "suf");
+ assert f.delete();
+ f.mkdirs();
+ f.deleteOnExit();
+ f.setLastModified(d.getTime());
+ ArchiveEntryParameters p = ArchiveEntryParameters.fromFile(f);
+ assert p.getName().endsWith("suf/");
+ assert p.getName().startsWith("pre");
+ assertEquals(0, p.getSize());
+ assertEquals(true, p.isDirectory());
+ assertWithinTwoSecondsOf(d, p.getLastModifiedDate());
+ assertEquals(null, p.getOwnerInformation());
+ }
+
+ @Test
+ public void fromNonExistingFileHasNoSize() throws IOException {
+ File f = File.createTempFile("pre", "suf");
+ assert f.delete();
+ ArchiveEntryParameters p = ArchiveEntryParameters.fromFile(f);
+ assertEquals(-1, p.getSize());
+ }
+
+ private static void assertWithinTwoSecondsOf(Date expected, Date actual) {
+ assert Math.abs(expected.getTime() - actual.getTime()) < 2000;
+ }
+}
Propchange: commons/proper/compress/branches/compress-2.0/src/test/java/org/apache/commons/compress2/archivers/ArchiveEntryParametersTest.java
------------------------------------------------------------------------------
svn:eol-style = native