package org.oddjob.beanbus.mega; import java.util.Collection; import java.util.Map; import junit.framework.TestCase; import org.apache.commons.beanutils.DynaBean; import org.oddjob.Describeable; import org.oddjob.Iconic; import org.oddjob.arooa.life.ArooaLifeAware; import org.oddjob.arooa.life.ArooaSessionAware; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.beanbus.AbstractDestination; import org.oddjob.beanbus.BasicBeanBus; import org.oddjob.beanbus.BusCrashException; import org.oddjob.beanbus.BusEvent; import org.oddjob.beanbus.BusListenerAdapter; import org.oddjob.images.IconEvent; import org.oddjob.images.IconListener; public class CollectionProxyGeneratorTest extends TestCase { public class OurDestination extends AbstractDestination<String> { private int number; public boolean add(String e) { return false; } public String getFruit() { return "Apple"; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } } Object proxy; @Override protected void setUp() throws Exception { CollectionProxyGenerator<String> test = new CollectionProxyGenerator<String>(); proxy = test.generate( new OurDestination(), getClass().getClassLoader()); ((ArooaSessionAware) proxy).setArooaSession(new StandardArooaSession()); } @Override protected void tearDown() throws Exception { ((ArooaLifeAware) proxy).destroy(); } @SuppressWarnings("unchecked") public void testCollection() { assertTrue(proxy instanceof Collection); BasicBeanBus<String> bus = new BasicBeanBus<String>(); bus.getBusConductor().addBusListener(new BusListenerAdapter() { @Override public void busStarting(BusEvent event) throws BusCrashException { throw new BusCrashException("Crash"); } }); ((BusPart) proxy).prepare(bus.getBusConductor()); try { bus.startBus(); fail("Should Throw Exception"); } catch (BusCrashException e) { assertEquals("Crash", e.getMessage()); } try { ((Collection<String>) proxy).add("apples"); fail("Should Throw Exception"); } catch (RuntimeException e) { assertEquals("Crash", e.getCause().getCause().getCause().getMessage()); } } public void testDescribeable() { assertTrue(proxy instanceof Describeable); Map<String, String> description = ((Describeable) proxy).describe(); assertNotNull(description); assertEquals("Apple", description.get("fruit")); } public void testDynaBean() { assertTrue(proxy instanceof DynaBean); DynaBean dynaBean = ((DynaBean) proxy); assertEquals("Apple", dynaBean.get("fruit")); dynaBean.set("number", new Integer(3)); assertEquals(new Integer(3), dynaBean.get("number")); } class OurIconListener implements IconListener { String iconId; @Override public void iconEvent(IconEvent e) { iconId = e.getIconId(); } } public void testIconicBusPart() throws BusCrashException { assertTrue(proxy instanceof Iconic); Iconic iconic = (Iconic) proxy; OurIconListener listener = new OurIconListener(); iconic.addIconListener(listener); assertEquals(CollectionWrapper.INACTIVE, listener.iconId); BusPart busPart = (BusPart) proxy; BasicBeanBus<String> bus = new BasicBeanBus<String>(); busPart.prepare(bus.getBusConductor()); assertEquals(CollectionWrapper.INACTIVE, listener.iconId); bus.startBus(); assertEquals(CollectionWrapper.ACTIVE, listener.iconId); bus.stopBus(); assertEquals(CollectionWrapper.INACTIVE, listener.iconId); } }