1 package junit.runner; 2 3 import java.lang.reflect.*; 4 import junit.runner.*; 5 import junit.framework.*; 6 7 13 public class LoadingClassPathTestCollector extends ClassPathTestCollector { 14 15 TestCaseClassLoader fLoader; 16 17 public LoadingClassPathTestCollector() { 18 fLoader= new TestCaseClassLoader(); 19 } 20 21 protected boolean isTestClass(String classFileName) { 22 try { 23 if (classFileName.endsWith(".class")) { 24 Class testClass= classFromFile(classFileName); 25 return (testClass != null) && isTestClass(testClass); 26 } 27 } 28 catch (ClassNotFoundException expected) { 29 } 30 catch (NoClassDefFoundError notFatal) { 31 } 32 return false; 33 } 34 35 Class classFromFile(String classFileName) throws ClassNotFoundException { 36 String className= classNameFromFile(classFileName); 37 if (!fLoader.isExcluded(className)) 38 return fLoader.loadClass(className, false); 39 return null; 40 } 41 42 boolean isTestClass(Class testClass) { 43 if (hasSuiteMethod(testClass)) 44 return true; 45 if (Test.class.isAssignableFrom(testClass) && 46 Modifier.isPublic(testClass.getModifiers()) && 47 hasPublicConstructor(testClass)) 48 return true; 49 return false; 50 } 51 52 boolean hasSuiteMethod(Class testClass) { 53 try { 54 Method suiteMethod= testClass.getMethod(BaseTestRunner.SUITE_METHODNAME, new Class [0]); 55 } catch(Exception e) { 56 return false; 57 } 58 return true; 59 } 60 61 boolean hasPublicConstructor(Class testClass) { 62 Class [] args= { String .class }; 63 Constructor c= null; 64 try { 65 c= testClass.getConstructor(args); 66 } catch(Exception e) { 67 return false; 68 } 69 return true; 70 } 71 72 } 73 | Popular Tags |