package org.codehaus.mojo.javascript;
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.File;
import java.io.IOException;
import org.apache.maven.artifact.DefaultArtifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.codehaus.mojo.javascript.archive.JavascriptArtifactManager;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.FileUtils;
/**
* Goal which copies scripts to the test-script directory.
*
* @goal prepare-tests
* @phase test-compile
* @requiresDependencyResolution test
* @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
*/
public class PrepareTestsMojo
extends AbstractMojo
{
/**
* The maven project.
*
* @parameter expression="${project}"
* @required
* @readonly
*/
private MavenProject project;
/**
* Set this to 'true' to bypass unit tests entirely. Its use is NOT
* RECOMMENDED, but quite convenient on occasion.
*
* @parameter expression="${maven.test.skip}"
*/
private boolean skip;
/**
* Location of the source files.
*
* @parameter default-value="${basedir}/src/main/javascript"
*/
protected File sourceDirectory;
/**
* Location of the source files.
*
* @parameter default-value="${basedir}/src/test/javascript"
*/
protected File testSourceDirectory;
/**
* Location of the source files.
*
* @parameter default-value="${project.build.directory}/test-scripts"
*/
protected File outputDirectory;
/**
* The folder for javascripts dependencies
*
* @parameter expression="${scripts}" default-value="lib"
*/
private String libsDirectory;
/**
* Use the artifactId as folder
*
* @parameter
*/
private boolean useArtifactId;
/**
* @component
*/
private JavascriptArtifactManager javascriptArtifactManager;
/**
* {@inheritDoc}
*
* @see org.apache.maven.plugin.Mojo#execute()
*/
public void execute()
throws MojoExecutionException, MojoFailureException
{
if ( skip || !testSourceDirectory.exists() )
{
return;
}
DirectoryScanner scanner = new DirectoryScanner();
scanner.addDefaultExcludes();
try
{
scanner.setBasedir( sourceDirectory );
scanner.scan();
String[] files = scanner.getIncludedFiles();
for ( int i = 0; i < files.length; i++ )
{
File destFile = new File( outputDirectory, files[i] );
destFile.getParentFile().mkdirs();
FileUtils.copyFile( new File( sourceDirectory, files[i] ), destFile );
}
scanner.setBasedir( testSourceDirectory );
scanner.scan();
files = scanner.getIncludedFiles();
for ( int i = 0; i < files.length; i++ )
{
File destFile = new File( outputDirectory, files[i] );
destFile.getParentFile().mkdirs();
FileUtils.copyFile( new File( testSourceDirectory, files[i] ), destFile );
}
}
catch ( IOException e )
{
throw new MojoExecutionException( "Failed to copy scripts in " + outputDirectory );
}
try
{
javascriptArtifactManager.unpack( project, DefaultArtifact.SCOPE_TEST, new File(
outputDirectory, libsDirectory ), useArtifactId );
}
catch ( ArchiverException e )
{
throw new MojoExecutionException( "Failed to unpack javascript dependencies", e );
}
}
}