package org.oddjob; import junit.framework.TestCase; import org.oddjob.arooa.ArooaDescriptor; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.ArooaSession; import org.oddjob.arooa.ArooaTools; import org.oddjob.arooa.ElementMappings; import org.oddjob.arooa.MockArooaDescriptor; import org.oddjob.arooa.MockArooaSession; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.convert.ArooaConverter; import org.oddjob.arooa.convert.ConversionFailedException; import org.oddjob.arooa.convert.ConversionProvider; import org.oddjob.arooa.convert.ConversionRegistry; import org.oddjob.arooa.convert.Convertlet; import org.oddjob.arooa.convert.ConvertletException; import org.oddjob.arooa.convert.DefaultConversionProvider; import org.oddjob.arooa.convert.NoConversionAvailableException; import org.oddjob.arooa.deploy.ArooaDescriptorFactory; import org.oddjob.arooa.life.ComponentPersister; import org.oddjob.arooa.life.ComponentProxyResolver; import org.oddjob.arooa.life.MockComponentPersister; import org.oddjob.arooa.registry.BeanRegistry; import org.oddjob.arooa.registry.ComponentPool; import org.oddjob.arooa.registry.InvalidIdException; import org.oddjob.arooa.registry.SimpleBeanRegistry; import org.oddjob.arooa.registry.SimpleComponentPool; import org.oddjob.arooa.standard.MockPropertyLookup; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.arooa.standard.StandardTools; import org.oddjob.persist.OddjobPersister; import org.oddjob.tools.OddjobTestHelper; public class OddjobArooaSessionTest extends TestCase { private class OurDescriptor extends MockArooaDescriptor { @Override public ConversionProvider getConvertletProvider() { return new ConversionProvider() { public void registerWith(ConversionRegistry registry) { registry.register(String.class, Integer.class, new Convertlet<String, Integer>() { public Integer convert(String from) throws ConvertletException { return new Integer(42); } }); } }; } @Override public ElementMappings getElementMappings() { return null; } } public void testConversions() throws ArooaParseException, ArooaConversionException, InvalidIdException { OddjobSessionFactory sessionFactory = new OddjobSessionFactory(); sessionFactory.setDescriptorFactory( new ArooaDescriptorFactory() { @Override public ArooaDescriptor createDescriptor( ClassLoader classLoader) { return new OurDescriptor(); } }); ArooaSession test = sessionFactory.createSession(); ArooaConverter converter = test.getTools().getArooaConverter(); assertEquals(new Integer(42), converter.convert( "forty two", Integer.class)); test.getBeanRegistry().register("apples", "A String"); Integer i = test.getBeanRegistry().lookup("apples", Integer.class); assertEquals(new Integer(42), i); } private class OuterSession extends MockArooaSession { ComponentPool componentPool = new SimpleComponentPool(); BeanRegistry beanRegistry = new SimpleBeanRegistry(); @Override public ArooaDescriptor getArooaDescriptor() { return new MockArooaDescriptor() { @Override public ConversionProvider getConvertletProvider() { return new DefaultConversionProvider(); } @Override public ElementMappings getElementMappings() { return null; } }; } @Override public ComponentProxyResolver getComponentProxyResolver() { return null; } @Override public ComponentPersister getComponentPersister() { return null; } @Override public ArooaTools getTools() { return new StandardTools(); } @Override public ComponentPool getComponentPool() { return componentPool; } @Override public BeanRegistry getBeanRegistry() { return beanRegistry; } } public void testNestedConversion() throws ArooaParseException, NoConversionAvailableException, ConversionFailedException { OuterSession session = new OuterSession(); Oddjob oddjob = new Oddjob(); OddjobTestHelper.register(oddjob, session, null); OddjobSessionFactory sessionFactory = new OddjobSessionFactory(); sessionFactory.setInherit(OddjobInheritance.NONE); sessionFactory.setExistingSession(session); sessionFactory.setDescriptorFactory( new ArooaDescriptorFactory() { @Override public ArooaDescriptor createDescriptor(ClassLoader classLoader) { return new OurDescriptor(); } }); ArooaSession test = sessionFactory.createSession(oddjob); ArooaConverter converter = test.getTools().getArooaConverter(); Number number = converter.convert("2", Integer.class); assertEquals(new Integer(42), number); } public void testNestedPropertyManager() { StandardArooaSession outerSession = new StandardArooaSession(); OddjobSessionFactory test = new OddjobSessionFactory(); test.setExistingSession(outerSession); // Test Default behaviour. test.setInherit(null); ArooaSession session = test.createSession(); outerSession.getPropertyManager().addPropertyLookup(new MockPropertyLookup() { @Override public String lookup(String propertyName) { assertEquals("fruit", propertyName); return "apple"; } }); assertEquals("apple", session.getPropertyManager().lookup("fruit")); } private class OurPersister extends MockComponentPersister implements OddjobPersister { @Override public ComponentPersister persisterFor(final String id) { return new MockComponentPersister() { @Override public String toString() { return "OurPersister " + id; } }; } } public void testNestedComponentPersisterNoOddjobId() { StandardArooaSession outerSession = new StandardArooaSession() { public ComponentPersister getComponentPersister() { return new OurPersister(); }; }; Oddjob oddjob = new Oddjob(); OddjobSessionFactory test = new OddjobSessionFactory(); test.setExistingSession(outerSession); ArooaSession session = test.createSession(oddjob); assertNull(session.getComponentPersister()); } public void testNestedComponentPersister() { StandardArooaSession outerSession = new StandardArooaSession() { public ComponentPersister getComponentPersister() { return new OurPersister(); }; }; Oddjob oddjob = new Oddjob(); outerSession.getBeanRegistry().register("stuff", oddjob); OddjobSessionFactory test = new OddjobSessionFactory(); test.setExistingSession(outerSession); ArooaSession session = test.createSession(oddjob); assertEquals("OurPersister stuff", session.getComponentPersister().toString()); } }