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