/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.test.internal.util; import java.util.Enumeration; import java.util.Iterator; import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestFailure; import junit.framework.TestResult; import org.eclipse.gemini.blueprint.test.internal.holder.OsgiTestInfoHolder; /** * Utility class for running OSGi-JUnit tests. * * @author Costin Leau * */ public abstract class TestUtils { /** * Clones the test result from a TestResult loaded through a different * classloader. * * @param source test result loaded through a different classloader * @param destination test result reported to the outside framework * @param test initial test used for bootstrapping the integration framework * @return cloned test result */ public static TestResult cloneTestResults(OsgiTestInfoHolder source, TestResult destination, Test test) { // get errors for (Iterator iter = source.getTestErrors().iterator(); iter.hasNext();) { destination.addError(test, (Throwable) iter.next()); } // get failures // since failures are a special JUnit error, we have to clone the stack for (Iterator iter = source.getTestFailures().iterator(); iter.hasNext();) { Throwable originalFailure = (Throwable) iter.next(); AssertionFailedError clonedFailure = new AssertionFailedError(originalFailure.getMessage()); clonedFailure.setStackTrace(originalFailure.getStackTrace()); destination.addFailure(test, clonedFailure); } return destination; } /** * Utility method which extracts the information from a TestResult and * stores it as primordial classes. This avoids the use of reflection when * reading the results outside OSGi. * * @param result * @param holder */ public static void unpackProblems(TestResult result, OsgiTestInfoHolder holder) { Enumeration errors = result.errors(); while (errors.hasMoreElements()) { TestFailure failure = (TestFailure) errors.nextElement(); holder.addTestError(failure.thrownException()); } Enumeration failures = result.failures(); while (failures.hasMoreElements()) { TestFailure failure = (TestFailure) failures.nextElement(); holder.addTestFailure(failure.thrownException()); } } }