001: package org.junit.internal;
002:
003: import java.io.PrintStream;
004: import java.text.NumberFormat;
005:
006: import org.junit.runner.Description;
007: import org.junit.runner.Result;
008: import org.junit.runner.notification.Failure;
009: import org.junit.runner.notification.RunListener;
010:
011: public class TextListener extends RunListener {
012:
013: private final PrintStream fWriter;
014:
015: public TextListener() {
016: this (System.out);
017: }
018:
019: public TextListener(PrintStream writer) {
020: this .fWriter = writer;
021: }
022:
023: @Override
024: public void testRunFinished(Result result) {
025: printHeader(result.getRunTime());
026: printFailures(result);
027: printFooter(result);
028: }
029:
030: @Override
031: public void testStarted(Description description) {
032: fWriter.append('.');
033: }
034:
035: @Override
036: public void testFailure(Failure failure) {
037: fWriter.append('E');
038: }
039:
040: @Override
041: public void testIgnored(Description description) {
042: fWriter.append('I');
043: }
044:
045: /*
046: * Internal methods
047: */
048:
049: private PrintStream getWriter() {
050: return fWriter;
051: }
052:
053: protected void printHeader(long runTime) {
054: getWriter().println();
055: getWriter().println("Time: " + elapsedTimeAsString(runTime));
056: }
057:
058: protected void printFailures(Result result) {
059: if (result.getFailureCount() == 0)
060: return;
061: if (result.getFailureCount() == 1)
062: getWriter().println(
063: "There was " + result.getFailureCount()
064: + " failure:");
065: else
066: getWriter().println(
067: "There were " + result.getFailureCount()
068: + " failures:");
069: int i = 1;
070: for (Failure each : result.getFailures())
071: printFailure(each, i++);
072: }
073:
074: protected void printFailure(Failure failure, int count) {
075: printFailureHeader(failure, count);
076: printFailureTrace(failure);
077: }
078:
079: protected void printFailureHeader(Failure failure, int count) {
080: getWriter().println(count + ") " + failure.getTestHeader());
081: }
082:
083: protected void printFailureTrace(Failure failure) {
084: getWriter().print(failure.getTrace());
085: }
086:
087: protected void printFooter(Result result) {
088: if (result.wasSuccessful()) {
089: getWriter().println();
090: getWriter().print("OK");
091: getWriter().println(
092: " (" + result.getRunCount() + " test"
093: + (result.getRunCount() == 1 ? "" : "s")
094: + ")");
095:
096: } else {
097: getWriter().println();
098: getWriter().println("FAILURES!!!");
099: getWriter().println(
100: "Tests run: " + result.getRunCount()
101: + ", Failures: "
102: + result.getFailureCount());
103: }
104: getWriter().println();
105: }
106:
107: /**
108: * Returns the formatted string of the elapsed time. Duplicated from
109: * BaseTestRunner. Fix it.
110: */
111: protected String elapsedTimeAsString(long runTime) {
112: return NumberFormat.getInstance().format(
113: (double) runTime / 1000);
114: }
115: }
|