/*
* 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);
}
}
}
|