package org.codehaus.mojo.natives.plugin;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.codehaus.mojo.natives.compiler.CompilerConfiguration;
public class NativeCompileMojoTest
extends AbstractMojoTestCase
{
public void testMojoLookup()
throws Exception
{
File pluginXml = new File( getBasedir(), "src/test/resources/compiler/plugin-config.xml" );
NativeCompileMojo mojo = (NativeCompileMojo) lookupMojo( "compile", pluginXml );
assertNotNull( mojo );
}
public void testSources()
throws Exception
{
File pluginXml = new File( getBasedir(), "src/test/resources/compiler/plugin-config.xml" );
NativeCompileMojo mojo = (NativeCompileMojo) lookupMojo( "compile", pluginXml );
assertNotNull( mojo );
//must init this
mojo.setPluginContext( new HashMap() );
//simulate extra path to be added into includePath
mojo.getProject().addCompileSourceRoot( "dummy" );
//until the maven project stub is fixed
//mojo.getProject().addCompileSourceRoot( "target/javah" );
mojo.execute();
CompilerConfiguration config = mojo.getCompilerConfiguration();
assertNotNull( config );
// validate data from pom which is fed into mojo.execute()
assertEquals( new File( getBasedir() ), config.getWorkingDirectory() );
assertEquals( "someExe", config.getExecutable() );
assertEquals( new File( "target" ), config.getOutputDirectory() );
assertEquals( 4, config.getStartOptions().length );
assertEquals( "-s0", config.getStartOptions()[0] );
assertEquals( "-s1", config.getStartOptions()[1] );
assertEquals( "-s2", config.getStartOptions()[2] );
assertEquals( "-s3", config.getStartOptions()[3] );
assertEquals( 4, config.getMiddleOptions().length );
assertEquals( "-m0", config.getMiddleOptions()[0] );
assertEquals( "-m1", config.getMiddleOptions()[1] );
assertEquals( "-m2", config.getMiddleOptions()[2] );
assertEquals( "-m3", config.getMiddleOptions()[3] );
assertEquals( 4, config.getEndOptions().length );
assertEquals( "-e0", config.getEndOptions()[0] );
assertEquals( "-e1", config.getEndOptions()[1] );
assertEquals( "-e2", config.getEndOptions()[2] );
assertEquals( "-e3", config.getEndOptions()[3] );
// there are 2 source element with dependencyAnalysisParticipation is set to false
assertEquals( 2, config.getSystemIncludePaths().length );
assertEquals( new File( "src/main/native/dir4" ), config.getSystemIncludePaths()[0] );
assertEquals( new File( "src/main/native/dir5" ), config.getSystemIncludePaths()[1] );
// there are 3 normal source elements + 2 javah include
assertEquals( 3, config.getIncludePaths().length );
assertEquals( new File( "src/main/native/dir1" ), config.getIncludePaths()[0] );
assertEquals( new File( "src/main/native/dir2" ), config.getIncludePaths()[1] );
assertEquals( new File( "src/main/native/dir3" ), config.getIncludePaths()[2] );
//until maven project stub is fixes were we can simulate more than 1 source root in the list
//assertEquals( new File( "target/javah" ), config.getIncludePaths()[3] );
//we have 4 source files, so in output directory, there must be 4 object files
List objectFileList = mojo.getAllCompilersOutputFileList();
assertEquals( 4, objectFileList.size() );
assertEquals( new File( "target/file11.o" ), (File) objectFileList.get( 0 ) );
assertEquals( new File( "target/file12.o" ), (File) objectFileList.get( 1 ) );
assertEquals( new File( "target/file21.o" ), (File) objectFileList.get( 2 ) );
assertEquals( new File( "target/file22.o" ), (File) objectFileList.get( 3 ) );
}
public void testJavahOS()
throws Exception
{
File pluginXml = new File( getBasedir(), "src/test/resources/compiler/plugin-config-javahOS.xml" );
NativeCompileMojo mojo = (NativeCompileMojo) lookupMojo( "compile", pluginXml );
assertNotNull( mojo );
mojo.setPluginContext( new HashMap() );
mojo.execute();
CompilerConfiguration config = mojo.getCompilerConfiguration();
assertNotNull( config );
//javah induces 2 system include paths into configuration
assertEquals( 2, config.getSystemIncludePaths().length );
//note "somJDKPath comes from the simulated pom above
assertEquals( new File( "someJDKPath" ), config.getSystemIncludePaths()[0] );
assertEquals( new File( "someJDKPath/someOS" ), config.getSystemIncludePaths()[1] );
}
}