/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.ant;
import static java.io.File.separator;
import java.io.File;
import org.apache.tools.ant.BuildFileRule;
import org.apache.tools.ant.Project;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
/**
* Quite an ugly classe, arguably useful for just 2 units test - nevertheless as
* there is a workaround that must be shared by both tests (PMD and CPD's) I
* felt compelled to move it to a single classes.
*
* @author Romain Pelisse <belaran@gmail.com>
*
*/
public abstract class AbstractAntTestHelper {
@Rule
public final BuildFileRule buildRule = new BuildFileRule();
protected String pathToTestScript;
protected String antTestScriptFilename;
public String mvnWorkaround;
public AbstractAntTestHelper() {
mvnWorkaround = "pmd/ant/xml";
if (new File("target/clover/test-classes").exists()) {
pathToTestScript = "target/clover/test-classes/net/sourceforge/" + mvnWorkaround;
} else {
pathToTestScript = "target/test-classes/net/sourceforge/" + mvnWorkaround;
}
}
@Before
public void setUp() {
validatePostConstruct();
// initialize Ant
buildRule.configureProject(pathToTestScript + separator + antTestScriptFilename);
Project project = buildRule.getProject();
if (!project.getBaseDir().toString().endsWith(mvnWorkaround)) {
// when running from maven, the path needs to be adapted...
// FIXME: this is more a workaround than a good solution...
project.setBasedir(project.getBaseDir().toString() + separator + pathToTestScript);
}
}
private void validatePostConstruct() {
if (pathToTestScript == null || "".equals(pathToTestScript) || antTestScriptFilename == null
|| "".equals(antTestScriptFilename) || mvnWorkaround == null || "".equals(mvnWorkaround)) {
throw new IllegalStateException("Unit tests for Ant script badly initialized");
}
}
public void executeTarget(String target) {
buildRule.executeTarget(target);
}
public void assertOutputContaining(String text) {
Assert.assertTrue("Expected to find \"" + text + "\" in the output, but it's missing",
buildRule.getOutput().contains(text));
}
}