1 8 package org.codehaus.loom.classman.runtime.test; 9 10 import java.io.File ; 11 import java.net.MalformedURLException ; 12 import java.net.URL ; 13 import java.net.URLClassLoader ; 14 import java.util.Enumeration ; 15 16 import org.codehaus.loom.classman.runtime.JoinClassLoader; 17 import org.codehaus.loom.classman.test.AbstractLoaderTestCase; 18 import org.codehaus.loom.classman.test.DataConstants; 19 20 26 public class JoinClassLoaderTestCase 27 extends AbstractLoaderTestCase 28 { 29 public void testJoinClassLoader() 30 throws Exception 31 { 32 if( System.getProperty( "gump", "false" ).equals( "true" ) ) 33 { 34 return; 37 } 38 39 final URLClassLoader cl1 = createClassLoader( "cl1.jar" ); 40 final URLClassLoader cl2 = createClassLoader( "cl2.jar" ); 41 final ClassLoader [] cls = new ClassLoader []{cl1, cl2}; 42 final JoinClassLoader join = 43 new JoinClassLoader( cls, ClassLoader.getSystemClassLoader() ); 44 try 45 { 46 join.loadClass( DataConstants.DATA1_CLASS ); 47 } 48 catch( ClassNotFoundException e ) 49 { 50 fail( "Unable to load Data1 from cl1 classloader" ); 51 } 52 try 53 { 54 join.loadClass( DataConstants.DATA2_CLASS ); 55 } 56 catch( ClassNotFoundException e ) 57 { 58 fail( "Unable to load CL2Data from cl2 classloader" ); 59 } 60 try 61 { 62 join.loadClass( "i.no.exist" ); 63 fail( "Expected that would be unable to load non-existent class" ); 64 } 65 catch( ClassNotFoundException e ) 66 { 67 } 68 69 try 70 { 71 assertEquals( "Loading from system classloader", 72 Integer .class, 73 join.loadClass( Integer .class.getName() ) ); 74 } 75 catch( ClassNotFoundException e ) 76 { 77 fail( "Unable to load Integer from classloader" ); 78 } 79 80 final URL url1 = join.getResource( DataConstants.DATA1_RESOURCE ); 81 assertNotNull( "Loading " + DataConstants.DATA1_RESOURCE + " from c1 classloader", 82 url1 ); 83 final URL url2 = join.getResource( "noexist.txt" ); 84 assertNull( "Loading noexist.txt from c1 classloader", url2 ); 85 86 final Enumeration resources1 = join.getResources( DataConstants.DATA1_RESOURCE ); 87 assertNotNull( "Loading set of " + DataConstants.DATA1_RESOURCE + " from c1 classloader", 88 resources1 ); 89 assertTrue( "Count of resource from classloader", resources1.hasMoreElements() ); 90 assertEquals( "Resource found from classloader", url1, resources1.nextElement() ); 91 92 assertTrue( "Second Count of resource from classloader", !resources1.hasMoreElements() ); 93 94 final Enumeration resources2 = join.getResources( "noexist.txt" ); 95 assertNotNull( "Loading set of noexist.txt from c1 classloader", resources2 ); 96 assertTrue( "Count of noexist.txt from classloader", !resources2.hasMoreElements() ); 97 98 try 99 { 100 ClassLoader.getSystemClassLoader().loadClass( DataConstants.DATA1_CLASS ); 101 } 102 catch( ClassNotFoundException e ) 103 { 104 return; 105 } 106 fail( "Able to load Data1 from system classloader" ); 107 } 108 109 public void testCtorNullsInClassLoaderSet() 110 throws Exception 111 { 112 try 113 { 114 new JoinClassLoader( null, 115 ClassLoader.getSystemClassLoader() ); 116 fail( "Expected a NPE" ); 117 } 118 catch( NullPointerException e ) 119 { 120 assertEquals( "NPE type", "classLoaders", e.getMessage() ); 121 } 122 try 123 { 124 new JoinClassLoader( new ClassLoader []{null}, 125 ClassLoader.getSystemClassLoader() ); 126 fail( "Expected a NPE" ); 127 } 128 catch( NullPointerException e ) 129 { 130 assertEquals( "NPE type", "classLoaders[0]", e.getMessage() ); 131 } 132 } 133 134 private URLClassLoader createClassLoader( final String filename ) throws MalformedURLException 135 { 136 final File baseDirectory = getBaseDirectory(); 137 final File file = new File ( baseDirectory, filename ); 138 final URL url = file.toURL(); 139 final URL [] urls = new URL []{url}; 140 return new URLClassLoader ( urls, ClassLoader.getSystemClassLoader() ); 141 } 142 } 143 | Popular Tags |