package org.oddjob.beanbus.destinations;
import java.util.List;
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.reflect.ArooaPropertyException;
import org.oddjob.arooa.xml.XMLConfiguration;
import org.oddjob.beanbus.AbstractFilter;
import org.oddjob.state.ParentState;
public class BadBeanFilterTest extends TestCase {
public static class RottonAppleDetector
extends AbstractFilter<String, String> {
@Override
protected String filter(String from) {
if (from.startsWith("Rotton")) {
throw new IllegalArgumentException(
"Rotton Apples Spoil The Barrel.");
}
else {
return from;
}
}
}
public void testExample() throws ArooaPropertyException, ArooaConversionException {
Oddjob oddjob = new Oddjob();
oddjob.setConfiguration(new XMLConfiguration(
"org/oddjob/beanbus/destinations/BadBeanFilterExample.xml",
getClass().getClassLoader()));
oddjob.run();
assertEquals(ParentState.COMPLETE,
oddjob.lastStateEvent().getState());
OddjobLookup lookup = new OddjobLookup(oddjob);
List<?> goodBeans = lookup.lookup(
"good.beans", List.class);
List<?> badBeans = lookup.lookup(
"bad.beans", List.class);
assertEquals(2, goodBeans.size());
assertEquals("Good Apple", goodBeans.get(0));
assertEquals("Good Apple", goodBeans.get(1));
assertEquals(1, badBeans.size());
Object driver = lookup.lookup("driver");
((Resetable) driver).hardReset();
((Runnable) driver).run();
int beanCount = lookup.lookup("filter.count", int.class);
int badBeanCount = lookup.lookup("filter.badCount", int.class);
assertEquals(3, beanCount);
assertEquals(1, badBeanCount);
oddjob.destroy();
}
}