143 lines
3.7 KiB
Java
143 lines
3.7 KiB
Java
|
|
package junit.textui;
|
|
|
|
import java.io.PrintStream;
|
|
// The following line was removed for compatibility with Android libraries.
|
|
//import java.text.NumberFormat;
|
|
import java.util.Enumeration;
|
|
|
|
import junit.framework.AssertionFailedError;
|
|
import junit.framework.Test;
|
|
import junit.framework.TestFailure;
|
|
import junit.framework.TestListener;
|
|
import junit.framework.TestResult;
|
|
import junit.runner.BaseTestRunner;
|
|
|
|
public class ResultPrinter implements TestListener {
|
|
PrintStream fWriter;
|
|
int fColumn= 0;
|
|
|
|
public ResultPrinter(PrintStream writer) {
|
|
fWriter= writer;
|
|
}
|
|
|
|
/* API for use by textui.TestRunner
|
|
*/
|
|
|
|
synchronized void print(TestResult result, long runTime) {
|
|
printHeader(runTime);
|
|
printErrors(result);
|
|
printFailures(result);
|
|
printFooter(result);
|
|
}
|
|
|
|
void printWaitPrompt() {
|
|
getWriter().println();
|
|
getWriter().println("<RETURN> to continue");
|
|
}
|
|
|
|
/* Internal methods
|
|
*/
|
|
|
|
protected void printHeader(long runTime) {
|
|
getWriter().println();
|
|
getWriter().println("Time: "+elapsedTimeAsString(runTime));
|
|
}
|
|
|
|
protected void printErrors(TestResult result) {
|
|
printDefects(result.errors(), result.errorCount(), "error");
|
|
}
|
|
|
|
protected void printFailures(TestResult result) {
|
|
printDefects(result.failures(), result.failureCount(), "failure");
|
|
}
|
|
|
|
protected void printDefects(Enumeration booBoos, int count, String type) {
|
|
if (count == 0) return;
|
|
if (count == 1)
|
|
getWriter().println("There was " + count + " " + type + ":");
|
|
else
|
|
getWriter().println("There were " + count + " " + type + "s:");
|
|
for (int i= 1; booBoos.hasMoreElements(); i++) {
|
|
printDefect((TestFailure) booBoos.nextElement(), i);
|
|
}
|
|
}
|
|
|
|
public void printDefect(TestFailure booBoo, int count) { // only public for testing purposes
|
|
printDefectHeader(booBoo, count);
|
|
printDefectTrace(booBoo);
|
|
}
|
|
|
|
protected void printDefectHeader(TestFailure booBoo, int count) {
|
|
// I feel like making this a println, then adding a line giving the throwable a chance to print something
|
|
// before we get to the stack trace.
|
|
getWriter().print(count + ") " + booBoo.failedTest());
|
|
}
|
|
|
|
protected void printDefectTrace(TestFailure booBoo) {
|
|
getWriter().print(BaseTestRunner.getFilteredTrace(booBoo.trace()));
|
|
}
|
|
|
|
protected void printFooter(TestResult result) {
|
|
if (result.wasSuccessful()) {
|
|
getWriter().println();
|
|
getWriter().print("OK");
|
|
getWriter().println (" (" + result.runCount() + " test" + (result.runCount() == 1 ? "": "s") + ")");
|
|
|
|
} else {
|
|
getWriter().println();
|
|
getWriter().println("FAILURES!!!");
|
|
getWriter().println("Tests run: "+result.runCount()+
|
|
", Failures: "+result.failureCount()+
|
|
", Errors: "+result.errorCount());
|
|
}
|
|
getWriter().println();
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns the formatted string of the elapsed time.
|
|
* Duplicated from BaseTestRunner. Fix it.
|
|
*/
|
|
protected String elapsedTimeAsString(long runTime) {
|
|
// The following line was altered for compatibility with
|
|
// Android libraries.
|
|
return Double.toString((double)runTime/1000);
|
|
}
|
|
|
|
public PrintStream getWriter() {
|
|
return fWriter;
|
|
}
|
|
/**
|
|
* @see junit.framework.TestListener#addError(Test, Throwable)
|
|
*/
|
|
public void addError(Test test, Throwable t) {
|
|
getWriter().print("E");
|
|
}
|
|
|
|
/**
|
|
* @see junit.framework.TestListener#addFailure(Test, AssertionFailedError)
|
|
*/
|
|
public void addFailure(Test test, AssertionFailedError t) {
|
|
getWriter().print("F");
|
|
}
|
|
|
|
/**
|
|
* @see junit.framework.TestListener#endTest(Test)
|
|
*/
|
|
public void endTest(Test test) {
|
|
}
|
|
|
|
/**
|
|
* @see junit.framework.TestListener#startTest(Test)
|
|
*/
|
|
public void startTest(Test test) {
|
|
getWriter().print(".");
|
|
if (fColumn++ >= 40) {
|
|
getWriter().println();
|
|
fColumn= 0;
|
|
}
|
|
}
|
|
|
|
}
|