package com.faforever.client.io; import org.apache.commons.lang3.RandomUtils; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.nio.file.Files; import java.nio.file.Path; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import static org.junit.Assert.*; public class ZipperAndUnzipperTest { @Rule public TemporaryFolder folderToZip = new TemporaryFolder(); @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @Rule public TemporaryFolder targetFolder = new TemporaryFolder(); @Test public void testZip() throws Exception { folderToZip.create(); Path file1 = folderToZip.newFile("file1").toPath(); folderToZip.newFile("file2"); folderToZip.newFolder("folder1"); folderToZip.newFile("folder1/file1"); folderToZip.newFolder("folder1", "folder11"); folderToZip.newFile("folder1/folder11/file1"); folderToZip.newFolder("folder2"); folderToZip.newFile("folder2/file1"); folderToZip.newFolder("folder3"); byte[] file1Contents = RandomUtils.nextBytes(1024); Files.write(file1, file1Contents); Path zipFile = targetFolder.newFile("target.zip").toPath(); try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(zipFile))) { Zipper.contentOf(folderToZip.getRoot().toPath()) .to(zipOutputStream) .zip(); } try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile))) { Unzipper.from(zipInputStream) .to(targetFolder.getRoot().toPath()) .unzip(); } Path targetDirectory = targetFolder.getRoot().toPath(); assertTrue(Files.exists(targetDirectory.resolve("file1"))); assertTrue(Files.exists(targetDirectory.resolve("file2"))); assertTrue(Files.exists(targetDirectory.resolve("folder1"))); assertTrue(Files.exists(targetDirectory.resolve("folder1").resolve("file1"))); assertTrue(Files.exists(targetDirectory.resolve("folder2"))); assertTrue(Files.exists(targetDirectory.resolve("folder2").resolve("file1"))); assertTrue(Files.exists(targetDirectory.resolve("folder3"))); assertArrayEquals(file1Contents, Files.readAllBytes(targetDirectory.resolve("file1"))); } }