KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openejb > test > ResultPrinter


1 /**
2  * Redistribution and use of this software and associated documentation
3  * ("Software"), with or without modification, are permitted provided
4  * that the following conditions are met:
5  *
6  * 1. Redistributions of source code must retain copyright
7  * statements and notices. Redistributions must also contain a
8  * copy of this document.
9  *
10  * 2. Redistributions in binary form must reproduce the
11  * above copyright notice, this list of conditions and the
12  * following disclaimer in the documentation and/or other
13  * materials provided with the distribution.
14  *
15  * 3. The name "OpenEJB" must not be used to endorse or promote
16  * products derived from this Software without prior written
17  * permission of The OpenEJB Group. For written permission,
18  * please contact dev@openejb.org.
19  *
20  * 4. Products derived from this Software may not be called "OpenEJB"
21  * nor may "OpenEJB" appear in their names without prior written
22  * permission of The OpenEJB Group. OpenEJB is a registered
23  * trademark of The OpenEJB Group.
24  *
25  * 5. Due credit should be given to the OpenEJB Project
26  * (http://www.openejb.org/).
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
29  * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30  * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32  * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39  * OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  * Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
42  *
43  * $Id: ResultPrinter.java 1912 2005-06-16 22:29:56Z jlaskowski $
44  */

45 package org.openejb.test;
46
47 import java.io.PrintStream JavaDoc;
48 import java.util.Enumeration JavaDoc;
49
50 import junit.framework.TestFailure;
51 import junit.framework.TestResult;
52
53 /**
54  *
55  * @author <a HREF="mailto:david.blevins@visi.com">David Blevins</a>
56  */

57 public class ResultPrinter extends junit.textui.ResultPrinter {
58
59     public ResultPrinter(PrintStream JavaDoc writer) {
60             super(writer);
61     }
62
63     public PrintStream JavaDoc writer(){
64         return getWriter();
65     }
66
67     public void printFailures(TestResult result) {
68         if (result.failureCount() != 0) {
69             writer().println("\n~~ Failure Results ~~~~~~~~~\n");
70             if (result.failureCount() == 1)
71                 writer().println("There was " + result.failureCount() + " failure:");
72             else
73                 writer().println("There were " + result.failureCount() + " failures:");
74             
75             int i = 1;
76             writer().println("\nFailure Summary:");
77             for (Enumeration JavaDoc e= result.failures(); e.hasMoreElements(); i++) {
78                 TestFailure failure= (TestFailure) e.nextElement();
79                 writer().println(i + ") " + failure.failedTest());
80             }
81             i = 1;
82             writer().println("\nFailure Details:");
83             for (Enumeration JavaDoc e= result.failures(); e.hasMoreElements(); i++) {
84                 TestFailure failure= (TestFailure) e.nextElement();
85                 writer().println("\n"+ i + ") " + failure.failedTest());
86                 Throwable JavaDoc t= failure.thrownException();
87                 if (t.getMessage() != null)
88                     writer().println("\t\"" + t.getMessage() + "\"");
89                 else {
90                     writer().println();
91                     failure.thrownException().printStackTrace();
92                 }
93             }
94         }
95     }
96
97     /**
98      * Prints the header of the report
99      */

100     public void printHeader(TestResult result) {
101         if (result.wasSuccessful()) {
102             writer().println();
103             writer().print("OK");
104             writer().println (" (" + result.runCount() + " tests)");
105     
106         } else {
107             writer().println();
108             writer().println("FAILURES!!!");
109             writer().println("~~ Test Results ~~~~~~~~~~~~");
110             writer().println(" Run: "+result.runCount());
111             writer().println(" Failures: "+result.failureCount());
112             writer().println(" Errors: "+result.errorCount());
113         }
114     }
115
116     public void printErrors(TestResult result) {
117         if (result.errorCount() != 0) {
118             writer().println("\n~~ Error Results ~~~~~~~~~~~\n");
119             if (result.errorCount() == 1)
120                 writer().println("There was "+result.errorCount()+" error:");
121             else
122                 writer().println("There were "+result.errorCount()+" errors:");
123     
124             writer().println("\nError Summary:");
125             int i = 1;
126             for (Enumeration JavaDoc e= result.errors(); e.hasMoreElements(); i++) {
127                 TestFailure failure= (TestFailure) e.nextElement();
128                 writer().println(i + ") " + failure.failedTest());
129             }
130             writer().println("\nError Details:");
131             i = 1;
132             for (Enumeration JavaDoc e= result.errors(); e.hasMoreElements(); i++) {
133                 TestFailure failure= (TestFailure)e.nextElement();
134                 writer().println(i+") "+failure.failedTest());
135                 String JavaDoc trace = getRelevantStackTrace(failure.thrownException());
136                 writer().println(trace);
137             }
138         }
139     }
140
141     public String JavaDoc getRelevantStackTrace(Throwable JavaDoc t){
142         StringBuffer JavaDoc trace = new StringBuffer JavaDoc();
143         
144         try{
145             // Cut the stack trace after "at junit.framework" is found
146
// Return just the first part.
147
java.io.ByteArrayOutputStream JavaDoc bos = new java.io.ByteArrayOutputStream JavaDoc();
148             java.io.PrintWriter JavaDoc pw = new java.io.PrintWriter JavaDoc(bos);
149             t.printStackTrace(pw);
150             pw.close();
151     
152             java.io.BufferedReader JavaDoc reader = new java.io.BufferedReader JavaDoc(new java.io.StringReader JavaDoc(bos.toString()));
153             String JavaDoc line = reader.readLine();
154             while(line != null) {
155                 if (line.indexOf("at junit.framework") != -1) break;
156                 if (line.indexOf("at org.openejb.test.NumberedTestCase") != -1) break;
157                 if (line.indexOf("at org.openejb.test.TestSuite") != -1) break;
158                 
159                 trace.append(line).append('\n');
160                 line = reader.readLine();
161             }
162         } catch(Exception JavaDoc e){
163         }
164         
165         return trace.toString();
166     }
167
168 }
169
Popular Tags