junit.runner
Class TestCaseClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by junit.runner.TestCaseClassLoader

public class TestCaseClassLoader
extends ClassLoader

A custom class loader which enables the reloading of classes for each test run. The class loader can be configured with a list of package paths that should be excluded from loading. The loading of these packages is delegated to the system class loader. They will be shared across test runs.

The list of excluded package paths is specified in a properties file "excluded.properties" that is located in the same place as the TestCaseClassLoader class.

Known limitation: the TestCaseClassLoader cannot load classes from jar files.


Field Summary
private  String[] defaultExclusions
          default excluded paths
(package private) static String EXCLUDED_FILE
          name of excluded properties file
private  Vector fExcluded
          excluded paths
private  Vector fPathItems
          scanned class path
 
Constructor Summary
TestCaseClassLoader()
          Constructs a TestCaseLoader.
TestCaseClassLoader(String classPath)
          Constructs a TestCaseLoader.
 
Method Summary
private  byte[] getClassData(File f)
           
 URL getResource(String name)
           
 InputStream getResourceAsStream(String name)
           
 boolean isExcluded(String name)
           
(package private)  boolean isJar(String pathEntry)
           
 Class loadClass(String name, boolean resolve)
           
private  byte[] loadFileData(String path, String fileName)
           
private  byte[] loadJarData(String path, String fileName)
           
private  byte[] lookupClassData(String className)
           
private  void readExcludedPackages()
           
private  void scanPath(String classPath)
           
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

fPathItems

private Vector fPathItems
scanned class path


defaultExclusions

private String[] defaultExclusions
default excluded paths


EXCLUDED_FILE

static final String EXCLUDED_FILE
name of excluded properties file

See Also:
Constant Field Values

fExcluded

private Vector fExcluded
excluded paths

Constructor Detail

TestCaseClassLoader

public TestCaseClassLoader()
Constructs a TestCaseLoader. It scans the class path and the excluded package paths


TestCaseClassLoader

public TestCaseClassLoader(String classPath)
Constructs a TestCaseLoader. It scans the class path and the excluded package paths

Method Detail

scanPath

private void scanPath(String classPath)

getResource

public URL getResource(String name)
Overrides:
getResource in class ClassLoader

getResourceAsStream

public InputStream getResourceAsStream(String name)
Overrides:
getResourceAsStream in class ClassLoader

isExcluded

public boolean isExcluded(String name)

loadClass

public Class loadClass(String name,
                       boolean resolve)
                throws ClassNotFoundException
Overrides:
loadClass in class ClassLoader
Throws:
ClassNotFoundException

lookupClassData

private byte[] lookupClassData(String className)
                        throws ClassNotFoundException
Throws:
ClassNotFoundException

isJar

boolean isJar(String pathEntry)

loadFileData

private byte[] loadFileData(String path,
                            String fileName)

getClassData

private byte[] getClassData(File f)

loadJarData

private byte[] loadJarData(String path,
                           String fileName)

readExcludedPackages

private void readExcludedPackages()