package com.google.gwt.dist; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.Adler32; import java.util.zip.CheckedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.google.gwt.dist.util.Util; import com.google.gwt.dist.util.ZipCompressor; public class ZipCompressorTest { File dirToCompress; ZipCompressor zipCompressor; @BeforeClass public void setUp() { File source = new File(System.getProperty("user.dir")).getParentFile(); dirToCompress = new File( source.toString() + "\\core\\test\\com\\google\\gwt\\dist\\resources\\sample-to-be-compressed\\"); zipCompressor = new ZipCompressor(); } @Test public void testArchiveAndCompress() throws IOException { byte[] compressedOutput; String[] expectedZipEntryNames = { "permutation-0.js", "test-folder" + Util.getFolderSeparatorInZipArchive() + "permutation-1.js" }; compressedOutput = zipCompressor.archiveAndCompressDir(dirToCompress, Pattern.compile("permutation-[0-9+].js")).toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(compressedOutput); CheckedInputStream checksum = new CheckedInputStream(is, new Adler32()); ZipInputStream zis = new ZipInputStream(new BufferedInputStream( checksum)); ZipEntry zipEntry; int counter = 0; while ((zipEntry = zis.getNextEntry()) != null) { Assert.assertEquals(zipEntry.getName(), expectedZipEntryNames[counter++]); } } @Test public void testMergeZipedStreams() throws IOException { File source = new File(System.getProperty("user.dir")).getParentFile(); File dir1 = new File( source.toString() + "\\core\\test\\com\\google\\gwt\\dist\\resources\\sample-to-be-compressed\\test-folder1\\"); File dir2 = new File( source.toString() + "\\core\\test\\com\\google\\gwt\\dist\\resources\\sample-to-be-compressed\\test-folder2\\"); ByteArrayOutputStream baos1 = zipCompressor.archiveAndCompressDir(dir1, true); ByteArrayOutputStream baos2 = zipCompressor.archiveAndCompressDir(dir2, true); ByteArrayInputStream bais1 = new ByteArrayInputStream(baos1 .toByteArray()); ZipInputStream z1 = new ZipInputStream(bais1); ByteArrayInputStream bais2 = new ByteArrayInputStream(baos2 .toByteArray()); ZipInputStream z2 = new ZipInputStream(bais2); String[] expectedZipEntryNames = { "test-folder1/test-file1.txt", "test-folder1/test-file2.txt", "test-folder2/test-file1.txt", "test-folder2/test-file2.txt" }; ZipInputStream result = zipCompressor.mergeZippedStreams(z1, z2); ZipEntry zipEntry; int counter = 0; while ((zipEntry = result.getNextEntry()) != null) { Assert.assertEquals(zipEntry.getName(), expectedZipEntryNames[counter++]); } } @Test public void testInculdeFilesFilter() { Pattern includeFiles = Pattern.compile("^(?:(?!gwt-servlet\\.jar).)*$"); List<File> files = new ArrayList<File>( Arrays.asList( new File[] { new File("war/WEB-INF/lib/gwt-servlet.jar"), new File("war/WEB-INF/lib/gwt-styles.jar") } )); List<File> expectedFiles = new ArrayList<File>( Arrays.asList( new File[] { new File("war/WEB-INF/lib/gwt-servlet.jar") } )); List<File> filteredFiles = new ArrayList<File>(); for (File f: files) { Matcher m = includeFiles.matcher(f.getName()); if (m.matches()) { filteredFiles.add(f); } } Assert.assertEquals(filteredFiles.size(), expectedFiles.size()); } }