package org.oddjob.oddballs; import java.io.File; import java.net.URL; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.oddjob.Oddjob; import org.oddjob.OddjobDescriptorFactory; import org.oddjob.arooa.ArooaDescriptor; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.deploy.LinkedDescriptor; import org.oddjob.arooa.standard.StandardArooaDescriptor; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.state.ParentState; import org.oddjob.tools.OurDirs; public class OddballsDescriptorFactoryTest extends TestCase { private static final Logger logger = Logger.getLogger( OddballsDescriptorFactoryTest.class); public void testOddballs() throws ArooaParseException { new BuildOddballs().run(); OurDirs dirs = new OurDirs(); OddballsDirDescriptorFactory test = new OddballsDirDescriptorFactory(); test.setOddballFactory(new DirectoryOddball()); test.setBaseDir(new File(dirs.base(), "test/oddballs")); Oddjob oddjob = new Oddjob(); oddjob.setDescriptorFactory(test); oddjob.setFile(new File(dirs.base(), "test/launch/oddballs-launch.xml")); oddjob.run(); assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); oddjob.destroy(); } public void testOddballsExample() throws ArooaParseException { new BuildOddballs().run(); OurDirs dirs = new OurDirs(); Oddjob oddjob = new Oddjob(); oddjob.setConfiguration( new XMLConfiguration("org/oddjob/oddballs/OddballsExample.xml", getClass().getClassLoader())); oddjob.setArgs(new String[] { dirs.base().getAbsolutePath() } ); oddjob.run(); assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); oddjob.destroy(); } public void testClassResolverResources() { new BuildOddballs().run(); OurDirs dirs = new OurDirs(); OddballsDirDescriptorFactory test = new OddballsDirDescriptorFactory(); test.setOddballFactory(new DirectoryOddball()); test.setBaseDir(new File(dirs.base(), "test/oddballs")); ArooaDescriptor descriptor = test.createDescriptor( getClass().getClassLoader()); URL[] urls = descriptor.getClassResolver().getResources("META-INF/arooa.xml"); assertEquals(3, urls.length); assertTrue(urls[1].toExternalForm().contains("orange")); assertTrue(urls[2].toExternalForm().contains("apple")); } public void testClassResolverClassLoaders() { new BuildOddballs().run(); OurDirs dirs = new OurDirs(); OddballsDirDescriptorFactory test = new OddballsDirDescriptorFactory(); test.setOddballFactory(new DirectoryOddball()); test.setBaseDir(new File(dirs.base(), "test/oddballs")); ArooaDescriptor descriptor = test.createDescriptor( getClass().getClassLoader()); ArooaDescriptor mainDescriptor = new OddjobDescriptorFactory( ).createDescriptor(getClass().getClassLoader()); ArooaDescriptor oddjobDescriptor = new LinkedDescriptor( mainDescriptor, new StandardArooaDescriptor()); descriptor = new LinkedDescriptor(descriptor, oddjobDescriptor); ClassLoader[] classLoaders = descriptor.getClassResolver().getClassLoaders(); assertEquals(3, classLoaders.length); logger.info("ClassLoader 0: " + classLoaders[1].toString()); logger.info("ClassLoader 1: " + classLoaders[1].toString()); logger.info("ClassLoader 2: " + classLoaders[2].toString()); assertTrue(classLoaders[0].toString().contains("orange")); assertTrue(classLoaders[1].toString().contains("apple")); } public void testNoOddballs() { OddballsDirDescriptorFactory test = new OddballsDirDescriptorFactory(); test.setBaseDir(new File("noballs")); ArooaDescriptor descriptor= test.createDescriptor( getClass().getClassLoader()); assertNull(descriptor); } }