+ " [-suite <FullTestSuiteClassname] [-consoleFile <consoleOutputFileName>]"
+ " [-resultFile <resultOutputFilename>] [-cpConsole] [-cpResult]");
}
// create new JUnitTestRunner
TestRunner aTestRunner = new TestRunner();
try {
// create ouput files references
File resultFile = null;
File consoleFile = null;
// initialize standard output stream, use console as standard output
PrintStream resultWriter = System.out;
PrintStream consoleWriter = System.out;
// check if result output filename was specifed
if (resultFileName != null) {
// create new result output file
resultFile = new File(resultFileName);
resultFile.createNewFile();
// dublicate PrintStream if neccessary
if (teeResult == true) {
PrintStream tempResultWriter = new PrintStream(new FileOutputStream(resultFile, false),
true, "UTF-8");
resultWriter = new TeePrintStream(tempResultWriter, System.out);
} else {
resultWriter = new PrintStream(new FileOutputStream(resultFile, false), true, "UTF-8");
}
}
// check if console output filename was specified
if (consoleFileName != null) {
// create new console output file
consoleFile = new File(consoleFileName);
consoleFile.createNewFile();
// dublicate PrintStream if neccessary
if (teeConsole == true) {
PrintStream tempConsoleWriter = new PrintStream(new FileOutputStream(consoleFile, false),
true, "UTF-8");
consoleWriter = new TeePrintStream(tempConsoleWriter, System.out);
} else {
consoleWriter = new PrintStream(new FileOutputStream(consoleFile, false), true, "UTF-8");
}
// set new System.out PrintStream
System.setOut(consoleWriter);
}
// set UIMAResult printer mode, if teeResult is true use another output layout
UIMAResultPrinter printer = new UIMAResultPrinter(resultWriter, abortOnFail, teeResult);
aTestRunner.setPrinter(printer);
// get testClass for the given testname
Class testClass = Class.forName(testName);
// create new JUnit TestSuite
TestSuite suite = new TestSuite();
suite.setName(testName.substring((testName.lastIndexOf(".") + 1), testName.length()));
// add suite to current suite
if (testSuite) {
Method suiteMethod = testClass.getMethod(SUITE_METHODNAME, new Class[0]);
Test test = (Test) suiteMethod.invoke(null, new Class[0]); // static method
suite.addTest(test);
}
// add testcase to current suite
if (testCase) {
suite.addTestSuite(testClass);
}
// print header
resultWriter
.println("################################################################################################");
resultWriter.println("# TestSuite: " + suite.getName());
resultWriter.println("# Testcases: " + suite.countTestCases());
resultWriter.println("# Test candidate: " + testName);
resultWriter.println("# Abort on error: " + abortOnFail);
resultWriter.println("# Result output filename: " + resultFileName);
resultWriter.println("# Console output filename: " + consoleFileName);
resultWriter.println("# Test start directory: " + System.getProperty("user.dir"));
resultWriter.println("# Test starter: " + System.getProperty("user.name"));
resultWriter.println("# OS: " + System.getProperty("os.name") + " "
+ System.getProperty("os.version"));
resultWriter.println("# Command line run: " + System.getProperty("isCommandLine", "false"));
// get current date and time
DateFormat dateTime;
GregorianCalendar cal = new GregorianCalendar();
StringBuffer time = new StringBuffer(42);
time.append("# Test started at: ");
dateTime = DateFormat.getDateInstance();
time.append(dateTime.format(cal.getTime()));
dateTime = DateFormat.getTimeInstance();
time.append(" ");
time.append(dateTime.format(cal.getTime()));
resultWriter.println(time.toString());
resultWriter.println("# Test runs with java version: " + System.getProperty("java.version"));
resultWriter.println("# JUnitTestRunner version: 1.2");
resultWriter
.println("################################################################################################");
// run current test
TestResult results = aTestRunner.doRun(suite);
// check test result
if (results.wasSuccessful() == false) {
return false;
}