package org.codehaus.plexus.archiver.tar; import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.codehaus.plexus.components.io.fileselectors.IncludeExcludeFileSelector; import org.codehaus.plexus.util.FileUtils; import java.io.File; /** * @author <a href="mailto:viktor@jv-ration.com">Viktor Sadovnikov</a> * @version $Revision$ $Date$ */ public class TarUnArchiverTest extends PlexusTestCase { private void runUnarchiver( FileSelector[] selectors, boolean[] results ) throws Exception { String s = "target/tar-unarchiver-tests"; File testJar = new File( getBasedir(), "src/test/jars/test.tar.gz" ); File outputDirectory = new File( getBasedir(), s ); TarUnArchiver tarUn = (TarUnArchiver) lookup( UnArchiver.ROLE, "tar.gz" ); tarUn.setSourceFile(testJar); tarUn.setDestDirectory(outputDirectory); tarUn.setFileSelectors(selectors); FileUtils.deleteDirectory( outputDirectory ); tarUn.extract( testJar.getAbsolutePath(), outputDirectory ); assertFileExistance( s, "/resources/artifactId/test.properties", results[0]); assertFileExistance( s, "/resources/artifactId/directory/test.properties", results[1]); assertFileExistance( s, "/META-INF/MANIFEST.MF", results[2]); } private void assertFileExistance( String s, String file, boolean exists ) { File f0 = new File( getBasedir(), s + file ); assertEquals( String.format("Did %s expect to find %s file", exists ? "" : "NOT", f0.getAbsoluteFile()), exists, f0.exists() ); } public void testExtractingADirectory() throws Exception { runUnarchiver( null, new boolean[]{ true, true, true } ); } public void testSelectors() throws Exception { IncludeExcludeFileSelector fileSelector = new IncludeExcludeFileSelector(); runUnarchiver( new FileSelector[]{ fileSelector }, new boolean[]{ true, true, true } ); fileSelector.setExcludes( new String[]{ "**/test.properties" } ); runUnarchiver( new FileSelector[]{ fileSelector }, new boolean[]{ false, false, true } ); fileSelector.setIncludes( new String[]{ "**/test.properties" } ); fileSelector.setExcludes( null ); runUnarchiver( new FileSelector[]{ fileSelector }, new boolean[]{ true, true, false } ); fileSelector.setExcludes( new String[]{ "resources/artifactId/directory/test.properties" } ); runUnarchiver( new FileSelector[]{ fileSelector }, new boolean[]{ true, false, false } ); } }