
io.github.carousell.cucumber2junit.CodeGenerationMojo Maven / Gradle / Ivy
package io.github.carousell.cucumber2junit;
import io.github.carousell.cucumber2junit.model.Feature;
import java.util.List;
import java.util.Map;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Mojo for the Maven plugin. */
@Mojo(name = "generate")
public class CodeGenerationMojo extends AbstractMojo {
private static final Logger LOG = LoggerFactory.getLogger(CodeGenerationMojo.class);
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
@Parameter(defaultValue = "${project.basedir}/src/test/resources/features")
private String featuresSourceDirectory;
@Parameter(defaultValue = "${project.basedir}/src/test/java")
private String javaOutputDirectory;
@Parameter(defaultValue = "features")
private String featuresClasspath;
@Parameter(defaultValue = "/tmp/features")
private String featuresOutputDirectory;
@Parameter(required = true)
private String packageName;
@Parameter(required = true)
private String stepsPackageName;
@Parameter private String templatePath;
@Parameter(property = "tags")
private String[] tags;
@Parameter private Map additionalPlaceholders;
@Parameter(required = true)
private String awsDynamoAccessKey;
@Parameter(required = true)
private String awsDynamoSecretKey;
@Parameter(defaultValue = "us-east-1")
private String awsRegion;
private TagsResolver tagsResolver;
private FeatureParser featureParser;
private JUnitTestGenerator codeGenerator = new JUnitTestGenerator();
public void execute() throws MojoExecutionException {
tagsResolver = new AWSDynamoDBTagsResolver(awsDynamoAccessKey, awsDynamoSecretKey, awsRegion);
featureParser = new FeatureParser(tagsResolver);
LOG.info("Generating JUnit test classes...");
LOG.info("featuresSourceDirectory = {}", featuresSourceDirectory);
LOG.info("javaOutputDirectory = {}", javaOutputDirectory);
LOG.info("featuresClasspath = {}", featuresClasspath);
LOG.info("packageName = {}", packageName);
LOG.info("stepsPackageName = {}", stepsPackageName);
LOG.info("templatePath = {}", templatePath);
LOG.info("tags = {}", tags);
codeGenerator.generateCucumberMain(javaOutputDirectory, packageName);
List features = featureParser.parseFeatures(featuresSourceDirectory, tags);
codeGenerator.generateJUnitTests(
features,
featuresSourceDirectory,
javaOutputDirectory,
featuresOutputDirectory,
featuresClasspath,
packageName,
stepsPackageName,
templatePath,
additionalPlaceholders);
LOG.info(
"Publishing scenario ids {} as Maven property {}",
featureParser.getScenarioIds(),
"scenarioIds");
project.getProperties().put("scenarioIds", String.join(",",
featureParser.getScenarioIds()));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy