| 
					
				 | 
			
			
				@@ -0,0 +1,338 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    Copyright (C) 2012 ZeroTurnaround LLC <support@zeroturnaround.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    Licensed 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. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.BufferedInputStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.File; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.FileInputStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.FileOutputStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.FileReader; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.zip.ZipEntry; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.zip.ZipOutputStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import junit.framework.TestCase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.io.FileUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.io.IOUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.zeroturnaround.zip.ZipEntrySource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.zeroturnaround.zip.ZipException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.zeroturnaround.zip.ZipUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class ZipUtilTest extends TestCase { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testUnpackEntryFromFile() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final String name = "foo"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final byte[] contents = "bar".getBytes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File file = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Create the ZIP file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.putNextEntry(new ZipEntry(name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.write(contents); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.closeEntry(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IOUtils.closeQuietly(zos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Test the ZipUtil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      byte[] actual = ZipUtil.unpackEntry(file, name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertNotNull(actual); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertEquals(new String(contents), new String(actual)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testUnpackEntryFromStreamToFile() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final String name = "foo"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final byte[] contents = "bar".getBytes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File file = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Create the ZIP file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.putNextEntry(new ZipEntry(name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.write(contents); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.closeEntry(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IOUtils.closeQuietly(zos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileInputStream fis = new FileInputStream(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      File outputFile = File.createTempFile("temp-output", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      boolean result = ZipUtil.unpackEntry(fis, name, outputFile); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(outputFile)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      byte[] actual = new byte[1024]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      int read = bis.read(actual); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bis.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertEquals(new String(contents), new String(actual, 0, read)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testUnpackEntryFromStream() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final String name = "foo"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final byte[] contents = "bar".getBytes(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File file = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Create the ZIP file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.putNextEntry(new ZipEntry(name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.write(contents); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        zos.closeEntry(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IOUtils.closeQuietly(zos); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileInputStream fis = new FileInputStream(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Test the ZipUtil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      byte[] actual = ZipUtil.unpackEntry(fis, name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertNotNull(actual); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertEquals(new String(contents), new String(actual)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testDuplicateEntryAtAdd() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("duplicate.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.addEntries(src, new ZipEntrySource[0], dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testDuplicateEntryAtReplace() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("duplicate.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.replaceEntries(src, new ZipEntrySource[0], dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testDuplicateEntryAtAddOrReplace() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("duplicate.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.addOrReplaceEntries(src, new ZipEntrySource[0], dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testUnexplode() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File file = File.createTempFile("tempFile", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File tmpDir = file.getParentFile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    unexplodeWithException(file, "shouldn't be able to unexplode file that is not a directory"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue("Should be able to delete tmp file", file.delete()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    unexplodeWithException(file, "shouldn't be able to unexplode file that doesn't exist"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // create empty tmp dir with the same name as deleted file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dir = new File(tmpDir, file.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    dir.deleteOnExit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue("Should be able to create directory with the same name as there was tmp file", dir.mkdir()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    unexplodeWithException(dir, "shouldn't be able to unexplode dir that doesn't contain any files"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // unexplode should succeed with at least one file in directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File.createTempFile("temp", null, dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.unexplode(dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue("zip file should exist with the same name as the directory that was unexploded", dir.exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue("unexploding input directory should have produced zip file with the same name", !dir.isDirectory()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue("Should be able to delete zip that was created from directory", dir.delete()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testPackEntry() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File fileToPack = new File(getClass().getResource("TestFile.txt").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.packEntry(fileToPack, dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(dest.exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.explode(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue((new File(dest, "TestFile.txt")).exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // if fails then maybe somebody changed the file contents and did not update 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // the test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertEquals(108, (new File(dest, "TestFile.txt")).length()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testPackEntries() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File fileToPack = new File(getClass().getResource("TestFile.txt").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File fileToPackII = new File(getClass().getResource("TestFile-II.txt").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.packEntries(new File[] { fileToPack, fileToPackII }, dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(dest.exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.explode(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue((new File(dest, "TestFile.txt")).exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue((new File(dest, "TestFile-II.txt")).exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // if fails then maybe somebody changed the file contents and did not update 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // the test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertEquals(108, (new File(dest, "TestFile.txt")).length()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertEquals(103, (new File(dest, "TestFile-II.txt")).length()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testZipException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    boolean exceptionThrown = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.pack(new File("nonExistent"), new File("weeheha")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    catch (ZipException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      exceptionThrown = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(exceptionThrown); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testPreserveRoot() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File parent = new File(getClass().getResource("TestFile.txt").getPath()).getParentFile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.pack(parent, dest, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.explode(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue((new File(dest, parent.getName())).exists()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private void unexplodeWithException(File file, String message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    boolean ok = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.unexplode(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ok = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(message, ok); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testArchiveEquals() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // byte-by-byte copy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src2 = new File(getClass().getResource("demo-copy.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(ZipUtil.archiveEquals(src, src2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // entry by entry copy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src3 = new File(getClass().getResource("demo-copy-II.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(ZipUtil.archiveEquals(src, src3)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testRepackArchive() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.repack(src, dest, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(ZipUtil.archiveEquals(src, dest)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testContainsAnyEntry() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    boolean exists = ZipUtil.containsAnyEntry(src, new String[] { "foo.txt", "bar.txt" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(exists); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    exists = ZipUtil.containsAnyEntry(src, new String[] { "foo.txt", "does-not-exist.txt" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(exists); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    exists = ZipUtil.containsAnyEntry(src, new String[] { "does-not-exist-I.txt", "does-not-exist-II.txt" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertFalse(exists); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testAddEntry() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    final String fileName = "TestFile.txt"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertFalse(ZipUtil.containsEntry(src, fileName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File newEntry = new File(getClass().getResource(fileName).getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp.zip", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZipUtil.addEntry(src, fileName, newEntry, dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assertTrue(ZipUtil.containsEntry(dest, fileName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testRemoveEntry() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.removeEntry(src, "bar.txt", dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue("Result zip misses entry 'foo.txt'", ZipUtil.containsEntry(dest, "foo.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue("Result zip misses entry 'foo1.txt'", ZipUtil.containsEntry(dest, "foo1.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue("Result zip misses entry 'foo2.txt'", ZipUtil.containsEntry(dest, "foo2.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertFalse("Result zip still contains 'bar.txt'", ZipUtil.containsEntry(dest, "bar.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public void testRemoveDirs() throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File src = new File(getClass().getResource("demo-dirs.zip").getPath()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    File dest = File.createTempFile("temp", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ZipUtil.removeEntries(src, new String[] { "bar.txt", "a/b" }, dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertFalse("Result zip still contains 'bar.txt'", ZipUtil.containsEntry(dest, "bar.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertFalse("Result zip still contains dir 'a/b'", ZipUtil.containsEntry(dest, "a/b")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue("Result doesn't containt 'attic'", ZipUtil.containsEntry(dest, "attic/treasure.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertTrue("Entry whose prefix is dir name is removed too: 'b.txt'", ZipUtil.containsEntry(dest, "a/b.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      assertFalse("Entry in a removed dir is still there: 'a/b/c.txt'", ZipUtil.containsEntry(dest, "a/b/c.txt")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      FileUtils.deleteQuietly(dest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |