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