package io.takari.maven.plugins.plugin;
import static io.takari.maven.testing.TestMavenRuntime.newParameter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import io.takari.incrementalbuild.maven.testing.IncrementalBuildRule;
import io.takari.maven.plugins.plugin.model.MojoDescriptor;
import io.takari.maven.plugins.plugin.model.MojoParameter;
import io.takari.maven.plugins.plugin.model.MojoRequirement;
import io.takari.maven.plugins.plugin.model.PluginDescriptor;
import io.takari.maven.plugins.plugin.model.io.xpp3.PluginDescriptorXpp3Reader;
import io.takari.maven.testing.TestProperties;
import io.takari.maven.testing.TestResources;
public class MojoDescriptorGleanerTest {
@Rule
public final TestResources resources = new TestResources();
@Rule
public final IncrementalBuildRule mojos = new IncrementalBuildRule();
public final TestProperties properties = new TestProperties();
@Test
public void testGleaner() throws Exception {
File basedir = resources.getBasedir("plugin-descriptor/gleaner");
MavenProject project = mojos.readMavenProject(basedir);
addDependency(project, "apache-plugin-annotations-jar");
mojos.executeMojo(project, "compile", newParameter("compilerId", "jdt"));
mojos.executeMojo(project, "mojo-annotation-processor");
MojoDescriptor d = readDescriptor(basedir, "glean_RequirementTypes");
Assert.assertEquals("java.util.Map", getRequirement(d, "mapRequirement").getRole());
Assert.assertEquals("java.util.List", getRequirement(d, "listRequirement").getRole());
Assert.assertEquals("java.util.List", getParameter(d, "listParameter").getType());
Assert.assertEquals("boolean", getParameter(d, "booleanParameter").getType());
Assert.assertEquals("java.lang.String[]", getParameter(d, "arrayParameter").getType());
}
private MojoParameter getParameter(MojoDescriptor descriptor, String fieldName) {
for (MojoParameter parameter : descriptor.getParameters()) {
if (fieldName.equals(parameter.getName())) {
return parameter;
}
}
throw new AssertionError("No such parameter " + fieldName);
}
private MojoRequirement getRequirement(MojoDescriptor descriptor, String fieldName) {
for (MojoRequirement requirement : descriptor.getRequirements()) {
if (fieldName.equals(requirement.getFieldName())) {
return requirement;
}
}
throw new AssertionError("No such requirement " + fieldName);
}
private MojoDescriptor readDescriptor(File basedir, String classname) throws IOException, XmlPullParserException {
try (InputStream is = new FileInputStream(new File(basedir, "target/generated-sources/annotations/io.takari.lifecycle.uts.plugindescriptor." + classname + ".mojo.xml"))) {
PluginDescriptor descriptor = new PluginDescriptorXpp3Reader().read(is);
Assert.assertEquals(1, descriptor.getMojos().size());
return descriptor.getMojos().get(0);
}
}
private void addDependency(MavenProject project, String property) throws Exception {
mojos.newDependency(new File(properties.get(property))).addTo(project);
}
}