OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / dalvik / dx / src / junit / runner / LoadingTestCollector.java
1 package junit.runner;
2
3 import java.lang.reflect.*;
4 import junit.runner.*;
5 import junit.framework.*;
6
7 /**
8  * An implementation of a TestCollector that loads
9  * all classes on the class path and tests whether
10  * it is assignable from Test or provides a static suite method.
11  * @see TestCollector
12  */
13 public class LoadingTestCollector extends ClassPathTestCollector {
14         
15         TestCaseClassLoader fLoader;
16         
17         public LoadingTestCollector() {
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                         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                 try {
63                         TestSuite.getTestConstructor(testClass);
64                 } catch(NoSuchMethodException e) {
65                         return false;
66                 }
67                 return true;
68         }
69 }