package net.sf.jsptest.utils;
import java.io.File;
import junit.framework.TestCase;
/**
* @author Lasse Koskela
*/
public class CustomClassLoaderTest extends TestCase {
private File baseDir;
protected String definedName;
protected byte[] definedData;
private String fullyQualifiedClassName;
protected void setUp() throws Exception {
super.setUp();
fullyQualifiedClassName = "pkg.Fake";
baseDir = new File(System.getProperty("java.io.tmpdir"), "basedir");
File packageDir = new File(baseDir, "pkg");
packageDir.mkdirs();
File classFile = new File(packageDir, "Fake.class");
IO.write("Fake", classFile);
}
public void testClassesAreLoadedFromTheGivenBaseDirectory() throws Exception {
CustomClassLoader cl = new CustomClassLoader(baseDir) {
// override to avoid actual class loading
protected Class defineClass(String name, byte[] data) throws ClassFormatError {
definedName = name;
definedData = data;
return CustomClassLoaderTest.class;
}
};
verifyClassLoading(cl);
}
public void testBaseDirectoryCanBeGivenAsAbsolutePathName() throws Exception {
CustomClassLoader cl = new CustomClassLoader(baseDir.getAbsolutePath()) {
// override to avoid actual class loading
protected Class defineClass(String name, byte[] data) throws ClassFormatError {
definedName = name;
definedData = data;
return CustomClassLoaderTest.class;
}
};
verifyClassLoading(cl);
}
private void verifyClassLoading(CustomClassLoader classLoader) throws ClassNotFoundException {
classLoader.loadClass(fullyQualifiedClassName);
assertEquals(fullyQualifiedClassName, definedName);
assertEquals("Fake", new String(definedData));
}
}