OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / dalvik / dx / src / junit / runner / ClassPathTestCollector.java
1 package junit.runner;
2
3 import java.util.*;
4 import java.io.*;
5
6 /**
7  * An implementation of a TestCollector that consults the
8  * class path. It considers all classes on the class path
9  * excluding classes in JARs. It leaves it up to subclasses
10  * to decide whether a class is a runnable Test.
11  *
12  * @see TestCollector
13  */
14 public abstract class ClassPathTestCollector implements TestCollector {
15         
16         static final int SUFFIX_LENGTH= ".class".length();
17         
18         public ClassPathTestCollector() {
19         }
20         
21         public Enumeration collectTests() {
22                 String classPath= System.getProperty("java.class.path");
23                 Hashtable result = collectFilesInPath(classPath);
24                 return result.elements();
25         }
26
27         public Hashtable collectFilesInPath(String classPath) {
28                 Hashtable result= collectFilesInRoots(splitClassPath(classPath));
29                 return result;
30         }
31         
32         Hashtable collectFilesInRoots(Vector roots) {
33                 Hashtable<String,String> result= new Hashtable<String,String>(100);
34                 Enumeration e= roots.elements();
35                 while (e.hasMoreElements()) 
36                         gatherFiles(new File((String)e.nextElement()), "", result);
37                 return result;
38         }
39
40     void gatherFiles(File classRoot, String classFileName, Hashtable<String,String> result) {
41                 File thisRoot= new File(classRoot, classFileName);
42                 if (thisRoot.isFile()) {
43                         if (isTestClass(classFileName)) {
44                                 String className= classNameFromFile(classFileName);
45                                 result.put(className, className);
46                         }
47                         return;
48                 }               
49                 String[] contents= thisRoot.list();
50                 if (contents != null) { 
51                         for (int i= 0; i < contents.length; i++) 
52                                 gatherFiles(classRoot, classFileName+File.separatorChar+contents[i], result);           
53                 }
54         }
55         
56         Vector splitClassPath(String classPath) {
57                 Vector<String> result= new Vector<String>();
58                 String separator= System.getProperty("path.separator");
59                 StringTokenizer tokenizer= new StringTokenizer(classPath, separator);
60                 while (tokenizer.hasMoreTokens()) 
61                         result.addElement(tokenizer.nextToken());
62                 return result;
63         }
64         
65         protected boolean isTestClass(String classFileName) {
66                 return 
67                         classFileName.endsWith(".class") && 
68                         classFileName.indexOf('$') < 0 &&
69                         classFileName.indexOf("Test") > 0;
70         }
71         
72         protected String classNameFromFile(String classFileName) {
73                 // convert /a/b.class to a.b
74                 String s= classFileName.substring(0, classFileName.length()-SUFFIX_LENGTH);
75                 String s2= s.replace(File.separatorChar, '.');
76                 if (s2.startsWith("."))
77                         return s2.substring(1);
78                 return s2;
79         }       
80 }