/* This file is part of VoltDB. * Copyright (C) 2008-2010 VoltDB L.L.C. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ package org.voltdb; import java.io.OutputStream; import java.io.PrintStream; import junit.framework.AssertionFailedError; import junit.framework.Test; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter; import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest; public class VoltJUnitFormatter implements JUnitResultFormatter { PrintStream out = System.out; JUnitTest m_currentSuite; int m_tests; int m_errs; int m_failures; long m_start; @Override public void setOutput(OutputStream outputStream) { out = new PrintStream(outputStream); } @Override public void setSystemError(String arg0) { //out.println("SYSERR: " + arg0); } @Override public void setSystemOutput(String arg0) { //out.println("SYSOUT: " + arg0); } @Override public void startTestSuite(JUnitTest suite) throws BuildException { m_currentSuite = suite; m_tests = m_errs = m_failures = 0; m_start = System.currentTimeMillis(); out.println("Running " + suite.getName()); } @Override public void endTestSuite(JUnitTest suite) throws BuildException { out.printf("Tests run: %3d, Failures: %3d, Errors: %3d, Time elapsed: %.2f sec\n", m_tests, m_failures, m_errs, (System.currentTimeMillis() - m_start) / 1000.0); } @Override public void startTest(Test arg0) { } @Override public void endTest(Test arg0) { out.flush(); m_tests++; } @Override public void addError(Test arg0, Throwable arg1) { String testName = "unknown"; if (arg0 != null) { testName = arg0.toString(); int idx = testName.indexOf('('); if (idx > 0) { testName = testName.substring(0, idx); } } out.println(" " + testName + " had an error."); StackTraceElement[] st = arg1.getStackTrace(); int i = 0; for (StackTraceElement ste : st) { if (ste.getClassName().contains("org.voltdb") == false) continue; out.printf(" %s(%s:%d)\n", ste.getClassName(), ste.getFileName(), ste.getLineNumber()); if (++i == 3) break; } m_errs++; } @Override public void addFailure(Test arg0, AssertionFailedError arg1) { String testName = arg0.toString(); testName = testName.substring(0, testName.indexOf('(')); out.println(" " + testName + " failed an assertion."); StackTraceElement[] st = arg1.getStackTrace(); int i = 0; for (StackTraceElement ste : st) { if (ste.getClassName().contains("org.voltdb") == false) continue; out.printf(" %s(%s:%d)\n", ste.getClassName(), ste.getFileName(), ste.getLineNumber()); if (++i == 3) break; } m_failures++; } }