KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > junit > textui > ResultPrinter


1
2 package junit.textui;
3
4 import java.io.PrintStream JavaDoc;
5 import java.text.NumberFormat JavaDoc;
6 import java.util.Enumeration JavaDoc;
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 JavaDoc fWriter;
17     int fColumn= 0;
18     
19     public ResultPrinter(PrintStream JavaDoc writer) {
20         fWriter= writer;
21     }
22     
23     /* API for use by textui.TestRunner
24      */

25
26     synchronized void print(TestResult result, long runTime) {
27         printHeader(runTime);
28         printErrors(result);
29         printFailures(result);
30         printFooter(result);
31     }
32
33     void printWaitPrompt() {
34         getWriter().println();
35         getWriter().println("<RETURN> to continue");
36     }
37     
38     /* Internal methods
39      */

40
41     protected void printHeader(long runTime) {
42         getWriter().println();
43         getWriter().println("Time: "+elapsedTimeAsString(runTime));
44     }
45     
46     protected void printErrors(TestResult result) {
47         printDefects(result.errors(), result.errorCount(), "error");
48     }
49     
50     protected void printFailures(TestResult result) {
51         printDefects(result.failures(), result.failureCount(), "failure");
52     }
53     
54     protected void printDefects(Enumeration JavaDoc<TestFailure> booBoos, int count, String JavaDoc 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(booBoos.nextElement(), i);
62         }
63     }
64     
65     public void printDefect(TestFailure booBoo, int count) { // only public for testing purposes
66
printDefectHeader(booBoo, count);
67         printDefectTrace(booBoo);
68     }
69
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
76     protected void printDefectTrace(TestFailure booBoo) {
77         getWriter().print(BaseTestRunner.getFilteredTrace(booBoo.trace()));
78     }
79
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      */

101     protected String JavaDoc elapsedTimeAsString(long runTime) {
102         return NumberFormat.getInstance().format((double)runTime/1000);
103     }
104
105     public PrintStream JavaDoc getWriter() {
106         return fWriter;
107     }
108     /**
109      * @see junit.framework.TestListener#addError(Test, Throwable)
110      */

111     public void addError(Test test, Throwable JavaDoc t) {
112         getWriter().print("E");
113     }
114
115     /**
116      * @see junit.framework.TestListener#addFailure(Test, AssertionFailedError)
117      */

118     public void addFailure(Test test, AssertionFailedError t) {
119         getWriter().print("F");
120     }
121
122     /**
123      * @see junit.framework.TestListener#endTest(Test)
124      */

125     public void endTest(Test test) {
126     }
127
128     /**
129      * @see junit.framework.TestListener#startTest(Test)
130      */

131     public void startTest(Test test) {
132         getWriter().print(".");
133         if (fColumn++ >= 40) {
134             getWriter().println();
135             fColumn= 0;
136         }
137     }
138
139 }
140
Popular Tags