You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ZipEntryTest.java 7.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. package org.apache.tools.zip;
  19. import junit.framework.TestCase;
  20. /**
  21. * JUnit 3 testcases for org.apache.tools.zip.ZipEntry.
  22. *
  23. */
  24. public class ZipEntryTest extends TestCase {
  25. public ZipEntryTest(String name) {
  26. super(name);
  27. }
  28. /**
  29. * test handling of extra fields
  30. */
  31. public void testExtraFields() {
  32. AsiExtraField a = new AsiExtraField();
  33. a.setDirectory(true);
  34. a.setMode(0755);
  35. UnrecognizedExtraField u = new UnrecognizedExtraField();
  36. u.setHeaderId(new ZipShort(1));
  37. u.setLocalFileDataData(new byte[0]);
  38. ZipEntry ze = new ZipEntry("test/");
  39. ze.setExtraFields(new ZipExtraField[] {a, u});
  40. byte[] data1 = ze.getExtra();
  41. ZipExtraField[] result = ze.getExtraFields();
  42. assertEquals("first pass", 2, result.length);
  43. assertSame(a, result[0]);
  44. assertSame(u, result[1]);
  45. UnrecognizedExtraField u2 = new UnrecognizedExtraField();
  46. u2.setHeaderId(new ZipShort(1));
  47. u2.setLocalFileDataData(new byte[] {1});
  48. ze.addExtraField(u2);
  49. byte[] data2 = ze.getExtra();
  50. result = ze.getExtraFields();
  51. assertEquals("second pass", 2, result.length);
  52. assertSame(a, result[0]);
  53. assertSame(u2, result[1]);
  54. assertEquals("length second pass", data1.length+1, data2.length);
  55. UnrecognizedExtraField u3 = new UnrecognizedExtraField();
  56. u3.setHeaderId(new ZipShort(2));
  57. u3.setLocalFileDataData(new byte[] {1});
  58. ze.addExtraField(u3);
  59. result = ze.getExtraFields();
  60. assertEquals("third pass", 3, result.length);
  61. ze.removeExtraField(new ZipShort(1));
  62. byte[] data3 = ze.getExtra();
  63. result = ze.getExtraFields();
  64. assertEquals("fourth pass", 2, result.length);
  65. assertSame(a, result[0]);
  66. assertSame(u3, result[1]);
  67. assertEquals("length fourth pass", data2.length, data3.length);
  68. try {
  69. ze.removeExtraField(new ZipShort(1));
  70. fail("should be no such element");
  71. } catch (java.util.NoSuchElementException nse) {
  72. }
  73. }
  74. /**
  75. * test handling of extra fields via central directory
  76. */
  77. public void testExtraFieldMerging() {
  78. AsiExtraField a = new AsiExtraField();
  79. a.setDirectory(true);
  80. a.setMode(0755);
  81. UnrecognizedExtraField u = new UnrecognizedExtraField();
  82. u.setHeaderId(new ZipShort(1));
  83. u.setLocalFileDataData(new byte[0]);
  84. ZipEntry ze = new ZipEntry("test/");
  85. ze.setExtraFields(new ZipExtraField[] {a, u});
  86. // merge
  87. // Header-ID 1 + length 1 + one byte of data
  88. ze.setCentralDirectoryExtra(new byte[] {1, 0, 1, 0, 127});
  89. ZipExtraField[] result = ze.getExtraFields();
  90. assertEquals("first pass", 2, result.length);
  91. assertSame(a, result[0]);
  92. assertEquals(new ZipShort(1), result[1].getHeaderId());
  93. assertEquals(new ZipShort(0), result[1].getLocalFileDataLength());
  94. assertEquals(new ZipShort(1), result[1].getCentralDirectoryLength());
  95. // add new
  96. // Header-ID 2 + length 0
  97. ze.setCentralDirectoryExtra(new byte[] {2, 0, 0, 0});
  98. result = ze.getExtraFields();
  99. assertEquals("second pass", 3, result.length);
  100. // merge
  101. // Header-ID 2 + length 1 + one byte of data
  102. ze.setExtra(new byte[] {2, 0, 1, 0, 127});
  103. result = ze.getExtraFields();
  104. assertEquals("third pass", 3, result.length);
  105. assertSame(a, result[0]);
  106. assertEquals(new ZipShort(2), result[2].getHeaderId());
  107. assertEquals(new ZipShort(1), result[2].getLocalFileDataLength());
  108. assertEquals(new ZipShort(0), result[2].getCentralDirectoryLength());
  109. }
  110. /**
  111. * test handling of extra fields
  112. */
  113. public void testAddAsFirstExtraField() {
  114. AsiExtraField a = new AsiExtraField();
  115. a.setDirectory(true);
  116. a.setMode(0755);
  117. UnrecognizedExtraField u = new UnrecognizedExtraField();
  118. u.setHeaderId(new ZipShort(1));
  119. u.setLocalFileDataData(new byte[0]);
  120. ZipEntry ze = new ZipEntry("test/");
  121. ze.setExtraFields(new ZipExtraField[] {a, u});
  122. byte[] data1 = ze.getExtra();
  123. UnrecognizedExtraField u2 = new UnrecognizedExtraField();
  124. u2.setHeaderId(new ZipShort(1));
  125. u2.setLocalFileDataData(new byte[] {1});
  126. ze.addAsFirstExtraField(u2);
  127. byte[] data2 = ze.getExtra();
  128. ZipExtraField[] result = ze.getExtraFields();
  129. assertEquals("second pass", 2, result.length);
  130. assertSame(u2, result[0]);
  131. assertSame(a, result[1]);
  132. assertEquals("length second pass", data1.length + 1, data2.length);
  133. UnrecognizedExtraField u3 = new UnrecognizedExtraField();
  134. u3.setHeaderId(new ZipShort(2));
  135. u3.setLocalFileDataData(new byte[] {1});
  136. ze.addAsFirstExtraField(u3);
  137. result = ze.getExtraFields();
  138. assertEquals("third pass", 3, result.length);
  139. assertSame(u3, result[0]);
  140. assertSame(u2, result[1]);
  141. assertSame(a, result[2]);
  142. }
  143. public void testUnixMode() {
  144. ZipEntry ze = new ZipEntry("foo");
  145. assertEquals(0, ze.getPlatform());
  146. ze.setUnixMode(0755);
  147. assertEquals(3, ze.getPlatform());
  148. assertEquals(0755,
  149. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  150. assertEquals(0, ze.getExternalAttributes() & 0xFFFF);
  151. ze.setUnixMode(0444);
  152. assertEquals(3, ze.getPlatform());
  153. assertEquals(0444,
  154. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  155. assertEquals(1, ze.getExternalAttributes() & 0xFFFF);
  156. ze = new ZipEntry("foo/");
  157. assertEquals(0, ze.getPlatform());
  158. ze.setUnixMode(0777);
  159. assertEquals(3, ze.getPlatform());
  160. assertEquals(0777,
  161. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  162. assertEquals(0x10, ze.getExternalAttributes() & 0xFFFF);
  163. ze.setUnixMode(0577);
  164. assertEquals(3, ze.getPlatform());
  165. assertEquals(0577,
  166. (ze.getExternalAttributes() >> 16) & 0xFFFF);
  167. assertEquals(0x11, ze.getExternalAttributes() & 0xFFFF);
  168. }
  169. }