You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by gi...@apache.org on 2017/11/29 16:18:06 UTC
[02/21] ant git commit: Normalise tabulation and line breaks
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java b/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java
index 9b06a6a..873b3f5 100644
--- a/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java
+++ b/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java
@@ -1,163 +1,163 @@
-/*
- * 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.tools.zip;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * JUnit testcases for org.apache.tools.zip.AsiExtraField.
- *
- */
-public class AsiExtraFieldTest implements UnixStat {
-
- /**
- * Test file mode magic.
- */
- @Test
- public void testModes() {
- AsiExtraField a = new AsiExtraField();
- a.setMode(0123);
- assertEquals("plain file", 0100123, a.getMode());
- a.setDirectory(true);
- assertEquals("directory", 040123, a.getMode());
- a.setLinkedFile("test");
- assertEquals("symbolic link", 0120123, a.getMode());
- }
-
- /**
- * Test content.
- */
- @Test
- public void testContent() {
- AsiExtraField a = new AsiExtraField();
- a.setMode(0123);
- a.setUserId(5);
- a.setGroupId(6);
- byte[] b = a.getLocalFileDataData();
-
- // CRC manually calculated, sorry
- byte[] expect = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
- 0123, (byte)0x80, // mode
- 0, 0, 0, 0, // link length
- 5, 0, 6, 0}; // uid, gid
- assertEquals("no link", expect.length, b.length);
- for (int i=0; i<expect.length; i++) {
- assertEquals("no link, byte "+i, expect[i], b[i]);
- }
-
- a.setLinkedFile("test");
- expect = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
- 0123, (byte)0xA0, // mode
- 4, 0, 0, 0, // link length
- 5, 0, 6, 0, // uid, gid
- (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
- b = a.getLocalFileDataData();
- assertEquals("no link", expect.length, b.length);
- for (int i=0; i<expect.length; i++) {
- assertEquals("no link, byte "+i, expect[i], b[i]);
- }
-
- }
-
- /**
- * Test reparse
- */
- @Test
- public void testReparse() throws Exception {
- // CRC manually calculated, sorry
- byte[] data = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
- 0123, (byte)0x80, // mode
- 0, 0, 0, 0, // link length
- 5, 0, 6, 0}; // uid, gid
- AsiExtraField a = new AsiExtraField();
- a.parseFromLocalFileData(data, 0, data.length);
- assertEquals("length plain file", data.length,
- a.getLocalFileDataLength().getValue());
- assertTrue("plain file, no link", !a.isLink());
- assertTrue("plain file, no dir", !a.isDirectory());
- assertEquals("mode plain file", FILE_FLAG | 0123, a.getMode());
- assertEquals("uid plain file", 5, a.getUserId());
- assertEquals("gid plain file", 6, a.getGroupId());
-
- data = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
- 0123, (byte)0xA0, // mode
- 4, 0, 0, 0, // link length
- 5, 0, 6, 0, // uid, gid
- (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
- a = new AsiExtraField();
- a.parseFromLocalFileData(data, 0, data.length);
- assertEquals("length link", data.length,
- a.getLocalFileDataLength().getValue());
- assertTrue("link, is link", a.isLink());
- assertTrue("link, no dir", !a.isDirectory());
- assertEquals("mode link", LINK_FLAG | 0123, a.getMode());
- assertEquals("uid link", 5, a.getUserId());
- assertEquals("gid link", 6, a.getGroupId());
- assertEquals("test", a.getLinkedFile());
-
- data = new byte[] {(byte)0x8E, 0x01, (byte)0xBF, (byte)0x0E, // CRC
- 0123, (byte)0x40, // mode
- 0, 0, 0, 0, // link
- 5, 0, 6, 0}; // uid, gid
- a = new AsiExtraField();
- a.parseFromLocalFileData(data, 0, data.length);
- assertEquals("length dir", data.length,
- a.getLocalFileDataLength().getValue());
- assertTrue("dir, no link", !a.isLink());
- assertTrue("dir, is dir", a.isDirectory());
- assertEquals("mode dir", DIR_FLAG | 0123, a.getMode());
- assertEquals("uid dir", 5, a.getUserId());
- assertEquals("gid dir", 6, a.getGroupId());
-
- data = new byte[] {0, 0, 0, 0, // bad CRC
- 0123, (byte)0x40, // mode
- 0, 0, 0, 0, // link
- 5, 0, 6, 0}; // uid, gid
- a = new AsiExtraField();
- try {
- a.parseFromLocalFileData(data, 0, data.length);
- fail("should raise bad CRC exception");
- } catch (Exception e) {
- assertEquals("bad CRC checksum 0 instead of ebf018e",
- e.getMessage());
- }
- }
-
- @Test
- public void testClone() {
- AsiExtraField s1 = new AsiExtraField();
- s1.setUserId(42);
- s1.setGroupId(12);
- s1.setLinkedFile("foo");
- s1.setMode(0644);
- s1.setDirectory(true);
- AsiExtraField s2 = (AsiExtraField) s1.clone();
- assertNotSame(s1, s2);
- assertEquals(s1.getUserId(), s2.getUserId());
- assertEquals(s1.getGroupId(), s2.getGroupId());
- assertEquals(s1.getLinkedFile(), s2.getLinkedFile());
- assertEquals(s1.getMode(), s2.getMode());
- assertEquals(s1.isDirectory(), s2.isDirectory());
- }
-}
+/*
+ * 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.tools.zip;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit testcases for org.apache.tools.zip.AsiExtraField.
+ *
+ */
+public class AsiExtraFieldTest implements UnixStat {
+
+ /**
+ * Test file mode magic.
+ */
+ @Test
+ public void testModes() {
+ AsiExtraField a = new AsiExtraField();
+ a.setMode(0123);
+ assertEquals("plain file", 0100123, a.getMode());
+ a.setDirectory(true);
+ assertEquals("directory", 040123, a.getMode());
+ a.setLinkedFile("test");
+ assertEquals("symbolic link", 0120123, a.getMode());
+ }
+
+ /**
+ * Test content.
+ */
+ @Test
+ public void testContent() {
+ AsiExtraField a = new AsiExtraField();
+ a.setMode(0123);
+ a.setUserId(5);
+ a.setGroupId(6);
+ byte[] b = a.getLocalFileDataData();
+
+ // CRC manually calculated, sorry
+ byte[] expect = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
+ 0123, (byte)0x80, // mode
+ 0, 0, 0, 0, // link length
+ 5, 0, 6, 0}; // uid, gid
+ assertEquals("no link", expect.length, b.length);
+ for (int i=0; i<expect.length; i++) {
+ assertEquals("no link, byte "+i, expect[i], b[i]);
+ }
+
+ a.setLinkedFile("test");
+ expect = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
+ 0123, (byte)0xA0, // mode
+ 4, 0, 0, 0, // link length
+ 5, 0, 6, 0, // uid, gid
+ (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
+ b = a.getLocalFileDataData();
+ assertEquals("no link", expect.length, b.length);
+ for (int i=0; i<expect.length; i++) {
+ assertEquals("no link, byte "+i, expect[i], b[i]);
+ }
+
+ }
+
+ /**
+ * Test reparse
+ */
+ @Test
+ public void testReparse() throws Exception {
+ // CRC manually calculated, sorry
+ byte[] data = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
+ 0123, (byte)0x80, // mode
+ 0, 0, 0, 0, // link length
+ 5, 0, 6, 0}; // uid, gid
+ AsiExtraField a = new AsiExtraField();
+ a.parseFromLocalFileData(data, 0, data.length);
+ assertEquals("length plain file", data.length,
+ a.getLocalFileDataLength().getValue());
+ assertTrue("plain file, no link", !a.isLink());
+ assertTrue("plain file, no dir", !a.isDirectory());
+ assertEquals("mode plain file", FILE_FLAG | 0123, a.getMode());
+ assertEquals("uid plain file", 5, a.getUserId());
+ assertEquals("gid plain file", 6, a.getGroupId());
+
+ data = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
+ 0123, (byte)0xA0, // mode
+ 4, 0, 0, 0, // link length
+ 5, 0, 6, 0, // uid, gid
+ (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
+ a = new AsiExtraField();
+ a.parseFromLocalFileData(data, 0, data.length);
+ assertEquals("length link", data.length,
+ a.getLocalFileDataLength().getValue());
+ assertTrue("link, is link", a.isLink());
+ assertTrue("link, no dir", !a.isDirectory());
+ assertEquals("mode link", LINK_FLAG | 0123, a.getMode());
+ assertEquals("uid link", 5, a.getUserId());
+ assertEquals("gid link", 6, a.getGroupId());
+ assertEquals("test", a.getLinkedFile());
+
+ data = new byte[] {(byte)0x8E, 0x01, (byte)0xBF, (byte)0x0E, // CRC
+ 0123, (byte)0x40, // mode
+ 0, 0, 0, 0, // link
+ 5, 0, 6, 0}; // uid, gid
+ a = new AsiExtraField();
+ a.parseFromLocalFileData(data, 0, data.length);
+ assertEquals("length dir", data.length,
+ a.getLocalFileDataLength().getValue());
+ assertTrue("dir, no link", !a.isLink());
+ assertTrue("dir, is dir", a.isDirectory());
+ assertEquals("mode dir", DIR_FLAG | 0123, a.getMode());
+ assertEquals("uid dir", 5, a.getUserId());
+ assertEquals("gid dir", 6, a.getGroupId());
+
+ data = new byte[] {0, 0, 0, 0, // bad CRC
+ 0123, (byte)0x40, // mode
+ 0, 0, 0, 0, // link
+ 5, 0, 6, 0}; // uid, gid
+ a = new AsiExtraField();
+ try {
+ a.parseFromLocalFileData(data, 0, data.length);
+ fail("should raise bad CRC exception");
+ } catch (Exception e) {
+ assertEquals("bad CRC checksum 0 instead of ebf018e",
+ e.getMessage());
+ }
+ }
+
+ @Test
+ public void testClone() {
+ AsiExtraField s1 = new AsiExtraField();
+ s1.setUserId(42);
+ s1.setGroupId(12);
+ s1.setLinkedFile("foo");
+ s1.setMode(0644);
+ s1.setDirectory(true);
+ AsiExtraField s2 = (AsiExtraField) s1.clone();
+ assertNotSame(s1, s2);
+ assertEquals(s1.getUserId(), s2.getUserId());
+ assertEquals(s1.getGroupId(), s2.getGroupId());
+ assertEquals(s1.getLinkedFile(), s2.getLinkedFile());
+ assertEquals(s1.getMode(), s2.getMode());
+ assertEquals(s1.isDirectory(), s2.isDirectory());
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java b/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java
index 3d82698..95a6779 100644
--- a/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java
+++ b/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java
@@ -1,210 +1,210 @@
-/*
- * 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.tools.zip;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ExtraFieldUtils.
- *
- */
-public class ExtraFieldUtilsTest implements UnixStat {
-
- /**
- * Header-ID of a ZipExtraField not supported by Ant.
- *
- * <p>Used to be ZipShort(1) but this is the ID of the Zip64 extra
- * field.</p>
- */
- static final ZipShort UNRECOGNIZED_HEADER = new ZipShort(0x5555);
-
- private AsiExtraField a;
- private UnrecognizedExtraField dummy;
- private byte[] data;
- private byte[] aLocal;
-
- @Before
- public void setUp() {
- a = new AsiExtraField();
- a.setMode(0755);
- a.setDirectory(true);
- dummy = new UnrecognizedExtraField();
- dummy.setHeaderId(UNRECOGNIZED_HEADER);
- dummy.setLocalFileDataData(new byte[] {0});
- dummy.setCentralDirectoryData(new byte[] {0});
-
- aLocal = a.getLocalFileDataData();
- byte[] dummyLocal = dummy.getLocalFileDataData();
- data = new byte[4 + aLocal.length + 4 + dummyLocal.length];
- System.arraycopy(a.getHeaderId().getBytes(), 0, data, 0, 2);
- System.arraycopy(a.getLocalFileDataLength().getBytes(), 0, data, 2, 2);
- System.arraycopy(aLocal, 0, data, 4, aLocal.length);
- System.arraycopy(dummy.getHeaderId().getBytes(), 0, data,
- 4+aLocal.length, 2);
- System.arraycopy(dummy.getLocalFileDataLength().getBytes(), 0, data,
- 4+aLocal.length+2, 2);
- System.arraycopy(dummyLocal, 0, data,
- 4+aLocal.length+4, dummyLocal.length);
-
- }
-
- /**
- * test parser.
- */
- @Test
- public void testParse() throws Exception {
- ZipExtraField[] ze = ExtraFieldUtils.parse(data);
- assertEquals("number of fields", 2, ze.length);
- assertTrue("type field 1", ze[0] instanceof AsiExtraField);
- assertEquals("mode field 1", 040755,
- ((AsiExtraField) ze[0]).getMode());
- assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
- assertEquals("data length field 2", 1,
- ze[1].getLocalFileDataLength().getValue());
-
- byte[] data2 = new byte[data.length-1];
- System.arraycopy(data, 0, data2, 0, data2.length);
- try {
- ExtraFieldUtils.parse(data2);
- fail("data should be invalid");
- } catch (Exception e) {
- assertEquals("message",
- "bad extra field starting at "+(4 + aLocal.length)
- + ". Block length of 1 bytes exceeds remaining data of 0 bytes.",
- e.getMessage());
- }
- }
-
- @Test
- public void testParseWithRead() throws Exception {
- ZipExtraField[] ze =
- ExtraFieldUtils.parse(data, true,
- ExtraFieldUtils.UnparseableExtraField.READ);
- assertEquals("number of fields", 2, ze.length);
- assertTrue("type field 1", ze[0] instanceof AsiExtraField);
- assertEquals("mode field 1", 040755,
- ((AsiExtraField) ze[0]).getMode());
- assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
- assertEquals("data length field 2", 1,
- ze[1].getLocalFileDataLength().getValue());
-
- byte[] data2 = new byte[data.length-1];
- System.arraycopy(data, 0, data2, 0, data2.length);
- ze = ExtraFieldUtils.parse(data2, true,
- ExtraFieldUtils.UnparseableExtraField.READ);
- assertEquals("number of fields", 2, ze.length);
- assertTrue("type field 1", ze[0] instanceof AsiExtraField);
- assertEquals("mode field 1", 040755,
- ((AsiExtraField) ze[0]).getMode());
- assertTrue("type field 2", ze[1] instanceof UnparseableExtraFieldData);
- assertEquals("data length field 2", 4,
- ze[1].getLocalFileDataLength().getValue());
- for (int i = 0; i < 4; i++) {
- assertEquals("byte number " + i,
- data2[data.length - 5 + i],
- ze[1].getLocalFileDataData()[i]);
- }
- }
-
- @Test
- public void testParseWithSkip() throws Exception {
- ZipExtraField[] ze =
- ExtraFieldUtils.parse(data, true,
- ExtraFieldUtils.UnparseableExtraField.SKIP);
- assertEquals("number of fields", 2, ze.length);
- assertTrue("type field 1", ze[0] instanceof AsiExtraField);
- assertEquals("mode field 1", 040755,
- ((AsiExtraField) ze[0]).getMode());
- assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
- assertEquals("data length field 2", 1,
- ze[1].getLocalFileDataLength().getValue());
-
- byte[] data2 = new byte[data.length-1];
- System.arraycopy(data, 0, data2, 0, data2.length);
- ze = ExtraFieldUtils.parse(data2, true,
- ExtraFieldUtils.UnparseableExtraField.SKIP);
- assertEquals("number of fields", 1, ze.length);
- assertTrue("type field 1", ze[0] instanceof AsiExtraField);
- assertEquals("mode field 1", 040755,
- ((AsiExtraField) ze[0]).getMode());
- }
-
- /**
- * Test merge methods
- */
- @Test
- public void testMerge() {
- byte[] local =
- ExtraFieldUtils.mergeLocalFileDataData(new ZipExtraField[] {a, dummy});
- assertEquals("local length", data.length, local.length);
- for (int i=0; i<local.length; i++) {
- assertEquals("local byte "+i, data[i], local[i]);
- }
-
- byte[] dummyCentral = dummy.getCentralDirectoryData();
- byte[] data2 = new byte[4 + aLocal.length + 4 + dummyCentral.length];
- System.arraycopy(data, 0, data2, 0, 4 + aLocal.length + 2);
- System.arraycopy(dummy.getCentralDirectoryLength().getBytes(), 0,
- data2, 4+aLocal.length+2, 2);
- System.arraycopy(dummyCentral, 0, data2,
- 4+aLocal.length+4, dummyCentral.length);
-
-
- byte[] central =
- ExtraFieldUtils.mergeCentralDirectoryData(new ZipExtraField[] {a, dummy});
- assertEquals("central length", data2.length, central.length);
- for (int i=0; i<central.length; i++) {
- assertEquals("central byte "+i, data2[i], central[i]);
- }
-
- }
-
- @Test
- public void testMergeWithUnparseableData() throws Exception {
- ZipExtraField d = new UnparseableExtraFieldData();
- byte[] b = UNRECOGNIZED_HEADER.getBytes();
- d.parseFromLocalFileData(new byte[] {b[0], b[1], 1, 0}, 0, 4);
- byte[] local =
- ExtraFieldUtils.mergeLocalFileDataData(new ZipExtraField[] {a, d});
- assertEquals("local length", data.length - 1, local.length);
- for (int i = 0; i < local.length; i++) {
- assertEquals("local byte " + i, data[i], local[i]);
- }
-
- byte[] dCentral = d.getCentralDirectoryData();
- byte[] data2 = new byte[4 + aLocal.length + dCentral.length];
- System.arraycopy(data, 0, data2, 0, 4 + aLocal.length + 2);
- System.arraycopy(dCentral, 0, data2,
- 4 + aLocal.length, dCentral.length);
-
-
- byte[] central =
- ExtraFieldUtils.mergeCentralDirectoryData(new ZipExtraField[] {a, d});
- assertEquals("central length", data2.length, central.length);
- for (int i = 0; i < central.length; i++) {
- assertEquals("central byte " + i, data2[i], central[i]);
- }
-
- }
-}
+/*
+ * 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.tools.zip;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit 3 testcases for org.apache.tools.zip.ExtraFieldUtils.
+ *
+ */
+public class ExtraFieldUtilsTest implements UnixStat {
+
+ /**
+ * Header-ID of a ZipExtraField not supported by Ant.
+ *
+ * <p>Used to be ZipShort(1) but this is the ID of the Zip64 extra
+ * field.</p>
+ */
+ static final ZipShort UNRECOGNIZED_HEADER = new ZipShort(0x5555);
+
+ private AsiExtraField a;
+ private UnrecognizedExtraField dummy;
+ private byte[] data;
+ private byte[] aLocal;
+
+ @Before
+ public void setUp() {
+ a = new AsiExtraField();
+ a.setMode(0755);
+ a.setDirectory(true);
+ dummy = new UnrecognizedExtraField();
+ dummy.setHeaderId(UNRECOGNIZED_HEADER);
+ dummy.setLocalFileDataData(new byte[] {0});
+ dummy.setCentralDirectoryData(new byte[] {0});
+
+ aLocal = a.getLocalFileDataData();
+ byte[] dummyLocal = dummy.getLocalFileDataData();
+ data = new byte[4 + aLocal.length + 4 + dummyLocal.length];
+ System.arraycopy(a.getHeaderId().getBytes(), 0, data, 0, 2);
+ System.arraycopy(a.getLocalFileDataLength().getBytes(), 0, data, 2, 2);
+ System.arraycopy(aLocal, 0, data, 4, aLocal.length);
+ System.arraycopy(dummy.getHeaderId().getBytes(), 0, data,
+ 4+aLocal.length, 2);
+ System.arraycopy(dummy.getLocalFileDataLength().getBytes(), 0, data,
+ 4+aLocal.length+2, 2);
+ System.arraycopy(dummyLocal, 0, data,
+ 4+aLocal.length+4, dummyLocal.length);
+
+ }
+
+ /**
+ * test parser.
+ */
+ @Test
+ public void testParse() throws Exception {
+ ZipExtraField[] ze = ExtraFieldUtils.parse(data);
+ assertEquals("number of fields", 2, ze.length);
+ assertTrue("type field 1", ze[0] instanceof AsiExtraField);
+ assertEquals("mode field 1", 040755,
+ ((AsiExtraField) ze[0]).getMode());
+ assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
+ assertEquals("data length field 2", 1,
+ ze[1].getLocalFileDataLength().getValue());
+
+ byte[] data2 = new byte[data.length-1];
+ System.arraycopy(data, 0, data2, 0, data2.length);
+ try {
+ ExtraFieldUtils.parse(data2);
+ fail("data should be invalid");
+ } catch (Exception e) {
+ assertEquals("message",
+ "bad extra field starting at "+(4 + aLocal.length)
+ + ". Block length of 1 bytes exceeds remaining data of 0 bytes.",
+ e.getMessage());
+ }
+ }
+
+ @Test
+ public void testParseWithRead() throws Exception {
+ ZipExtraField[] ze =
+ ExtraFieldUtils.parse(data, true,
+ ExtraFieldUtils.UnparseableExtraField.READ);
+ assertEquals("number of fields", 2, ze.length);
+ assertTrue("type field 1", ze[0] instanceof AsiExtraField);
+ assertEquals("mode field 1", 040755,
+ ((AsiExtraField) ze[0]).getMode());
+ assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
+ assertEquals("data length field 2", 1,
+ ze[1].getLocalFileDataLength().getValue());
+
+ byte[] data2 = new byte[data.length-1];
+ System.arraycopy(data, 0, data2, 0, data2.length);
+ ze = ExtraFieldUtils.parse(data2, true,
+ ExtraFieldUtils.UnparseableExtraField.READ);
+ assertEquals("number of fields", 2, ze.length);
+ assertTrue("type field 1", ze[0] instanceof AsiExtraField);
+ assertEquals("mode field 1", 040755,
+ ((AsiExtraField) ze[0]).getMode());
+ assertTrue("type field 2", ze[1] instanceof UnparseableExtraFieldData);
+ assertEquals("data length field 2", 4,
+ ze[1].getLocalFileDataLength().getValue());
+ for (int i = 0; i < 4; i++) {
+ assertEquals("byte number " + i,
+ data2[data.length - 5 + i],
+ ze[1].getLocalFileDataData()[i]);
+ }
+ }
+
+ @Test
+ public void testParseWithSkip() throws Exception {
+ ZipExtraField[] ze =
+ ExtraFieldUtils.parse(data, true,
+ ExtraFieldUtils.UnparseableExtraField.SKIP);
+ assertEquals("number of fields", 2, ze.length);
+ assertTrue("type field 1", ze[0] instanceof AsiExtraField);
+ assertEquals("mode field 1", 040755,
+ ((AsiExtraField) ze[0]).getMode());
+ assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
+ assertEquals("data length field 2", 1,
+ ze[1].getLocalFileDataLength().getValue());
+
+ byte[] data2 = new byte[data.length-1];
+ System.arraycopy(data, 0, data2, 0, data2.length);
+ ze = ExtraFieldUtils.parse(data2, true,
+ ExtraFieldUtils.UnparseableExtraField.SKIP);
+ assertEquals("number of fields", 1, ze.length);
+ assertTrue("type field 1", ze[0] instanceof AsiExtraField);
+ assertEquals("mode field 1", 040755,
+ ((AsiExtraField) ze[0]).getMode());
+ }
+
+ /**
+ * Test merge methods
+ */
+ @Test
+ public void testMerge() {
+ byte[] local =
+ ExtraFieldUtils.mergeLocalFileDataData(new ZipExtraField[] {a, dummy});
+ assertEquals("local length", data.length, local.length);
+ for (int i=0; i<local.length; i++) {
+ assertEquals("local byte "+i, data[i], local[i]);
+ }
+
+ byte[] dummyCentral = dummy.getCentralDirectoryData();
+ byte[] data2 = new byte[4 + aLocal.length + 4 + dummyCentral.length];
+ System.arraycopy(data, 0, data2, 0, 4 + aLocal.length + 2);
+ System.arraycopy(dummy.getCentralDirectoryLength().getBytes(), 0,
+ data2, 4+aLocal.length+2, 2);
+ System.arraycopy(dummyCentral, 0, data2,
+ 4+aLocal.length+4, dummyCentral.length);
+
+
+ byte[] central =
+ ExtraFieldUtils.mergeCentralDirectoryData(new ZipExtraField[] {a, dummy});
+ assertEquals("central length", data2.length, central.length);
+ for (int i=0; i<central.length; i++) {
+ assertEquals("central byte "+i, data2[i], central[i]);
+ }
+
+ }
+
+ @Test
+ public void testMergeWithUnparseableData() throws Exception {
+ ZipExtraField d = new UnparseableExtraFieldData();
+ byte[] b = UNRECOGNIZED_HEADER.getBytes();
+ d.parseFromLocalFileData(new byte[] {b[0], b[1], 1, 0}, 0, 4);
+ byte[] local =
+ ExtraFieldUtils.mergeLocalFileDataData(new ZipExtraField[] {a, d});
+ assertEquals("local length", data.length - 1, local.length);
+ for (int i = 0; i < local.length; i++) {
+ assertEquals("local byte " + i, data[i], local[i]);
+ }
+
+ byte[] dCentral = d.getCentralDirectoryData();
+ byte[] data2 = new byte[4 + aLocal.length + dCentral.length];
+ System.arraycopy(data, 0, data2, 0, 4 + aLocal.length + 2);
+ System.arraycopy(dCentral, 0, data2,
+ 4 + aLocal.length, dCentral.length);
+
+
+ byte[] central =
+ ExtraFieldUtils.mergeCentralDirectoryData(new ZipExtraField[] {a, d});
+ assertEquals("central length", data2.length, central.length);
+ for (int i = 0; i < central.length; i++) {
+ assertEquals("central byte " + i, data2[i], central[i]);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java b/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java
index 564bdaf..0e51e6b 100644
--- a/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java
+++ b/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java
@@ -1,260 +1,259 @@
-/*
- * 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.tools.zip;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Enumeration;
-import java.util.zip.CRC32;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class UTF8ZipFilesTest {
-
- private static final String UTF_8 = "utf-8";
- private static final String CP437 = "cp437";
- private static final String US_ASCII = "US-ASCII";
- private static final String ASCII_TXT = "ascii.txt";
- private static final String EURO_FOR_DOLLAR_TXT = "\u20AC_for_Dollar.txt";
- private static final String OIL_BARREL_TXT = "\u00D6lf\u00E4sser.txt";
-
- @Test
- public void testUtf8FileRoundtripExplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(UTF_8, true, true);
- }
-
- @Test
- public void testUtf8FileRoundtripNoEFSExplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(UTF_8, false, true);
- }
-
- @Test
- public void testCP437FileRoundtripExplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(CP437, false, true);
- }
-
- @Test
- public void testASCIIFileRoundtripExplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(US_ASCII, false, true);
- }
-
- @Test
- public void testUtf8FileRoundtripImplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(UTF_8, true, false);
- }
-
- @Test
- public void testUtf8FileRoundtripNoEFSImplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(UTF_8, false, false);
- }
-
- @Test
- public void testCP437FileRoundtripImplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(CP437, false, false);
- }
-
- @Test
- public void testASCIIFileRoundtripImplicitUnicodeExtra()
- throws IOException {
- testFileRoundtrip(US_ASCII, false, false);
- }
-
- @Test
- public void testZipFileReadsUnicodeFields() throws IOException {
- File file = File.createTempFile("unicode-test", ".zip");
- ZipFile zf = null;
- try {
- createTestFile(file, US_ASCII, false, true);
- zf = new ZipFile(file, US_ASCII, true);
- assertCanRead(zf, ASCII_TXT);
- assertCanRead(zf, EURO_FOR_DOLLAR_TXT);
- assertCanRead(zf, OIL_BARREL_TXT);
- } finally {
- ZipFile.closeQuietly(zf);
- if (file.exists()) {
- file.delete();
- }
- }
- }
-
- private static void testFileRoundtrip(String encoding, boolean withEFS,
- boolean withExplicitUnicodeExtra)
- throws IOException {
-
- File file = File.createTempFile(encoding + "-test", ".zip");
- try {
- createTestFile(file, encoding, withEFS, withExplicitUnicodeExtra);
- testFile(file, encoding);
- } finally {
- if (file.exists()) {
- file.delete();
- }
- }
- }
-
- private static void createTestFile(File file, String encoding,
- boolean withEFS,
- boolean withExplicitUnicodeExtra)
- throws IOException {
-
- ZipEncoding zipEncoding = ZipEncodingHelper.getZipEncoding(encoding);
-
- ZipOutputStream zos = null;
- try {
- zos = new ZipOutputStream(file);
- zos.setEncoding(encoding);
- zos.setUseLanguageEncodingFlag(withEFS);
- zos.setCreateUnicodeExtraFields(withExplicitUnicodeExtra ?
- ZipOutputStream
- .UnicodeExtraFieldPolicy.NEVER
- : ZipOutputStream
- .UnicodeExtraFieldPolicy.ALWAYS);
-
- ZipEntry ze = new ZipEntry(OIL_BARREL_TXT);
- if (withExplicitUnicodeExtra
- && !zipEncoding.canEncode(ze.getName())) {
-
- ByteBuffer en = zipEncoding.encode(ze.getName());
-
- ze.addExtraField(new UnicodePathExtraField(ze.getName(),
- en.array(),
- en.arrayOffset(),
- en.limit()));
- }
-
- zos.putNextEntry(ze);
- zos.write("Hello, world!".getBytes("US-ASCII"));
- zos.closeEntry();
-
- ze = new ZipEntry(EURO_FOR_DOLLAR_TXT);
- if (withExplicitUnicodeExtra
- && !zipEncoding.canEncode(ze.getName())) {
-
- ByteBuffer en = zipEncoding.encode(ze.getName());
-
- ze.addExtraField(new UnicodePathExtraField(ze.getName(),
- en.array(),
- en.arrayOffset(),
- en.limit()));
- }
-
- zos.putNextEntry(ze);
- zos.write("Give me your money!".getBytes("US-ASCII"));
- zos.closeEntry();
-
- ze = new ZipEntry(ASCII_TXT);
-
- if (withExplicitUnicodeExtra
- && !zipEncoding.canEncode(ze.getName())) {
-
- ByteBuffer en = zipEncoding.encode(ze.getName());
-
- ze.addExtraField(new UnicodePathExtraField(ze.getName(),
- en.array(),
- en.arrayOffset(),
- en.limit()));
- }
-
- zos.putNextEntry(ze);
- zos.write("ascii".getBytes("US-ASCII"));
- zos.closeEntry();
- } finally {
- if (zos != null) {
- try {
- zos.close();
- } catch (IOException e) { /* swallow */ }
- }
- }
- }
-
- private static void testFile(File file, String encoding)
- throws IOException {
- ZipFile zf = null;
- try {
- zf = new ZipFile(file, encoding, false);
-
- Enumeration e = zf.getEntries();
- while (e.hasMoreElements()) {
- ZipEntry ze = (ZipEntry) e.nextElement();
-
- if (ze.getName().endsWith("sser.txt")) {
- assertUnicodeName(ze, OIL_BARREL_TXT, encoding);
-
- } else if (ze.getName().endsWith("_for_Dollar.txt")) {
- assertUnicodeName(ze, EURO_FOR_DOLLAR_TXT, encoding);
- } else if (!ze.getName().equals(ASCII_TXT)) {
- throw new AssertionError("Urecognized ZIP entry with name ["
- + ze.getName() + "] found.");
- }
- }
- } finally {
- ZipFile.closeQuietly(zf);
- }
- }
-
- private static UnicodePathExtraField findUniCodePath(ZipEntry ze) {
- return (UnicodePathExtraField)
- ze.getExtraField(UnicodePathExtraField.UPATH_ID);
- }
-
- private static void assertUnicodeName(ZipEntry ze,
- String expectedName,
- String encoding)
- throws IOException {
- if (!expectedName.equals(ze.getName())) {
- UnicodePathExtraField ucpf = findUniCodePath(ze);
- assertNotNull(ucpf);
-
- ZipEncoding enc = ZipEncodingHelper.getZipEncoding(encoding);
- ByteBuffer ne = enc.encode(ze.getName());
-
- CRC32 crc = new CRC32();
- crc.update(ne.array(),ne.arrayOffset(),ne.limit());
-
- assertEquals(crc.getValue(), ucpf.getNameCRC32());
- assertEquals(expectedName, new String(ucpf.getUnicodeName(),
- UTF_8));
- }
- }
-
- private static void assertCanRead(ZipFile zf, String fileName) throws IOException {
- ZipEntry entry = zf.getEntry(fileName);
- assertNotNull("Entry " + fileName + " doesn't exist", entry);
- InputStream is = zf.getInputStream(entry);
- assertNotNull("InputStream is null", is);
- try {
- is.read();
- } finally {
- is.close();
- }
- }
-
-}
-
+/*
+ * 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.tools.zip;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Enumeration;
+import java.util.zip.CRC32;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class UTF8ZipFilesTest {
+
+ private static final String UTF_8 = "utf-8";
+ private static final String CP437 = "cp437";
+ private static final String US_ASCII = "US-ASCII";
+ private static final String ASCII_TXT = "ascii.txt";
+ private static final String EURO_FOR_DOLLAR_TXT = "\u20AC_for_Dollar.txt";
+ private static final String OIL_BARREL_TXT = "\u00D6lf\u00E4sser.txt";
+
+ @Test
+ public void testUtf8FileRoundtripExplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(UTF_8, true, true);
+ }
+
+ @Test
+ public void testUtf8FileRoundtripNoEFSExplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(UTF_8, false, true);
+ }
+
+ @Test
+ public void testCP437FileRoundtripExplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(CP437, false, true);
+ }
+
+ @Test
+ public void testASCIIFileRoundtripExplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(US_ASCII, false, true);
+ }
+
+ @Test
+ public void testUtf8FileRoundtripImplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(UTF_8, true, false);
+ }
+
+ @Test
+ public void testUtf8FileRoundtripNoEFSImplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(UTF_8, false, false);
+ }
+
+ @Test
+ public void testCP437FileRoundtripImplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(CP437, false, false);
+ }
+
+ @Test
+ public void testASCIIFileRoundtripImplicitUnicodeExtra()
+ throws IOException {
+ testFileRoundtrip(US_ASCII, false, false);
+ }
+
+ @Test
+ public void testZipFileReadsUnicodeFields() throws IOException {
+ File file = File.createTempFile("unicode-test", ".zip");
+ ZipFile zf = null;
+ try {
+ createTestFile(file, US_ASCII, false, true);
+ zf = new ZipFile(file, US_ASCII, true);
+ assertCanRead(zf, ASCII_TXT);
+ assertCanRead(zf, EURO_FOR_DOLLAR_TXT);
+ assertCanRead(zf, OIL_BARREL_TXT);
+ } finally {
+ ZipFile.closeQuietly(zf);
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+ }
+
+ private static void testFileRoundtrip(String encoding, boolean withEFS,
+ boolean withExplicitUnicodeExtra)
+ throws IOException {
+
+ File file = File.createTempFile(encoding + "-test", ".zip");
+ try {
+ createTestFile(file, encoding, withEFS, withExplicitUnicodeExtra);
+ testFile(file, encoding);
+ } finally {
+ if (file.exists()) {
+ file.delete();
+ }
+ }
+ }
+
+ private static void createTestFile(File file, String encoding,
+ boolean withEFS,
+ boolean withExplicitUnicodeExtra)
+ throws IOException {
+
+ ZipEncoding zipEncoding = ZipEncodingHelper.getZipEncoding(encoding);
+
+ ZipOutputStream zos = null;
+ try {
+ zos = new ZipOutputStream(file);
+ zos.setEncoding(encoding);
+ zos.setUseLanguageEncodingFlag(withEFS);
+ zos.setCreateUnicodeExtraFields(withExplicitUnicodeExtra ?
+ ZipOutputStream
+ .UnicodeExtraFieldPolicy.NEVER
+ : ZipOutputStream
+ .UnicodeExtraFieldPolicy.ALWAYS);
+
+ ZipEntry ze = new ZipEntry(OIL_BARREL_TXT);
+ if (withExplicitUnicodeExtra
+ && !zipEncoding.canEncode(ze.getName())) {
+
+ ByteBuffer en = zipEncoding.encode(ze.getName());
+
+ ze.addExtraField(new UnicodePathExtraField(ze.getName(),
+ en.array(),
+ en.arrayOffset(),
+ en.limit()));
+ }
+
+ zos.putNextEntry(ze);
+ zos.write("Hello, world!".getBytes("US-ASCII"));
+ zos.closeEntry();
+
+ ze = new ZipEntry(EURO_FOR_DOLLAR_TXT);
+ if (withExplicitUnicodeExtra
+ && !zipEncoding.canEncode(ze.getName())) {
+
+ ByteBuffer en = zipEncoding.encode(ze.getName());
+
+ ze.addExtraField(new UnicodePathExtraField(ze.getName(),
+ en.array(),
+ en.arrayOffset(),
+ en.limit()));
+ }
+
+ zos.putNextEntry(ze);
+ zos.write("Give me your money!".getBytes("US-ASCII"));
+ zos.closeEntry();
+
+ ze = new ZipEntry(ASCII_TXT);
+
+ if (withExplicitUnicodeExtra
+ && !zipEncoding.canEncode(ze.getName())) {
+
+ ByteBuffer en = zipEncoding.encode(ze.getName());
+
+ ze.addExtraField(new UnicodePathExtraField(ze.getName(),
+ en.array(),
+ en.arrayOffset(),
+ en.limit()));
+ }
+
+ zos.putNextEntry(ze);
+ zos.write("ascii".getBytes("US-ASCII"));
+ zos.closeEntry();
+ } finally {
+ if (zos != null) {
+ try {
+ zos.close();
+ } catch (IOException e) { /* swallow */ }
+ }
+ }
+ }
+
+ private static void testFile(File file, String encoding)
+ throws IOException {
+ ZipFile zf = null;
+ try {
+ zf = new ZipFile(file, encoding, false);
+
+ Enumeration e = zf.getEntries();
+ while (e.hasMoreElements()) {
+ ZipEntry ze = (ZipEntry) e.nextElement();
+
+ if (ze.getName().endsWith("sser.txt")) {
+ assertUnicodeName(ze, OIL_BARREL_TXT, encoding);
+
+ } else if (ze.getName().endsWith("_for_Dollar.txt")) {
+ assertUnicodeName(ze, EURO_FOR_DOLLAR_TXT, encoding);
+ } else if (!ze.getName().equals(ASCII_TXT)) {
+ throw new AssertionError("Urecognized ZIP entry with name ["
+ + ze.getName() + "] found.");
+ }
+ }
+ } finally {
+ ZipFile.closeQuietly(zf);
+ }
+ }
+
+ private static UnicodePathExtraField findUniCodePath(ZipEntry ze) {
+ return (UnicodePathExtraField)
+ ze.getExtraField(UnicodePathExtraField.UPATH_ID);
+ }
+
+ private static void assertUnicodeName(ZipEntry ze,
+ String expectedName,
+ String encoding)
+ throws IOException {
+ if (!expectedName.equals(ze.getName())) {
+ UnicodePathExtraField ucpf = findUniCodePath(ze);
+ assertNotNull(ucpf);
+
+ ZipEncoding enc = ZipEncodingHelper.getZipEncoding(encoding);
+ ByteBuffer ne = enc.encode(ze.getName());
+
+ CRC32 crc = new CRC32();
+ crc.update(ne.array(),ne.arrayOffset(),ne.limit());
+
+ assertEquals(crc.getValue(), ucpf.getNameCRC32());
+ assertEquals(expectedName, new String(ucpf.getUnicodeName(),
+ UTF_8));
+ }
+ }
+
+ private static void assertCanRead(ZipFile zf, String fileName) throws IOException {
+ ZipEntry entry = zf.getEntry(fileName);
+ assertNotNull("Entry " + fileName + " doesn't exist", entry);
+ InputStream is = zf.getInputStream(entry);
+ assertNotNull("InputStream is null", is);
+ try {
+ is.read();
+ } finally {
+ is.close();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java b/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java
index b9eefd5..826e410 100644
--- a/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java
+++ b/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java
@@ -1,152 +1,152 @@
-/*
- * 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.tools.zip;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Test zip encodings.
- */
-public class ZipEncodingTest {
- private static final String UNENC_STRING = "\u2016";
-
- // stress test for internal grow method.
- private static final String BAD_STRING =
- "\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016";
-
- private static final String BAD_STRING_ENC =
- "%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016";
-
- @Test
- public void testSimpleCp437Encoding() throws IOException {
-
- doSimpleEncodingTest("Cp437", null);
- }
-
- @Test
- public void testSimpleCp850Encoding() throws IOException {
-
- doSimpleEncodingTest("Cp850", null);
- }
-
- @Test
- public void testNioCp1252Encoding() throws IOException {
- // CP1252 has some undefined code points, these are
- // the defined ones
- // retrieved by
- // awk '/^0x/ && NF>2 {print $1;}' CP1252.TXT
- byte[] b =
- new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
- 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
- 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
- 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
- 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
- 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
- 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
- 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
- (byte) 0x80, (byte) 0x82, (byte) 0x83, (byte) 0x84,
- (byte) 0x85, (byte) 0x86, (byte) 0x87, (byte) 0x88,
- (byte) 0x89, (byte) 0x8A, (byte) 0x8B, (byte) 0x8C,
- (byte) 0x8E, (byte) 0x91, (byte) 0x92, (byte) 0x93,
- (byte) 0x94, (byte) 0x95, (byte) 0x96, (byte) 0x97,
- (byte) 0x98, (byte) 0x99, (byte) 0x9A, (byte) 0x9B,
- (byte) 0x9C, (byte) 0x9E, (byte) 0x9F, (byte) 0xA0,
- (byte) 0xA1, (byte) 0xA2, (byte) 0xA3, (byte) 0xA4,
- (byte) 0xA5, (byte) 0xA6, (byte) 0xA7, (byte) 0xA8,
- (byte) 0xA9, (byte) 0xAA, (byte) 0xAB, (byte) 0xAC,
- (byte) 0xAD, (byte) 0xAE, (byte) 0xAF, (byte) 0xB0,
- (byte) 0xB1, (byte) 0xB2, (byte) 0xB3, (byte) 0xB4,
- (byte) 0xB5, (byte) 0xB6, (byte) 0xB7, (byte) 0xB8,
- (byte) 0xB9, (byte) 0xBA, (byte) 0xBB, (byte) 0xBC,
- (byte) 0xBD, (byte) 0xBE, (byte) 0xBF, (byte) 0xC0,
- (byte) 0xC1, (byte) 0xC2, (byte) 0xC3, (byte) 0xC4,
- (byte) 0xC5, (byte) 0xC6, (byte) 0xC7, (byte) 0xC8,
- (byte) 0xC9, (byte) 0xCA, (byte) 0xCB, (byte) 0xCC,
- (byte) 0xCD, (byte) 0xCE, (byte) 0xCF, (byte) 0xD0,
- (byte) 0xD1, (byte) 0xD2, (byte) 0xD3, (byte) 0xD4,
- (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8,
- (byte) 0xD9, (byte) 0xDA, (byte) 0xDB, (byte) 0xDC,
- (byte) 0xDD, (byte) 0xDE, (byte) 0xDF, (byte) 0xE0,
- (byte) 0xE1, (byte) 0xE2, (byte) 0xE3, (byte) 0xE4,
- (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8,
- (byte) 0xE9, (byte) 0xEA, (byte) 0xEB, (byte) 0xEC,
- (byte) 0xED, (byte) 0xEE, (byte) 0xEF, (byte) 0xF0,
- (byte) 0xF1, (byte) 0xF2, (byte) 0xF3, (byte) 0xF4,
- (byte) 0xF5, (byte) 0xF6, (byte) 0xF7, (byte) 0xF8,
- (byte) 0xF9, (byte) 0xFA, (byte) 0xFB, (byte) 0xFC,
- (byte) 0xFD, (byte) 0xFE, (byte) 0xFF };
-
- doSimpleEncodingTest("Cp1252",b);
- }
-
- private static void assertByteEquals(byte[] expected, ByteBuffer actual) {
-
- assertEquals(expected.length, actual.limit());
-
- for (int i = 0; i < expected.length; ++i) {
-
- byte a = actual.get();
- assertEquals(expected[i], a);
- }
-
- }
-
- private void doSimpleEncodingTest(String name, byte[] testBytes)
- throws IOException {
-
- ZipEncoding enc = ZipEncodingHelper.getZipEncoding(name);
-
- if (testBytes == null) {
-
- testBytes = new byte[256];
- for (int i = 0; i < 256; ++i) {
- testBytes[i] = (byte) i;
- }
- }
-
- String decoded = enc.decode(testBytes);
-
- assertEquals(true, enc.canEncode(decoded));
-
- ByteBuffer encoded = enc.encode(decoded);
-
- assertByteEquals(testBytes, encoded);
-
- assertEquals(false, enc.canEncode(UNENC_STRING));
- assertByteEquals("%U2016".getBytes("US-ASCII"), enc.encode(UNENC_STRING));
- assertEquals(false, enc.canEncode(BAD_STRING));
- assertByteEquals(BAD_STRING_ENC.getBytes("US-ASCII"),
- enc.encode(BAD_STRING));
- }
-
-}
+/*
+ * 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.tools.zip;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test zip encodings.
+ */
+public class ZipEncodingTest {
+ private static final String UNENC_STRING = "\u2016";
+
+ // stress test for internal grow method.
+ private static final String BAD_STRING =
+ "\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016\u2015\u2016";
+
+ private static final String BAD_STRING_ENC =
+ "%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016%U2015%U2016";
+
+ @Test
+ public void testSimpleCp437Encoding() throws IOException {
+
+ doSimpleEncodingTest("Cp437", null);
+ }
+
+ @Test
+ public void testSimpleCp850Encoding() throws IOException {
+
+ doSimpleEncodingTest("Cp850", null);
+ }
+
+ @Test
+ public void testNioCp1252Encoding() throws IOException {
+ // CP1252 has some undefined code points, these are
+ // the defined ones
+ // retrieved by
+ // awk '/^0x/ && NF>2 {print $1;}' CP1252.TXT
+ byte[] b =
+ new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
+ (byte) 0x80, (byte) 0x82, (byte) 0x83, (byte) 0x84,
+ (byte) 0x85, (byte) 0x86, (byte) 0x87, (byte) 0x88,
+ (byte) 0x89, (byte) 0x8A, (byte) 0x8B, (byte) 0x8C,
+ (byte) 0x8E, (byte) 0x91, (byte) 0x92, (byte) 0x93,
+ (byte) 0x94, (byte) 0x95, (byte) 0x96, (byte) 0x97,
+ (byte) 0x98, (byte) 0x99, (byte) 0x9A, (byte) 0x9B,
+ (byte) 0x9C, (byte) 0x9E, (byte) 0x9F, (byte) 0xA0,
+ (byte) 0xA1, (byte) 0xA2, (byte) 0xA3, (byte) 0xA4,
+ (byte) 0xA5, (byte) 0xA6, (byte) 0xA7, (byte) 0xA8,
+ (byte) 0xA9, (byte) 0xAA, (byte) 0xAB, (byte) 0xAC,
+ (byte) 0xAD, (byte) 0xAE, (byte) 0xAF, (byte) 0xB0,
+ (byte) 0xB1, (byte) 0xB2, (byte) 0xB3, (byte) 0xB4,
+ (byte) 0xB5, (byte) 0xB6, (byte) 0xB7, (byte) 0xB8,
+ (byte) 0xB9, (byte) 0xBA, (byte) 0xBB, (byte) 0xBC,
+ (byte) 0xBD, (byte) 0xBE, (byte) 0xBF, (byte) 0xC0,
+ (byte) 0xC1, (byte) 0xC2, (byte) 0xC3, (byte) 0xC4,
+ (byte) 0xC5, (byte) 0xC6, (byte) 0xC7, (byte) 0xC8,
+ (byte) 0xC9, (byte) 0xCA, (byte) 0xCB, (byte) 0xCC,
+ (byte) 0xCD, (byte) 0xCE, (byte) 0xCF, (byte) 0xD0,
+ (byte) 0xD1, (byte) 0xD2, (byte) 0xD3, (byte) 0xD4,
+ (byte) 0xD5, (byte) 0xD6, (byte) 0xD7, (byte) 0xD8,
+ (byte) 0xD9, (byte) 0xDA, (byte) 0xDB, (byte) 0xDC,
+ (byte) 0xDD, (byte) 0xDE, (byte) 0xDF, (byte) 0xE0,
+ (byte) 0xE1, (byte) 0xE2, (byte) 0xE3, (byte) 0xE4,
+ (byte) 0xE5, (byte) 0xE6, (byte) 0xE7, (byte) 0xE8,
+ (byte) 0xE9, (byte) 0xEA, (byte) 0xEB, (byte) 0xEC,
+ (byte) 0xED, (byte) 0xEE, (byte) 0xEF, (byte) 0xF0,
+ (byte) 0xF1, (byte) 0xF2, (byte) 0xF3, (byte) 0xF4,
+ (byte) 0xF5, (byte) 0xF6, (byte) 0xF7, (byte) 0xF8,
+ (byte) 0xF9, (byte) 0xFA, (byte) 0xFB, (byte) 0xFC,
+ (byte) 0xFD, (byte) 0xFE, (byte) 0xFF };
+
+ doSimpleEncodingTest("Cp1252",b);
+ }
+
+ private static void assertByteEquals(byte[] expected, ByteBuffer actual) {
+
+ assertEquals(expected.length, actual.limit());
+
+ for (int i = 0; i < expected.length; ++i) {
+
+ byte a = actual.get();
+ assertEquals(expected[i], a);
+ }
+
+ }
+
+ private void doSimpleEncodingTest(String name, byte[] testBytes)
+ throws IOException {
+
+ ZipEncoding enc = ZipEncodingHelper.getZipEncoding(name);
+
+ if (testBytes == null) {
+
+ testBytes = new byte[256];
+ for (int i = 0; i < 256; ++i) {
+ testBytes[i] = (byte) i;
+ }
+ }
+
+ String decoded = enc.decode(testBytes);
+
+ assertEquals(true, enc.canEncode(decoded));
+
+ ByteBuffer encoded = enc.encode(decoded);
+
+ assertByteEquals(testBytes, encoded);
+
+ assertEquals(false, enc.canEncode(UNENC_STRING));
+ assertByteEquals("%U2016".getBytes("US-ASCII"), enc.encode(UNENC_STRING));
+ assertEquals(false, enc.canEncode(BAD_STRING));
+ assertByteEquals(BAD_STRING_ENC.getBytes("US-ASCII"),
+ enc.encode(BAD_STRING));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java b/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java
index 804547a..3c21f6f 100644
--- a/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java
+++ b/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java
@@ -1,228 +1,228 @@
-/*
- * 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.tools.zip;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ZipEntry.
- *
- */
-public class ZipEntryTest {
-
-
- /**
- * test handling of extra fields
- */
- @Test
- public void testExtraFields() {
- AsiExtraField a = new AsiExtraField();
- a.setDirectory(true);
- a.setMode(0755);
- UnrecognizedExtraField u = new UnrecognizedExtraField();
- u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- u.setLocalFileDataData(new byte[0]);
-
- ZipEntry ze = new ZipEntry("test/");
- ze.setExtraFields(new ZipExtraField[] {a, u});
- byte[] data1 = ze.getExtra();
- ZipExtraField[] result = ze.getExtraFields();
- assertEquals("first pass", 2, result.length);
- assertSame(a, result[0]);
- assertSame(u, result[1]);
-
- UnrecognizedExtraField u2 = new UnrecognizedExtraField();
- u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- u2.setLocalFileDataData(new byte[] {1});
-
- ze.addExtraField(u2);
- byte[] data2 = ze.getExtra();
- result = ze.getExtraFields();
- assertEquals("second pass", 2, result.length);
- assertSame(a, result[0]);
- assertSame(u2, result[1]);
- assertEquals("length second pass", data1.length+1, data2.length);
-
- UnrecognizedExtraField u3 = new UnrecognizedExtraField();
- u3.setHeaderId(new ZipShort(2));
- u3.setLocalFileDataData(new byte[] {1});
- ze.addExtraField(u3);
- result = ze.getExtraFields();
- assertEquals("third pass", 3, result.length);
-
- ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- byte[] data3 = ze.getExtra();
- result = ze.getExtraFields();
- assertEquals("fourth pass", 2, result.length);
- assertSame(a, result[0]);
- assertSame(u3, result[1]);
- assertEquals("length fourth pass", data2.length, data3.length);
-
- try {
- ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- fail("should be no such element");
- } catch (java.util.NoSuchElementException nse) {
- //TODO assert exception values
- }
- }
-
- /**
- * test handling of extra fields via central directory
- */
- @Test
- public void testExtraFieldMerging() {
- AsiExtraField a = new AsiExtraField();
- a.setDirectory(true);
- a.setMode(0755);
- UnrecognizedExtraField u = new UnrecognizedExtraField();
- u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- u.setLocalFileDataData(new byte[0]);
-
- ZipEntry ze = new ZipEntry("test/");
- ze.setExtraFields(new ZipExtraField[] {a, u});
-
- // merge
- // Header-ID 1 + length 1 + one byte of data
- byte[] b = ExtraFieldUtilsTest.UNRECOGNIZED_HEADER.getBytes();
- ze.setCentralDirectoryExtra(new byte[] {b[0], b[1], 1, 0, 127});
-
- ZipExtraField[] result = ze.getExtraFields();
- assertEquals("first pass", 2, result.length);
- assertSame(a, result[0]);
- assertEquals(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER,
- result[1].getHeaderId());
- assertEquals(new ZipShort(0), result[1].getLocalFileDataLength());
- assertEquals(new ZipShort(1), result[1].getCentralDirectoryLength());
-
- // add new
- // Header-ID 2 + length 0
- ze.setCentralDirectoryExtra(new byte[] {2, 0, 0, 0});
-
- result = ze.getExtraFields();
- assertEquals("second pass", 3, result.length);
-
- // merge
- // Header-ID 2 + length 1 + one byte of data
- ze.setExtra(new byte[] {2, 0, 1, 0, 127});
-
- result = ze.getExtraFields();
- assertEquals("third pass", 3, result.length);
- assertSame(a, result[0]);
- assertEquals(new ZipShort(2), result[2].getHeaderId());
- assertEquals(new ZipShort(1), result[2].getLocalFileDataLength());
- assertEquals(new ZipShort(0), result[2].getCentralDirectoryLength());
- }
-
- /**
- * test handling of extra fields
- */
- @Test
- public void testAddAsFirstExtraField() {
- AsiExtraField a = new AsiExtraField();
- a.setDirectory(true);
- a.setMode(0755);
- UnrecognizedExtraField u = new UnrecognizedExtraField();
- u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- u.setLocalFileDataData(new byte[0]);
-
- ZipEntry ze = new ZipEntry("test/");
- ze.setExtraFields(new ZipExtraField[] {a, u});
- byte[] data1 = ze.getExtra();
-
- UnrecognizedExtraField u2 = new UnrecognizedExtraField();
- u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
- u2.setLocalFileDataData(new byte[] {1});
-
- ze.addAsFirstExtraField(u2);
- byte[] data2 = ze.getExtra();
- ZipExtraField[] result = ze.getExtraFields();
- assertEquals("second pass", 2, result.length);
- assertSame(u2, result[0]);
- assertSame(a, result[1]);
- assertEquals("length second pass", data1.length + 1, data2.length);
-
- UnrecognizedExtraField u3 = new UnrecognizedExtraField();
- u3.setHeaderId(new ZipShort(2));
- u3.setLocalFileDataData(new byte[] {1});
- ze.addAsFirstExtraField(u3);
- result = ze.getExtraFields();
- assertEquals("third pass", 3, result.length);
- assertSame(u3, result[0]);
- assertSame(u2, result[1]);
- assertSame(a, result[2]);
- }
-
- @Test
- public void testUnixMode() {
- ZipEntry ze = new ZipEntry("foo");
- assertEquals(0, ze.getPlatform());
- ze.setUnixMode(0755);
- assertEquals(3, ze.getPlatform());
- assertEquals(0755,
- (ze.getExternalAttributes() >> 16) & 0xFFFF);
- assertEquals(0, ze.getExternalAttributes() & 0xFFFF);
-
- ze.setUnixMode(0444);
- assertEquals(3, ze.getPlatform());
- assertEquals(0444,
- (ze.getExternalAttributes() >> 16) & 0xFFFF);
- assertEquals(1, ze.getExternalAttributes() & 0xFFFF);
-
- ze = new ZipEntry("foo/");
- assertEquals(0, ze.getPlatform());
- ze.setUnixMode(0777);
- assertEquals(3, ze.getPlatform());
- assertEquals(0777,
- (ze.getExternalAttributes() >> 16) & 0xFFFF);
- assertEquals(0x10, ze.getExternalAttributes() & 0xFFFF);
-
- ze.setUnixMode(0577);
- assertEquals(3, ze.getPlatform());
- assertEquals(0577,
- (ze.getExternalAttributes() >> 16) & 0xFFFF);
- assertEquals(0x11, ze.getExternalAttributes() & 0xFFFF);
- }
-
- /**
- * Test case for
- * <a href="https://issues.apache.org/jira/browse/COMPRESS-94"
- * >COMPRESS-94</a>.
- */
- @Test
- public void testNotEquals() {
- ZipEntry entry1 = new ZipEntry("foo");
- ZipEntry entry2 = new ZipEntry("bar");
- assertFalse(entry1.equals(entry2));
- }
-
- @Test
- public void testCopyConstructor() throws Exception {
- ZipEntry archiveEntry = new ZipEntry("fred");
- archiveEntry.setUnixMode(0664);
- archiveEntry.setMethod(ZipEntry.DEFLATED);
- archiveEntry.getGeneralPurposeBit().useStrongEncryption(true);
- ZipEntry copy = new ZipEntry(archiveEntry);
- assertEquals(archiveEntry, copy);
- }
-}
+/*
+ * 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.tools.zip;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit 3 testcases for org.apache.tools.zip.ZipEntry.
+ *
+ */
+public class ZipEntryTest {
+
+
+ /**
+ * test handling of extra fields
+ */
+ @Test
+ public void testExtraFields() {
+ AsiExtraField a = new AsiExtraField();
+ a.setDirectory(true);
+ a.setMode(0755);
+ UnrecognizedExtraField u = new UnrecognizedExtraField();
+ u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ u.setLocalFileDataData(new byte[0]);
+
+ ZipEntry ze = new ZipEntry("test/");
+ ze.setExtraFields(new ZipExtraField[] {a, u});
+ byte[] data1 = ze.getExtra();
+ ZipExtraField[] result = ze.getExtraFields();
+ assertEquals("first pass", 2, result.length);
+ assertSame(a, result[0]);
+ assertSame(u, result[1]);
+
+ UnrecognizedExtraField u2 = new UnrecognizedExtraField();
+ u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ u2.setLocalFileDataData(new byte[] {1});
+
+ ze.addExtraField(u2);
+ byte[] data2 = ze.getExtra();
+ result = ze.getExtraFields();
+ assertEquals("second pass", 2, result.length);
+ assertSame(a, result[0]);
+ assertSame(u2, result[1]);
+ assertEquals("length second pass", data1.length+1, data2.length);
+
+ UnrecognizedExtraField u3 = new UnrecognizedExtraField();
+ u3.setHeaderId(new ZipShort(2));
+ u3.setLocalFileDataData(new byte[] {1});
+ ze.addExtraField(u3);
+ result = ze.getExtraFields();
+ assertEquals("third pass", 3, result.length);
+
+ ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ byte[] data3 = ze.getExtra();
+ result = ze.getExtraFields();
+ assertEquals("fourth pass", 2, result.length);
+ assertSame(a, result[0]);
+ assertSame(u3, result[1]);
+ assertEquals("length fourth pass", data2.length, data3.length);
+
+ try {
+ ze.removeExtraField(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ fail("should be no such element");
+ } catch (java.util.NoSuchElementException nse) {
+ //TODO assert exception values
+ }
+ }
+
+ /**
+ * test handling of extra fields via central directory
+ */
+ @Test
+ public void testExtraFieldMerging() {
+ AsiExtraField a = new AsiExtraField();
+ a.setDirectory(true);
+ a.setMode(0755);
+ UnrecognizedExtraField u = new UnrecognizedExtraField();
+ u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ u.setLocalFileDataData(new byte[0]);
+
+ ZipEntry ze = new ZipEntry("test/");
+ ze.setExtraFields(new ZipExtraField[] {a, u});
+
+ // merge
+ // Header-ID 1 + length 1 + one byte of data
+ byte[] b = ExtraFieldUtilsTest.UNRECOGNIZED_HEADER.getBytes();
+ ze.setCentralDirectoryExtra(new byte[] {b[0], b[1], 1, 0, 127});
+
+ ZipExtraField[] result = ze.getExtraFields();
+ assertEquals("first pass", 2, result.length);
+ assertSame(a, result[0]);
+ assertEquals(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER,
+ result[1].getHeaderId());
+ assertEquals(new ZipShort(0), result[1].getLocalFileDataLength());
+ assertEquals(new ZipShort(1), result[1].getCentralDirectoryLength());
+
+ // add new
+ // Header-ID 2 + length 0
+ ze.setCentralDirectoryExtra(new byte[] {2, 0, 0, 0});
+
+ result = ze.getExtraFields();
+ assertEquals("second pass", 3, result.length);
+
+ // merge
+ // Header-ID 2 + length 1 + one byte of data
+ ze.setExtra(new byte[] {2, 0, 1, 0, 127});
+
+ result = ze.getExtraFields();
+ assertEquals("third pass", 3, result.length);
+ assertSame(a, result[0]);
+ assertEquals(new ZipShort(2), result[2].getHeaderId());
+ assertEquals(new ZipShort(1), result[2].getLocalFileDataLength());
+ assertEquals(new ZipShort(0), result[2].getCentralDirectoryLength());
+ }
+
+ /**
+ * test handling of extra fields
+ */
+ @Test
+ public void testAddAsFirstExtraField() {
+ AsiExtraField a = new AsiExtraField();
+ a.setDirectory(true);
+ a.setMode(0755);
+ UnrecognizedExtraField u = new UnrecognizedExtraField();
+ u.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ u.setLocalFileDataData(new byte[0]);
+
+ ZipEntry ze = new ZipEntry("test/");
+ ze.setExtraFields(new ZipExtraField[] {a, u});
+ byte[] data1 = ze.getExtra();
+
+ UnrecognizedExtraField u2 = new UnrecognizedExtraField();
+ u2.setHeaderId(ExtraFieldUtilsTest.UNRECOGNIZED_HEADER);
+ u2.setLocalFileDataData(new byte[] {1});
+
+ ze.addAsFirstExtraField(u2);
+ byte[] data2 = ze.getExtra();
+ ZipExtraField[] result = ze.getExtraFields();
+ assertEquals("second pass", 2, result.length);
+ assertSame(u2, result[0]);
+ assertSame(a, result[1]);
+ assertEquals("length second pass", data1.length + 1, data2.length);
+
+ UnrecognizedExtraField u3 = new UnrecognizedExtraField();
+ u3.setHeaderId(new ZipShort(2));
+ u3.setLocalFileDataData(new byte[] {1});
+ ze.addAsFirstExtraField(u3);
+ result = ze.getExtraFields();
+ assertEquals("third pass", 3, result.length);
+ assertSame(u3, result[0]);
+ assertSame(u2, result[1]);
+ assertSame(a, result[2]);
+ }
+
+ @Test
+ public void testUnixMode() {
+ ZipEntry ze = new ZipEntry("foo");
+ assertEquals(0, ze.getPlatform());
+ ze.setUnixMode(0755);
+ assertEquals(3, ze.getPlatform());
+ assertEquals(0755,
+ (ze.getExternalAttributes() >> 16) & 0xFFFF);
+ assertEquals(0, ze.getExternalAttributes() & 0xFFFF);
+
+ ze.setUnixMode(0444);
+ assertEquals(3, ze.getPlatform());
+ assertEquals(0444,
+ (ze.getExternalAttributes() >> 16) & 0xFFFF);
+ assertEquals(1, ze.getExternalAttributes() & 0xFFFF);
+
+ ze = new ZipEntry("foo/");
+ assertEquals(0, ze.getPlatform());
+ ze.setUnixMode(0777);
+ assertEquals(3, ze.getPlatform());
+ assertEquals(0777,
+ (ze.getExternalAttributes() >> 16) & 0xFFFF);
+ assertEquals(0x10, ze.getExternalAttributes() & 0xFFFF);
+
+ ze.setUnixMode(0577);
+ assertEquals(3, ze.getPlatform());
+ assertEquals(0577,
+ (ze.getExternalAttributes() >> 16) & 0xFFFF);
+ assertEquals(0x11, ze.getExternalAttributes() & 0xFFFF);
+ }
+
+ /**
+ * Test case for
+ * <a href="https://issues.apache.org/jira/browse/COMPRESS-94"
+ * >COMPRESS-94</a>.
+ */
+ @Test
+ public void testNotEquals() {
+ ZipEntry entry1 = new ZipEntry("foo");
+ ZipEntry entry2 = new ZipEntry("bar");
+ assertFalse(entry1.equals(entry2));
+ }
+
+ @Test
+ public void testCopyConstructor() throws Exception {
+ ZipEntry archiveEntry = new ZipEntry("fred");
+ archiveEntry.setUnixMode(0664);
+ archiveEntry.setMethod(ZipEntry.DEFLATED);
+ archiveEntry.getGeneralPurposeBit().useStrongEncryption(true);
+ ZipEntry copy = new ZipEntry(archiveEntry);
+ assertEquals(archiveEntry, copy);
+ }
+}