/** * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.navigator; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeSet; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import junit.framework.TestCase; import org.python.pydev.shared_core.io.FileUtils; public class ZipStructureTest extends TestCase { private File baseDir; public void testZipStructureWithActualZip() throws Exception { try { setup(); File file = new File(baseDir, "my.egg"); FileOutputStream stream = new FileOutputStream(file); ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(stream)); zipOut.putNextEntry(new ZipEntry("empty1/")); zipOut.putNextEntry(new ZipEntry("folder/zip_mod.py")); zipOut.write("class ZipMod:pass".getBytes()); zipOut.close(); ZipFile zipFile = new ZipFile(file); try { ZipStructure zipStructure = new ZipStructure(file, zipFile); List<String> contents = zipStructure.contents(""); assertEquals(Arrays.asList("empty1/", "folder/"), contents); contents = zipStructure.contents("folder/"); assertEquals(Arrays.asList("folder/zip_mod.py"), contents); contents = zipStructure.contents("empty1/"); assertEquals(Arrays.asList(), contents); } finally { zipFile.close(); } } finally { finish(); } } private void finish() { try { FileUtils.deleteDirectoryTree(baseDir); } catch (IOException e) { //ignore } } private void setup() { baseDir = new File(FileUtils.getFileAbsolutePath(new File("ZipStructureTest.temporary_dir"))); try { FileUtils.deleteDirectoryTree(baseDir); } catch (Exception e) { //ignore } assertTrue(baseDir.mkdir()); } public void testZipStructure() throws Exception { ZipStructure zipStructure = new ZipStructure(); Map<Integer, TreeSet<String>> levelToContents = zipStructure.getLevelToContents(); TreeSet<String> tree = new TreeSet<String>(); tree.add("file1.py"); tree.add("file2.py"); tree.add("dir/"); tree.add("dir2/"); tree.add("zz/"); levelToContents.put(0, tree); tree = new TreeSet<String>(); tree.add("dir/dir3/"); tree.add("dir/file1.py"); tree.add("dir/zzz.py"); tree.add("dir2/file2.py"); levelToContents.put(1, tree); tree = new TreeSet<String>(); tree.add("dir/dir3/file3.py"); levelToContents.put(2, tree); Iterator<String> iterator = zipStructure.contents("").iterator(); assertEquals("dir/", iterator.next()); assertEquals("dir2/", iterator.next()); assertEquals("file1.py", iterator.next()); assertEquals("file2.py", iterator.next()); assertEquals("zz/", iterator.next()); assertFalse(iterator.hasNext()); iterator = zipStructure.contents("dir/").iterator(); assertEquals("dir/dir3/", iterator.next()); assertEquals("dir/file1.py", iterator.next()); assertEquals("dir/zzz.py", iterator.next()); assertFalse(iterator.hasNext()); } }