package org.oddjob.framework; import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicBoolean; import junit.framework.TestCase; import org.oddjob.Oddjob; import org.oddjob.OddjobLookup; import org.oddjob.Resetable; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.life.Destroy; import org.oddjob.arooa.reflect.ArooaPropertyException; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.state.ParentState; public class RunnableWrapperResetTest extends TestCase { public static class Bean1 implements Runnable { boolean reset; AtomicBoolean destroyed = new AtomicBoolean(); @Override public void run() { reset = false; } @HardReset @SoftReset public void reset() { reset = true; } public boolean getReset() { return reset; } public AtomicBoolean getDestroyed() { return destroyed; } @Destroy public void destroy() { destroyed.set(true); } } public void testHardReset() throws ArooaPropertyException, ArooaConversionException { String xml = "<oddjob>" + " <job>" + " <bean id='b' class='" + Bean1.class.getName() + "'/>" + " </job>" + "</oddjob>"; Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration("XML", xml)); oddjob.run(); assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); OddjobLookup lookup = new OddjobLookup(oddjob); assertEquals(false, lookup.lookup("b.reset")); ((Resetable) lookup.lookup("b")).hardReset(); assertEquals(true, lookup.lookup("b.reset")); assertEquals(ParentState.READY, oddjob.lastStateEvent().getState()); AtomicBoolean destroyed = lookup.lookup("b.destroyed", AtomicBoolean.class); assertEquals(false, destroyed.get()); oddjob.destroy(); assertEquals(true, destroyed.get()); } public static class Bean2 implements Callable<Integer> { boolean reset; @Override public Integer call() throws Exception { reset = false; return 1; } @SoftReset public void reset() { reset = true; } public boolean getReset() { return reset; } } public void testSoftReset() throws ArooaPropertyException, ArooaConversionException { String xml = "<oddjob>" + " <job>" + " <bean id='b' class='" + Bean2.class.getName() + "'/>" + " </job>" + "</oddjob>"; Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration("XML", xml)); oddjob.run(); assertEquals(ParentState.INCOMPLETE, oddjob.lastStateEvent().getState()); OddjobLookup lookup = new OddjobLookup(oddjob); assertEquals(false, lookup.lookup("b.reset")); ((Resetable) lookup.lookup("b")).softReset(); assertEquals(true, lookup.lookup("b.reset")); assertEquals(ParentState.READY, oddjob.lastStateEvent().getState()); oddjob.run(); assertEquals(false, lookup.lookup("b.reset")); ((Resetable) lookup.lookup("b")).hardReset(); assertEquals(false, lookup.lookup("b.reset")); oddjob.destroy(); } }