/**
*
*/
package org.junit.internal.requests;
import java.lang.reflect.Constructor;
import org.junit.internal.runners.OldTestClassRunner;
import org.junit.internal.runners.TestClassRunner;
import org.junit.runner.Request;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
public class ClassRequest extends Request {
private final Class<?> fTestClass;
public ClassRequest(Class<?> each) {
fTestClass= each;
}
@Override
public Runner getRunner() {
Class runnerClass= getRunnerClass(fTestClass);
try {
Constructor constructor= runnerClass.getConstructor(Class.class); // TODO good error message if no such constructor
Runner runner= (Runner) constructor
.newInstance(new Object[] { fTestClass });
return runner;
} catch (Exception e) {
return Request.errorReport(fTestClass, e).getRunner();
}
}
Class getRunnerClass(Class<?> testClass) {
RunWith annotation= testClass.getAnnotation(RunWith.class);
if (annotation != null) {
return annotation.value();
} else if (isPre4Test(testClass)) {
return OldTestClassRunner.class;
} else {
return TestClassRunner.class;
}
}
boolean isPre4Test(Class<?> testClass) {
return junit.framework.TestCase.class.isAssignableFrom(testClass);
}
}