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