package org.codehaus.plexus.archiver.war; import java.io.File; import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.archiver.ArchiveEntry; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ResourceIterator; import org.codehaus.plexus.util.FileUtils; /** * @author Kristian Rosenvold */ public class WarArchiverTest extends PlexusTestCase { private final int expected = 8; public void testReAddingPlatformSpecificEncoding() throws Exception { WarArchiver archiver = (WarArchiver) lookup( Archiver.ROLE, "war" ); archiver.setDestFile( new File( getTargetRarFolder(), "test.war" ) ); File dummyContent = getTestFile( "src/test/resources/folders" ); archiver.addDirectory( dummyContent ); assertEquals( expected, count( archiver.getResources() ) ); // I wonder what the first entry is File file = getTestFile( "src/test/resources/folders/WEB-INF/web.xml" ); archiver.setWebxml( file); assertEquals( expected, count( archiver.getResources() ) ); // I wonder what the first entry is archiver.createArchive(); assertTrue( new File( getTargetRarFolder(), "test.war" ).exists() ); } public void testInfiniteRecursion() throws Exception { WarArchiver archiver = (WarArchiver) lookup( Archiver.ROLE, "war" ); archiver.setDestFile( new File( getTargetRarFolder(), "test.war" ) ); // Easy to produce infinite recursion if you just add existing files again and again File dummyContent = getTestFile( "src/test/resources/folders", "File.txt" ); final int INFINITY = 10; for (int i = 0; i < INFINITY; i++){ archiver.addFile( dummyContent, "testZ" ); } assertEquals( 1, count( archiver.getResources() ) ); // I wonder what the first entry is } public File getTargetRarFolder() { return new File( getBasedir(), "/target/wartest/" ); } protected void setUp() throws Exception { super.setUp(); // clean output directory and re create it if ( getTargetRarFolder().exists() ) { FileUtils.deleteDirectory( getTargetRarFolder() ); } } private int count(ResourceIterator resourceIterator){ int i = 0; while (resourceIterator.hasNext()){ i++; ArchiveEntry next = resourceIterator.next(); System.out.print( next.getMode() ); System.out.println( next.getName() ); } return i; } }