package org.oddjob.framework; import java.net.URL; import junit.framework.TestCase; import org.oddjob.arooa.ArooaParseException; import org.oddjob.arooa.ArooaParser; import org.oddjob.arooa.ArooaSession; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.deploy.annotations.ArooaComponent; import org.oddjob.arooa.life.ComponentProxyResolver; import org.oddjob.arooa.reflect.ArooaClass; import org.oddjob.arooa.reflect.ArooaPropertyException; import org.oddjob.arooa.reflect.BeanOverview; import org.oddjob.arooa.reflect.PropertyAccessor; import org.oddjob.arooa.registry.BeanDirectory; import org.oddjob.arooa.standard.StandardArooaParser; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.arooa.xml.XMLConfiguration; public class WrapDynaBeanArooaTest extends TestCase { public static class Root { @ArooaComponent public void setStuff(Object stuff) { } } public static class Stuff { private String text; private URL url; public URL getUrl() { return url; } public void setUrl(URL url) { this.url = url; } public void setText(String text) { this.text = text; }; public String getText() { return text; } } private class OurSession extends StandardArooaSession { @Override public ComponentProxyResolver getComponentProxyResolver() { return new ComponentProxyResolver() { @Override public Object resolve(Object object, ArooaSession session) { return new WrapDynaBean(object); } @Override public Object restore(Object proxy, ArooaSession session) { throw new RuntimeException("Unexpected."); } }; } } public void testInArooa() throws ArooaParseException, ArooaPropertyException, ArooaConversionException { String xml = "<root>" + " <stuff>" + " <bean id='s' class='" + Stuff.class.getName() + "' text='Hello'>" + " <url>" + " <value value='file:/stuff'/>" + " </url>" + " </bean>" + " </stuff>" + "</root>"; ArooaSession session = new OurSession(); Root root = new Root(); ArooaParser parser = new StandardArooaParser(root, session); parser.parse(new XMLConfiguration("TEST", xml)); BeanDirectory lookup = session.getBeanRegistry(); Object stuff = lookup.lookup("s"); session.getComponentPool().configure(stuff); assertEquals(WrapDynaBean.class, stuff.getClass()); PropertyAccessor accessor = session.getTools().getPropertyAccessor(); ArooaClass arooaClass = accessor.getClassName(stuff); assertEquals(WrapDynaArooaClass.class, arooaClass.getClass()); BeanOverview overview = arooaClass.getBeanOverview( accessor); assertEquals(WrapDynaBeanOverview.class, overview.getClass()); assertTrue(overview.hasReadableProperty("url")); String text = lookup.lookup("s.text", String.class); assertEquals("Hello", text); String url = lookup.lookup("s.url", String.class); assertEquals("file:/stuff", url); } }