blob: f6e0bd5cb6ab754979dc4bf12c89474f068b7ef8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.testplugin;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Test suite with user-specified test order.
* Fails if not all test methods are listed.
*/
public class OrderedTestSuite extends TestSuite {
/**
* @param testClass test class
* @param testMethods all test methods of the given class, in the requested order
*/
public OrderedTestSuite(final Class testClass, String[] testMethods) throws Exception {
super(testClass.getName());
Set existingMethods= new HashSet();
Method[] methods= testClass.getMethods(); // just public member methods
for (int i= 0; i < methods.length; i++) {
Method method= methods[i];
existingMethods.add(method.getName());
}
for (int i= 0; i < testMethods.length; i++) {
final String testMethod= testMethods[i];
if (existingMethods.remove(testMethod)) {
addTest(createTest(testClass, testMethod));
} else {
addTest(error(testMethod, new IllegalArgumentException(
"Class '" + testClass.getName() + " misses test method '" + testMethod
+ "'.")));
}
}
for (Iterator iter= existingMethods.iterator(); iter.hasNext();) {
String existingMethod= (String) iter.next();
if (existingMethod.startsWith("test")) {
addTest(error(existingMethod, new IllegalArgumentException(
"Test method '" + existingMethod + "' not listed in OrderedTestSuite of class '"
+ testClass.getName() + "'.")));
}
}
}
public static Test error(String testMethod, Exception exception) {
final Throwable e2= exception.fillInStackTrace();
return new TestCase(testMethod) {
protected void runTest() throws Throwable {
throw e2;
}
};
}
}