package fitnesse.junit;
import fitnesse.Arguments;
import fitnesse.responders.run.JavaFormatter;
import fitnesse.responders.run.ResultsListener;
import fitnesse.responders.run.TestSummary;
import fitnesseMain.FitNesseMain;
public class TestHelper {
private final String fitNesseRootPath;
private final String outputPath;
private final ResultsListener resultListener;
private boolean debug = true;
public static final String PAGE_TYPE_SUITE="suite";
public static final String PAGE_TYPE_TEST="test";
public TestHelper(String fitNesseRootPath, String outputPath){
this(fitNesseRootPath, outputPath, new PrintTestListener());
}
public TestHelper(String fitNesseRootPath, String outputPath, ResultsListener resultListener) {
this.fitNesseRootPath = fitNesseRootPath;
this.outputPath = outputPath;
this.resultListener = resultListener;
}
public TestSummary runSuite(String suiteName) throws Exception{
return run(suiteName, PAGE_TYPE_SUITE);
}
public TestSummary runSuite(String suiteName, String suiteFilter) throws Exception{
return run(suiteName, PAGE_TYPE_SUITE, suiteFilter);
}
public TestSummary runTest(String suiteName) throws Exception{
return run(suiteName, PAGE_TYPE_TEST);
}
public TestSummary run(String pageName, String pageType) throws Exception{
return run(pageName, pageType, null);
}
public TestSummary run(String pageName, String pageType, String suiteFilter, int port) throws Exception{
return run(pageName, pageType, suiteFilter, null, port);
}
public TestSummary run(String pageName, String pageType, String suiteFilter, String excludeSuiteFilter, int port) throws Exception{
JavaFormatter testFormatter=JavaFormatter.getInstance(pageName);
testFormatter.setResultsRepository(new JavaFormatter.FolderResultsRepository(outputPath,fitNesseRootPath));
testFormatter.setListener(resultListener);
Arguments arguments=new Arguments();
arguments.setDaysTillVersionsExpire("0");
arguments.setInstallOnly(false);
arguments.setOmitUpdates(true);
arguments.setPort(String.valueOf(port));
arguments.setRootPath(fitNesseRootPath);
arguments.setCommand(getCommand(pageName, pageType, suiteFilter, excludeSuiteFilter));
FitNesseMain.dontExitAfterSingleCommand=true;
FitNesseMain.launchFitNesse(arguments);
return testFormatter.getTotalSummary();
}
public TestSummary run(String pageName, String pageType, String suiteFilter) throws Exception{
return run(pageName, pageType, suiteFilter, 0);
}
String getCommand(String pageName, String pageType, String suiteFilter, String excludeSuiteFilter) {
String command = pageName+"?"+pageType+getCommandArgs();
if (suiteFilter!=null)
command = command + "&suiteFilter=" + suiteFilter;
if (excludeSuiteFilter!=null)
command = command + "&excludeSuiteFilter=" + excludeSuiteFilter;
return command;
}
private static String COMMON_ARGS = "&nohistory=true&format=java";
private static String DEBUG_ARG = "&debug=true";
private String getCommandArgs() {
if (debug) {
return DEBUG_ARG + COMMON_ARGS;
}
return COMMON_ARGS;
}
public void setDebugMode(boolean enabled) {
debug = enabled;
}
}