Here is my current naive solution please point out any issues you see
(except for the obvious hardcoding the classpath, package name and not
using jar's):
package sdc.unittest;
import java.io.*;
import java.lang.reflect.*;
public class TestRunner {
public static TestRunner init()
{
return new TestRunner();
}
public void run()
{
int i;
for(i=0;i<MaxTests;i++)
TestCases.run();
}
public TestRunner()
{
MaxTests=0;
scanDir(System.getProperty("java.class.path"));
}
private void scanDir(String dir)
{
File root=new File(dir);
String [] files=root.list();
int i=0;
File file;
for(i=0;i<files.length;i++) {
file=new File(dir,files);
if(file.isDirectory()==true) {
dir+=File.separator+files;
scanDir(dir);
continue;
}
if(files.endsWith(".class")==true)
scanClass(dir,
files.substring(0,files.lastIndexOf('.')));
}
}
private void scanClass(String dir, String klass)
{
Class bClass;
Class rClass;
Package bPackage;
Method method;
try {
rClass=Class.forName(getrClassName(dir,klass));
bClass=rClass.getSuperclass();
bPackage=bClass.getPackage();
if(bClass.getName().equals("sdc.unittest.TestCase")==true) {
method=rClass.getMethod("init",null);
TestCases[MaxTests++]=(TestCase)
method.invoke("init",
null);
}
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
}
private String getrClassName(String dir,String klass)
{
return
(dir.substring(dir.lastIndexOf(File.separator+File.separator)
+2)).replace(File.separatorChar,'.')+"."+klass;
}
private TestCase [] TestCases = new TestCase[CaseLimit];
private int MaxTests;
private static int CaseLimit=1024;
}