package io.takari.maven.plugins.compile;
import java.io.File;
import java.util.Arrays;
import java.util.StringTokenizer;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.junit.Rule;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import io.takari.maven.testing.TestResources;
@RunWith(Parameterized.class)
public abstract class AbstractCompileTest {
public static final boolean isJava8orBetter;
static {
boolean _isJava8orBetter = false;
String version = System.getProperty("java.specification.version");
if (version != null) {
StringTokenizer st = new StringTokenizer(version, ".");
/* int major = */Integer.parseInt(st.nextToken());
int minor = Integer.parseInt(st.nextToken());
_isJava8orBetter = minor >= 8;
}
isJava8orBetter = _isJava8orBetter;
}
@Rule
public final TestResources resources = new TestResources();
@Rule
public final CompileRule mojos = new CompileRule() {
@Override
public MojoExecution newMojoExecution(String goal, Xpp3Dom... parameters) {
MojoExecution execution = super.newMojoExecution(goal, parameters);
execution.getConfiguration().addChild(newParameter("compilerId", compilerId));
return execution;
};
};
protected final String compilerId;
protected AbstractCompileTest(String compilerId) {
this.compilerId = compilerId;
}
@Parameters(name = "{0}")
public static Iterable<Object[]> compilers() {
return Arrays.<Object[]>asList( //
new Object[] {"javac"} //
, new Object[] {"forked-javac"} //
, new Object[] {"jdt"} //
);
}
protected File compile(String name, Xpp3Dom... parameters) throws Exception {
File basedir = resources.getBasedir(name);
return mojos.compile(basedir, parameters);
}
protected File compile(File basedir, Xpp3Dom... parameters) throws Exception {
return mojos.compile(basedir, parameters);
}
protected void addDependency(MavenProject project, String artifactId, File file) throws Exception {
mojos.newDependency(file).setArtifactId(artifactId).addTo(project);
}
protected Xpp3Dom newParameter(String name, String value) {
Xpp3Dom child = new Xpp3Dom(name);
child.setValue(value);
return child;
}
}