junit.runner.LoadingTestCollector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dx Show documentation
Show all versions of dx Show documentation
dx is an Android SDK platform tool that transforms Java bytecode (and JARs) into Dalvik VM 'DEX' code.
The newest version!
package junit.runner;
import java.lang.reflect.*;
import junit.runner.*;
import junit.framework.*;
/**
* An implementation of a TestCollector that loads
* all classes on the class path and tests whether
* it is assignable from Test or provides a static suite method.
* @see TestCollector
*/
public class LoadingTestCollector extends ClassPathTestCollector {
TestCaseClassLoader fLoader;
public LoadingTestCollector() {
fLoader= new TestCaseClassLoader();
}
protected boolean isTestClass(String classFileName) {
try {
if (classFileName.endsWith(".class")) {
Class testClass= classFromFile(classFileName);
return (testClass != null) && isTestClass(testClass);
}
}
catch (ClassNotFoundException expected) {
}
catch (NoClassDefFoundError notFatal) {
}
return false;
}
Class classFromFile(String classFileName) throws ClassNotFoundException {
String className= classNameFromFile(classFileName);
if (!fLoader.isExcluded(className))
return fLoader.loadClass(className, false);
return null;
}
boolean isTestClass(Class testClass) {
if (hasSuiteMethod(testClass))
return true;
if (Test.class.isAssignableFrom(testClass) &&
Modifier.isPublic(testClass.getModifiers()) &&
hasPublicConstructor(testClass))
return true;
return false;
}
boolean hasSuiteMethod(Class testClass) {
try {
testClass.getMethod(BaseTestRunner.SUITE_METHODNAME, new Class[0]);
} catch(Exception e) {
return false;
}
return true;
}
boolean hasPublicConstructor(Class testClass) {
try {
TestSuite.getTestConstructor(testClass);
} catch(NoSuchMethodException e) {
return false;
}
return true;
}
}