• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package junit.textui;
3 
4 import java.io.PrintStream;
5 import java.text.NumberFormat;
6 import java.util.Enumeration;
7 
8 import junit.framework.AssertionFailedError;
9 import junit.framework.Test;
10 import junit.framework.TestFailure;
11 import junit.framework.TestListener;
12 import junit.framework.TestResult;
13 import junit.runner.BaseTestRunner;
14 
15 public class ResultPrinter implements TestListener {
16 	PrintStream fWriter;
17 	int fColumn= 0;
18 
ResultPrinter(PrintStream writer)19 	public ResultPrinter(PrintStream writer) {
20 		fWriter= writer;
21 	}
22 
23 	/* API for use by textui.TestRunner
24 	 */
25 
print(TestResult result, long runTime)26 	synchronized void print(TestResult result, long runTime) {
27 		printHeader(runTime);
28 	    printErrors(result);
29 	    printFailures(result);
30 	    printFooter(result);
31 	}
32 
printWaitPrompt()33 	void printWaitPrompt() {
34 		getWriter().println();
35 		getWriter().println("<RETURN> to continue");
36 	}
37 
38 	/* Internal methods
39 	 */
40 
printHeader(long runTime)41 	protected void printHeader(long runTime) {
42 		getWriter().println();
43 		getWriter().println("Time: "+elapsedTimeAsString(runTime));
44 	}
45 
printErrors(TestResult result)46 	protected void printErrors(TestResult result) {
47 		printDefects(result.errors(), result.errorCount(), "error");
48 	}
49 
printFailures(TestResult result)50 	protected void printFailures(TestResult result) {
51 		printDefects(result.failures(), result.failureCount(), "failure");
52 	}
53 
printDefects(Enumeration booBoos, int count, String type)54 	protected void printDefects(Enumeration booBoos, int count, String type) {
55 		if (count == 0) return;
56 		if (count == 1)
57 			getWriter().println("There was " + count + " " + type + ":");
58 		else
59 			getWriter().println("There were " + count + " " + type + "s:");
60 		for (int i= 1; booBoos.hasMoreElements(); i++) {
61 			printDefect((TestFailure) booBoos.nextElement(), i);
62 		}
63 	}
64 
printDefect(TestFailure booBoo, int count)65 	public void printDefect(TestFailure booBoo, int count) { // only public for testing purposes
66 		printDefectHeader(booBoo, count);
67 		printDefectTrace(booBoo);
68 	}
69 
printDefectHeader(TestFailure booBoo, int count)70 	protected void printDefectHeader(TestFailure booBoo, int count) {
71 		// I feel like making this a println, then adding a line giving the throwable a chance to print something
72 		// before we get to the stack trace.
73 		getWriter().print(count + ") " + booBoo.failedTest());
74 	}
75 
printDefectTrace(TestFailure booBoo)76 	protected void printDefectTrace(TestFailure booBoo) {
77 		getWriter().print(BaseTestRunner.getFilteredTrace(booBoo.trace()));
78 	}
79 
printFooter(TestResult result)80 	protected void printFooter(TestResult result) {
81 		if (result.wasSuccessful()) {
82 			getWriter().println();
83 			getWriter().print("OK");
84 			getWriter().println (" (" + result.runCount() + " test" + (result.runCount() == 1 ? "": "s") + ")");
85 
86 		} else {
87 			getWriter().println();
88 			getWriter().println("FAILURES!!!");
89 			getWriter().println("Tests run: "+result.runCount()+
90 				         ",  Failures: "+result.failureCount()+
91 				         ",  Errors: "+result.errorCount());
92 		}
93 	    getWriter().println();
94 	}
95 
96 
97 	/**
98 	 * Returns the formatted string of the elapsed time.
99 	 * Duplicated from BaseTestRunner. Fix it.
100 	 */
elapsedTimeAsString(long runTime)101 	protected String elapsedTimeAsString(long runTime) {
102 		return NumberFormat.getInstance().format((double)runTime/1000);
103 	}
104 
getWriter()105 	public PrintStream getWriter() {
106 		return fWriter;
107 	}
108 	/**
109 	 * @see junit.framework.TestListener#addError(Test, Throwable)
110 	 */
addError(Test test, Throwable t)111 	public void addError(Test test, Throwable t) {
112 		getWriter().print("E");
113 	}
114 
115 	/**
116 	 * @see junit.framework.TestListener#addFailure(Test, AssertionFailedError)
117 	 */
addFailure(Test test, AssertionFailedError t)118 	public void addFailure(Test test, AssertionFailedError t) {
119 		getWriter().print("F");
120 	}
121 
122 	/**
123 	 * @see junit.framework.TestListener#endTest(Test)
124 	 */
endTest(Test test)125 	public void endTest(Test test) {
126 	}
127 
128 	/**
129 	 * @see junit.framework.TestListener#startTest(Test)
130 	 */
startTest(Test test)131 	public void startTest(Test test) {
132 		getWriter().print(".");
133 		if (fColumn++ >= 40) {
134 			getWriter().println();
135 			fColumn= 0;
136 		}
137 	}
138 
139 }
140