158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpackage junit.textui; 358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.io.PrintStream; 549c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot// android-changed 649c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot// The following line was removed for compatibility with Android libraries. 749c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot// import java.text.NumberFormat; 858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport java.util.Enumeration; 958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 1058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.AssertionFailedError; 1158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.Test; 1258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.TestFailure; 1358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.TestListener; 1458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.framework.TestResult; 1558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotimport junit.runner.BaseTestRunner; 1658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 1758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabotpublic class ResultPrinter implements TestListener { 1858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot PrintStream fWriter; 1958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot int fColumn= 0; 2058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public ResultPrinter(PrintStream writer) { 2258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fWriter= writer; 2358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 2458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /* API for use by textui.TestRunner 2658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 2758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 2858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot synchronized void print(TestResult result, long runTime) { 2958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printHeader(runTime); 3058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printErrors(result); 3158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printFailures(result); 3258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printFooter(result); 3358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 3458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 3558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot void printWaitPrompt() { 3658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 3758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("<RETURN> to continue"); 3858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 3958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /* Internal methods 4158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 4258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printHeader(long runTime) { 4458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 4558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("Time: "+elapsedTimeAsString(runTime)); 4658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 4758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 4858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printErrors(TestResult result) { 4958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printDefects(result.errors(), result.errorCount(), "error"); 5058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 5258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printFailures(TestResult result) { 5358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printDefects(result.failures(), result.failureCount(), "failure"); 5458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 5558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 56b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot protected void printDefects(Enumeration<TestFailure> booBoos, int count, String type) { 5758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (count == 0) return; 5858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (count == 1) 5958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("There was " + count + " " + type + ":"); 6058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot else 6158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("There were " + count + " " + type + "s:"); 6258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot for (int i= 1; booBoos.hasMoreElements(); i++) { 63b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot printDefect(booBoos.nextElement(), i); 6458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 6658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 6758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void printDefect(TestFailure booBoo, int count) { // only public for testing purposes 6858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printDefectHeader(booBoo, count); 6958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot printDefectTrace(booBoo); 7058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 7158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 7258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printDefectHeader(TestFailure booBoo, int count) { 7358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot // I feel like making this a println, then adding a line giving the throwable a chance to print something 7458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot // before we get to the stack trace. 7558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print(count + ") " + booBoo.failedTest()); 7658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 7758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 7858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printDefectTrace(TestFailure booBoo) { 7958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print(BaseTestRunner.getFilteredTrace(booBoo.trace())); 8058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 8158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected void printFooter(TestResult result) { 8358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (result.wasSuccessful()) { 8458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 8558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print("OK"); 8658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println (" (" + result.runCount() + " test" + (result.runCount() == 1 ? "": "s") + ")"); 8758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 8858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } else { 8958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 9058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("FAILURES!!!"); 9158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println("Tests run: "+result.runCount()+ 9258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot ", Failures: "+result.failureCount()+ 9358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot ", Errors: "+result.errorCount()); 9458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 9558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 9658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 9758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 9858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 9958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 10058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Returns the formatted string of the elapsed time. 10158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * Duplicated from BaseTestRunner. Fix it. 10258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 10358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot protected String elapsedTimeAsString(long runTime) { 10449c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // android-changed 10549c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // The following line was altered for compatibility with 10649c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot // Android libraries. 10749c1b9df188a5be52ffd80a2bd1b9723755d8168Brett Chabot return Double.toString((double)runTime/1000); 10858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 10958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 11058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public PrintStream getWriter() { 11158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot return fWriter; 11258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 11358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 11458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * @see junit.framework.TestListener#addError(Test, Throwable) 11558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 11658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void addError(Test test, Throwable t) { 11758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print("E"); 11858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 11958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 12058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 12158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * @see junit.framework.TestListener#addFailure(Test, AssertionFailedError) 12258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 12358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void addFailure(Test test, AssertionFailedError t) { 12458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print("F"); 12558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 12658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 12758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 12858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * @see junit.framework.TestListener#endTest(Test) 12958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 13058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void endTest(Test test) { 13158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 13258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 13358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot /** 13458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot * @see junit.framework.TestListener#startTest(Test) 13558a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot */ 13658a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot public void startTest(Test test) { 13758a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().print("."); 13858a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot if (fColumn++ >= 40) { 13958a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot getWriter().println(); 14058a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot fColumn= 0; 14158a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 14258a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot } 14358a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot 14458a8b0aba2dec5695628a2bf25a3fae42c2c3533Brett Chabot} 145