blob: e77933a2579278008377869f46ff28bb41e384f4 [file] [log] [blame]
package org.testng.reporters;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.internal.Utils;
import java.util.List;
/**
* A simple reporter that collects the results and prints them on standard out.
*
* @author <a href="mailto:cedric@beust.com">Cedric Beust</a>
* @author <a href='mailto:the_mindstorm@evolva.ro'>Alexandru Popescu</a>
*/
public class TextReporter extends TestListenerAdapter {
private int m_verbose = 0;
private String m_testName = null;
public TextReporter(String testName, int verbose) {
m_testName = testName;
m_verbose = verbose;
}
@Override
public void onFinish(ITestContext context) {
if (m_verbose >= 2) {
logResults();
}
}
private ITestNGMethod[] resultsToMethods(List<ITestResult> results) {
ITestNGMethod[] result = new ITestNGMethod[results.size()];
int i = 0;
for (ITestResult tr : results) {
result[i++] = tr.getMethod();
}
return result;
}
private void logResults() {
//
// Log Text
//
for(Object o : getConfigurationFailures()) {
ITestResult tr = (ITestResult) o;
Throwable ex = tr.getThrowable();
String stackTrace= "";
if (ex != null) {
if (m_verbose >= 2) {
stackTrace= Utils.stackTrace(ex, false)[0];
}
}
logResult("FAILED CONFIGURATION",
Utils.detailedMethodName(tr.getMethod(), false),
tr.getMethod().getDescription(),
stackTrace,
tr.getParameters(),
tr.getMethod().getMethod().getParameterTypes()
);
}
for(Object o : getConfigurationSkips()) {
ITestResult tr = (ITestResult) o;
logResult("SKIPPED CONFIGURATION",
Utils.detailedMethodName(tr.getMethod(), false),
tr.getMethod().getDescription(),
null,
tr.getParameters(),
tr.getMethod().getMethod().getParameterTypes()
);
}
for(Object o : getPassedTests()) {
ITestResult tr = (ITestResult) o;
logResult("PASSED", tr, null);
}
for(Object o : getFailedTests()) {
ITestResult tr = (ITestResult) o;
Throwable ex = tr.getThrowable();
String stackTrace= "";
if (ex != null) {
if (m_verbose >= 2) {
stackTrace= Utils.stackTrace(ex, false)[0];
}
}
logResult("FAILED", tr, stackTrace);
}
for(Object o : getSkippedTests()) {
ITestResult tr = (ITestResult) o;
Throwable throwable = tr.getThrowable();
logResult("SKIPPED", tr, throwable != null ? Utils.stackTrace(throwable, false)[0] : null);
}
ITestNGMethod[] ft = resultsToMethods(getFailedTests());
StringBuffer logBuf= new StringBuffer("\n===============================================\n");
logBuf.append(" ").append(m_testName).append("\n");
logBuf.append(" Tests run: ").append(Utils.calculateInvokedMethodCount(getAllTestMethods()))
.append(", Failures: ").append(Utils.calculateInvokedMethodCount(ft))
.append(", Skips: ").append(Utils.calculateInvokedMethodCount(resultsToMethods(getSkippedTests())));
int confFailures= getConfigurationFailures().size();
int confSkips= getConfigurationSkips().size();
if(confFailures > 0 || confSkips > 0) {
logBuf.append("\n").append(" Configuration Failures: ").append(confFailures)
.append(", Skips: ").append(confSkips);
}
logBuf.append("\n===============================================\n");
logResult("", logBuf.toString());
}
private String getName() {
return m_testName;
}
private void logResult(String status, ITestResult tr, String stackTrace) {
logResult(status, tr.getName(), tr.getMethod().getDescription(), stackTrace,
tr.getParameters(), tr.getMethod().getMethod().getParameterTypes());
}
private void logResult(String status, String message) {
StringBuffer buf= new StringBuffer();
if(!"".equals(status)) {
buf.append(status).append(": ");
}
buf.append(message);
System.out.println(buf);
}
private void logResult(String status, String name,
String description, String stackTrace,
Object[] params, Class[] paramTypes) {
StringBuffer msg= new StringBuffer(name);
if(null != params && params.length > 0) {
msg.append("(");
// The error might be a data provider parameter mismatch, so make
// a special case here
if (params.length != paramTypes.length) {
msg.append(name + ": Wrong number of arguments were passed by " +
"the Data Provider: found " + params.length + " but " +
"expected " + paramTypes.length
+ ")");
}
else {
for(int i= 0; i < params.length; i++) {
if(i > 0) {
msg.append(", ");
}
msg.append(Utils.toString(params[i], paramTypes[i]));
}
msg.append(")");
}
}
if (! Utils.isStringEmpty(description)) {
msg.append("\n");
for (int i = 0; i < status.length() + 2; i++) {
msg.append(" ");
}
msg.append(description);
}
if ( ! Utils.isStringEmpty(stackTrace)) {
msg.append("\n").append(stackTrace);
}
logResult(status, msg.toString());
}
public void ppp(String s) {
System.out.println("[TextReporter " + getName() + "] " + s);
}
}