carbidecpp22devenv/plugins/org.eclipse.test.source_3.5.0.r20080925/src/org.junit4_4.5.0.v20090423/junitsrc/junit/textui/ResultPrinter.java
changeset 636 3ef299ba838f
equal deleted inserted replaced
635:8d56403172bc 636:3ef299ba838f
       
     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 	
       
    19 	public ResultPrinter(PrintStream 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<TestFailure> 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(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 elapsedTimeAsString(long runTime) {
       
   102 		return NumberFormat.getInstance().format((double)runTime/1000);
       
   103 	}
       
   104 
       
   105 	public PrintStream getWriter() {
       
   106 		return fWriter;
       
   107 	}
       
   108 	/**
       
   109 	 * @see junit.framework.TestListener#addError(Test, Throwable)
       
   110 	 */
       
   111 	public void addError(Test test, Throwable 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 }