package eu.hats_project.build.maven.plugin; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import abs.backend.tests.ABSTestRunnerGenerator; /** * An abstract class for test goals * @author pwong */ abstract class AbstractTestMojo extends AbstractABSMojo { /** * Check if test runner needs to be generated before simulation * @parameter expression="${abs.generateRunner}" * default-value=false */ private boolean generateRunner; /** * The generated ABSUnit test runner file * * @parameter expression="${abs.runnerOutput}" * default-value="${project.build.directory}/abs/gen/abs/runner.abs" */ protected File absTestRunnerFile; /** * Main block to execute * * @parameter */ protected String mainBlock; protected final void doExecute() throws Exception { if (absTestSrcFolder == null) { getLog().warn("Test folder cannot be found. Skip tests"); return; } else if (!absTestSrcFolder.exists()) { getLog().warn(String.format("There is no test code at folder %s", absTestSrcFolder)); return; } if (generateRunner && ! (mainBlock == null || ABSTestRunnerGenerator.RUNNER_MAIN.equals(mainBlock))) { throw new MojoExecutionException("Cannot generated test runner: Main block must reside in module " + ABSTestRunnerGenerator.RUNNER_MAIN); } else if (! generateRunner && mainBlock == null) { throw new MojoExecutionException("A main block has not been specified"); } if (generateRunner) { if (! absTestRunnerFile.exists() && ! absTestRunnerFile.getParentFile().mkdirs() && ! absTestRunnerFile.createNewFile()) { throw new MojoFailureException("Cannot write to file: "+absTestRunnerFile); } TestRunnerGenerator generator = new TestRunnerGenerator(); generator.generateTestRunner(absfrontEnd, getABSArguments(), absTestRunnerFile, getLog()); } makeTest(); } protected abstract void makeTest() throws Exception; @Override protected List<String> getABSArguments() throws Exception { List<String> args = new ArrayList<String>(); args.addAll(getFileNames(getAbsFiles(absTestSrcFolder))); args.addAll(super.getABSArguments()); return args; } }