package org.codehaus.mojo.jsimport;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.Artifact;
import org.junit.Test;
public class JsFileArtifactHandlerTest
{
@Test
public void testGetFileFromJsArtifact()
throws IOException
{
Artifact artifact = mock( Artifact.class );
File artifactFile = mock( File.class );
File targetFolder = mock( File.class );
File workFolder = mock( File.class );
when( artifact.getType() ).thenReturn( "js" );
when( artifact.getFile() ).thenReturn( artifactFile );
JsFileArtifactHandler handler = new JsFileArtifactHandler( artifact, targetFolder, workFolder );
verifyZeroInteractions( targetFolder );
verifyZeroInteractions( workFolder );
List<File> jsFiles = handler.getFiles();
assertEquals( 1, jsFiles.size() );
assertEquals( artifactFile, jsFiles.get( 0 ) );
assertNull( handler.getExpansionFolder() );
}
@Test
public void testGetFilesFromWwwZipArtifact()
throws IOException, URISyntaxException
{
Artifact artifact = mock( Artifact.class );
File artifactFile =
new File( JsFileArtifactHandlerTest.class.getResource( "bootstrap-amd-1.4.0-SNAPSHOT-www.zip" ).toURI() );
File targetFolder = new File( System.getProperty( "java.io.tmpdir" ) );
File workFolder = new File( System.getProperty( "java.io.tmpdir" ) );
File expansionFolder =
new File( targetFolder, "www-zip" + File.separator + "bootstrap-amd-1.4.0-SNAPSHOT-www.zip" );
FileUtils.deleteQuietly( expansionFolder );
expansionFolder.delete();
when( artifact.getType() ).thenReturn( "zip" );
when( artifact.getClassifier() ).thenReturn( "www" );
when( artifact.getGroupId() ).thenReturn( "some.groupId" );
when( artifact.getArtifactId() ).thenReturn( "anArtifactId" );
when( artifact.getVersion() ).thenReturn( "1.0-SNAPSHOT" );
when( artifact.getFile() ).thenReturn( artifactFile );
JsFileArtifactHandler handler = new JsFileArtifactHandler( artifact, targetFolder, workFolder );
List<File> jsFiles = handler.getFiles();
assertEquals( 1, jsFiles.size() );
File jsFile = jsFiles.get( 0 );
assertEquals( "bootstrap-amd-1.4.0-SNAPSHOT.js", jsFile.getName() );
jsFile = jsFile.getParentFile();
assertEquals( "1.0-SNAPSHOT", jsFile.getName() );
jsFile = jsFile.getParentFile();
assertEquals( "anArtifactId", jsFile.getName() );
jsFile = jsFile.getParentFile();
assertEquals( "groupId", jsFile.getName() );
jsFile = jsFile.getParentFile();
assertEquals( "some", jsFile.getName() );
File cssFolder = new File( targetFolder, "css" );
File[] cssFiles = cssFolder.listFiles();
assertEquals( 1, cssFiles.length );
assertEquals( "bootstrap.css", cssFiles[0].getName() );
Collection<File> expandedJsFiles = FileUtils.listFiles( expansionFolder, null, true );
assertEquals( 1, expandedJsFiles.size() );
File expandedJsFile = expandedJsFiles.iterator().next();
assertEquals( "bootstrap-amd-1.4.0-SNAPSHOT.js", expandedJsFile.getName() );
expandedJsFile = expandedJsFile.getParentFile();
assertEquals( "1.0-SNAPSHOT", expandedJsFile.getName() );
expandedJsFile = expandedJsFile.getParentFile();
assertEquals( "anArtifactId", expandedJsFile.getName() );
expandedJsFile = expandedJsFile.getParentFile();
assertEquals( "groupId", expandedJsFile.getName() );
expandedJsFile = expandedJsFile.getParentFile();
assertEquals( "some", expandedJsFile.getName() );
assertEquals( expansionFolder, handler.getExpansionFolder() );
// Run the expansion again ensuring that we use what we've previously expanded i.e. don't inflate again.
long jsExpansionFolderTime = expansionFolder.lastModified();
new JsFileArtifactHandler( artifact, targetFolder, workFolder );
assertEquals( jsExpansionFolderTime, expansionFolder.lastModified() );
}
}