| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.google.coretests; |
| |
| import java.io.PrintStream; |
| |
| import junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestResult; |
| import junit.textui.ResultPrinter; |
| |
| /** |
| * A special ResultPrinter implementation that displays additional statistics |
| * about the test that have been executed. |
| */ |
| public class CoreTestPrinter extends ResultPrinter { |
| |
| /** |
| * The last test class we executed. |
| */ |
| private Class<?> fLastClass; |
| |
| /** |
| * The current output column for dots. |
| */ |
| private int fColumn; |
| |
| /** |
| * The time it took to execute the tests. |
| */ |
| private int fRunTime; |
| |
| /** |
| * The flags the user specified. |
| */ |
| private int fFlags; |
| |
| /** |
| * Creates a new CoreTestPrinter for the given parameters. |
| */ |
| public CoreTestPrinter(PrintStream writer, int flags) { |
| super(writer); |
| fFlags = flags; |
| } |
| |
| @Override |
| protected void printHeader(long runTime) { |
| fRunTime = (int)(runTime / 1000); |
| |
| if (fColumn != 0) { |
| getWriter().println(); |
| } |
| |
| getWriter().println(); |
| } |
| |
| @Override |
| protected void printFooter(TestResult result) { |
| CoreTestResult coreResult = (CoreTestResult)result; |
| |
| PrintStream printer = getWriter(); |
| |
| if (fColumn != 0) { |
| printer.println(); |
| } |
| |
| printer.println(); |
| printer.println("Total tests : " + coreResult.fTotalTestCount); |
| printer.println("Tests run : " + coreResult.runCount()); |
| printer.println("Tests ignored : " + coreResult.fIgnoredCount); |
| |
| printer.println(); |
| printer.println("Normal tests : " + coreResult.fNormalTestCount); |
| printer.println("Android-only : " + coreResult.fAndroidOnlyCount); |
| printer.println("Broken tests : " + coreResult.fBrokenTestCount); |
| printer.println("Known failures: " + coreResult.fKnownFailureCount); |
| printer.println("Side-effects : " + coreResult.fSideEffectCount); |
| |
| printMemory(); |
| |
| int seconds = fRunTime; |
| |
| int hours = seconds / 3600; |
| seconds = seconds % 3600; |
| |
| int minutes = seconds / 60; |
| seconds = seconds % 60; |
| |
| String text = String.format("%02d:%02d:%02d", hours, minutes, seconds); |
| |
| printer.println(); |
| printer.println("Time taken : " + text); |
| |
| super.printFooter(result); |
| } |
| |
| /** |
| * Dumps some memory info. |
| */ |
| private void printMemory() { |
| PrintStream printer = getWriter(); |
| Runtime runtime = Runtime.getRuntime(); |
| |
| long total = runtime.totalMemory(); |
| long free = runtime.freeMemory(); |
| long used = total - free; |
| |
| printer.println(); |
| printer.println("Total memory : " + total); |
| printer.println("Used memory : " + used); |
| printer.println("Free memory : " + free); |
| } |
| |
| @Override |
| public void startTest(Test test) { |
| TestCase caze = (TestCase)test; |
| |
| if (fLastClass == null || |
| caze.getClass().getPackage() != fLastClass.getPackage()) { |
| |
| if (fColumn != 0) { |
| getWriter().println(); |
| fColumn = 0; |
| } |
| |
| getWriter().println(); |
| Package pack = caze.getClass().getPackage(); |
| getWriter().println(pack == null ? "Default package" : |
| pack.getName()); |
| getWriter().println(); |
| |
| } |
| |
| if ((fFlags & CoreTestSuite.VERBOSE) != 0) { |
| if (caze.getClass() != fLastClass) { |
| if (fColumn != 0) { |
| getWriter().println(); |
| fColumn = 0; |
| } |
| |
| String name = caze.getClass().getSimpleName().toString(); |
| |
| printMemory(); |
| getWriter().println("Now executing : " + name); |
| getWriter().println(); |
| } |
| } |
| |
| getWriter().print("."); |
| if (fColumn++ >= 40) { |
| getWriter().println(); |
| fColumn= 0; |
| } |
| |
| fLastClass = caze.getClass(); |
| } |
| |
| @Override |
| public void addError(Test test, Throwable t) { |
| if (t instanceof CoreTestTimeout) { |
| getWriter().print("T"); |
| } else { |
| super.addError(test, t); |
| } |
| } |
| |
| } |