1package org.junit.internal; 2 3import java.io.PrintStream; 4import java.text.NumberFormat; 5import java.util.List; 6 7import org.junit.runner.Description; 8import org.junit.runner.Result; 9import org.junit.runner.notification.Failure; 10import org.junit.runner.notification.RunListener; 11 12public class TextListener extends RunListener { 13 14 private final PrintStream fWriter; 15 16 public TextListener(JUnitSystem system) { 17 this(system.out()); 18 } 19 20 public TextListener(PrintStream writer) { 21 this.fWriter= writer; 22 } 23 24 @Override 25 public void testRunFinished(Result result) { 26 printHeader(result.getRunTime()); 27 printFailures(result); 28 printFooter(result); 29 } 30 31 @Override 32 public void testStarted(Description description) { 33 fWriter.append('.'); 34 } 35 36 @Override 37 public void testFailure(Failure failure) { 38 fWriter.append('E'); 39 } 40 41 @Override 42 public void testIgnored(Description description) { 43 fWriter.append('I'); 44 } 45 46 /* 47 * Internal methods 48 */ 49 50 private PrintStream getWriter() { 51 return fWriter; 52 } 53 54 protected void printHeader(long runTime) { 55 getWriter().println(); 56 getWriter().println("Time: " + elapsedTimeAsString(runTime)); 57 } 58 59 protected void printFailures(Result result) { 60 List<Failure> failures= result.getFailures(); 61 if (failures.size() == 0) 62 return; 63 if (failures.size() == 1) 64 getWriter().println("There was " + failures.size() + " failure:"); 65 else 66 getWriter().println("There were " + failures.size() + " failures:"); 67 int i= 1; 68 for (Failure each : failures) 69 printFailure(each, "" + i++); 70 } 71 72 protected void printFailure(Failure each, String prefix) { 73 getWriter().println(prefix + ") " + each.getTestHeader()); 74 getWriter().print(each.getTrace()); 75 } 76 77 protected void printFooter(Result result) { 78 if (result.wasSuccessful()) { 79 getWriter().println(); 80 getWriter().print("OK"); 81 getWriter().println(" (" + result.getRunCount() + " test" + (result.getRunCount() == 1 ? "" : "s") + ")"); 82 83 } else { 84 getWriter().println(); 85 getWriter().println("FAILURES!!!"); 86 getWriter().println("Tests run: " + result.getRunCount() + ", Failures: " + result.getFailureCount()); 87 } 88 getWriter().println(); 89 } 90 91 /** 92 * Returns the formatted string of the elapsed time. Duplicated from 93 * BaseTestRunner. Fix it. 94 */ 95 protected String elapsedTimeAsString(long runTime) { 96 return NumberFormat.getInstance().format((double) runTime / 1000); 97 } 98} 99