package org.codehaus.plexus.components.io.resources; import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.apache.commons.io.IOUtils; import org.codehaus.plexus.PlexusTestCase; public class PlexusIoZipFileResourceCollectionTest extends PlexusTestCase { public void testNamelessRootFolder() throws Exception { PlexusIoZipFileResourceCollection resourceCollection = new PlexusIoZipFileResourceCollection(); resourceCollection.setFile( getTestFile( "src/test/jars/namelessrootfolder.jar" ) ); Iterator iterator = resourceCollection.getResources(); PlexusIoURLResource entry = (PlexusIoURLResource) iterator.next(); assertEquals( "/dummy.txt", entry.getName() ); final URL url = entry.getURL(); BufferedReader d = new BufferedReader( new InputStreamReader( entry.getContents() ) ); assertEquals( "dummy content", d.readLine() ); } public void testDescriptionForError() throws Exception { PlexusIoZipFileResourceCollection resourceCollection = new PlexusIoZipFileResourceCollection(); resourceCollection.setFile( getTestFile( "src/test/jars/namelessrootfolder.jar" ) ); Iterator<PlexusIoResource> iterator = resourceCollection.getResources(); PlexusIoURLResource entry = (PlexusIoURLResource) iterator.next(); final URL url = entry.getURL(); String descriptionForError = entry.getDescriptionForError( url ); assertTrue( descriptionForError.endsWith( "namelessrootfolder.jar!//dummy.txt" ) ); } public void testFilesWithIllegalHtmlChars() throws Exception { File testZip = new File( getBasedir(), "src/test/resources/bogusManifest.zip" ); PlexusIoZipFileResourceCollection prc = new PlexusIoZipFileResourceCollection(); prc.setFile( testZip ); final Iterator<PlexusIoResource> entries = prc.getEntries(); while ( entries.hasNext() ) { final PlexusIoResource next = entries.next(); if ( next.getName().endsWith( "MANIFEST.MF" ) ) { final InputStream contents1 = next.getContents(); final String manifest = IOUtils.toString( contents1, "UTF-8" ); assertTrue( manifest.contains( "bogs=fus" ) ); contents1.close(); } } } public void testFilesThatAreNotThere() throws Exception { File testZip = new File( getBasedir(), "src/test/resources/archiveWithIllegalHtmlFileName.zip" ); Set<String> seen = new HashSet<String>(); seen.add( "AFileThatNeedsHtmlEsc%3F>" ); seen.add( "Afile<Yo>.txt" ); seen.add( "File With Space.txt" ); seen.add( "FileWith%.txt" ); PlexusIoZipFileResourceCollection prc = new PlexusIoZipFileResourceCollection(); prc.setFile( testZip ); final Iterator<PlexusIoResource> entries = prc.getEntries(); while ( entries.hasNext() ) { final PlexusIoResource next = entries.next(); assertTrue( next.getName() + "was not present", seen.remove( next.getName() ) ); final URL url = next.getURL(); final InputStream contents = next.getContents(); contents.close(); } } }