1 33 34 package edu.rice.cs.util.classloader; 35 36 import edu.rice.cs.drjava.DrJavaTestCase; 37 38 import java.net.URL ; 39 import java.security.SecureClassLoader ; 40 41 46 public class StickyClassLoaderTest extends DrJavaTestCase { 47 private final String myName = getClass().getName(); 48 private final ClassLoader myLoader = getClass().getClassLoader(); 49 50 54 public void testLoaderSticks() throws Throwable { 55 StickyClassLoader loader = new StickyClassLoader(myLoader, myLoader); 56 57 Class c = loader.loadClass(myName); 58 assertEquals("getClassLoader()", loader, c.getClassLoader()); 59 assertEquals("getName()", myName, c.getName()); 60 } 61 62 65 public void testLoaderUsesSystemForJavaClasses() throws Throwable { 66 StickyClassLoader loader = new StickyClassLoader(myLoader, myLoader); 67 68 Class c = loader.loadClass("java.lang.Object"); 69 assertEquals("java.lang.Object", c.getName()); 70 } 71 72 77 public void testLoaderFindsNonSystemJavaClasses() throws Throwable { 78 class LoadingClassException extends RuntimeException { } 79 80 ClassLoader testLoader = new SecureClassLoader () { 81 public URL getResource(String name) { 82 throw new LoadingClassException(); 83 } 84 }; 85 StickyClassLoader loader = new StickyClassLoader(myLoader, testLoader); 86 87 try { 88 loader.loadClass("javax.mail.FakeClass"); 89 fail("FakeClass should not exist."); 91 } 92 catch (LoadingClassException lce) { 93 } 95 } 98 99 103 public void testLoaderRespectsOldList() throws Throwable { 104 StickyClassLoader loader = new StickyClassLoader(myLoader, 105 myLoader, 106 new String [] { myName }); 107 108 Class c = loader.loadClass(myName); 109 assertEquals("getClassLoader()", myLoader, c.getClassLoader()); 110 assertEquals("getName()", myName, c.getName()); 111 } 112 113 119 public void testLoaderSticksTransitively() throws Throwable { 120 String [] names = { myName + "$BMaker" }; 121 122 StickyClassLoader loader = new StickyClassLoader(myLoader, myLoader, names); 123 Class c = loader.loadClass(myName + "$A"); 124 assertEquals("getClassLoader()", loader, c.getClassLoader()); 125 126 Object aObj = c.newInstance(); 127 BMaker aCasted = (BMaker) aObj; 128 129 Object b = aCasted.makeB(); 130 131 assertEquals("getClass().getName()", 132 myName + "$A$B", 133 b.getClass().getName()); 134 135 assertEquals("getClass().getClassLoader()", 136 loader, 137 b.getClass().getClassLoader()); 138 } 139 140 147 public void testDoesntLoadSameClassTwice() throws Throwable { 148 StickyClassLoader loader = new StickyClassLoader(myLoader, myLoader); 149 loader.loadClass(myName + "$Two"); 150 loader.loadClass(myName + "$One"); 151 } 152 153 public static class One { } 154 public static class Two extends One { } 155 156 public interface BMaker { 157 public Object makeB(); 158 } 159 160 public static class A implements BMaker { 161 private static class B { } 162 163 public Object makeB() { return new B(); } 164 } 165 } 166 | Popular Tags |