package org.oddjob.logging.log4j; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggingEvent; import org.oddjob.Oddjob; import org.oddjob.OddjobLookup; import org.oddjob.arooa.convert.ArooaConversionException; import org.oddjob.arooa.reflect.ArooaPropertyException; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.state.ParentState; import org.oddjob.tools.OurDirs; public class LogoutTypeTest extends TestCase { private static final Logger logger = Logger.getLogger(LogoutTypeTest.class); @Override protected void setUp() throws Exception { logger.debug("------------------- " + getName() + " --------------"); } private class Results extends AppenderSkeleton { List<Object> messages = new ArrayList<Object>(); @Override protected void append(LoggingEvent arg0) { messages.add(arg0.getMessage()); } @Override public void close() { } @Override public boolean requiresLayout() { return false; } } String EOL = System.getProperty("line.separator"); String logName = "org.oddjob.wow.Test"; public void testSimple() throws ArooaConversionException, IOException { Results results = new Results(); Logger.getLogger(logName).addAppender(results); LogoutType logout = new LogoutType(); logout.setLogger(logName); OutputStream test = logout.toValue(); test.write(("Hello World." + EOL).getBytes()); test.close(); Logger.getLogger(logName).removeAppender(results); assertEquals(1, results.messages.size()); assertEquals("Hello World.", results.messages.get(0)); } public void testLogoutInOddjob() throws ArooaPropertyException, ArooaConversionException { String xml = "<oddjob>" + " <job>" + " <sequential>" + " <jobs>" + " <copy>" + " <input>" + " <identify id='hello'>" + " <value>" + " <buffer>Hello" + EOL + "</buffer>" + " </value>" + " </identify>" + " </input>" + " <output>" + " <logout/>" + " </output>" + " </copy>" + " <copy>" + " <input>" + " <buffer>World" + EOL + "</buffer>" + " </input>" + " <output>" + " <logout logger='" + logName + "'/>" + " </output>" + " </copy>" + " </jobs>" + " </sequential>" + " </job>" + "</oddjob>"; Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration("XML", xml)); Results results = new Results(); Logger logger = Logger.getLogger(logName);; logger.addAppender(results); oddjob.run(); assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); logger.removeAppender(results); String sanityCheck = new OddjobLookup(oddjob).lookup("hello", String.class); assertEquals("Hello", sanityCheck.trim()); oddjob.destroy(); assertTrue(results.messages.get(0).toString().contains("World")); } public void testExample() { OurDirs dirs = new OurDirs(); Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration( "org/oddjob/logging/log4j/LogoutExample.xml", getClass().getClassLoader())); oddjob.setArgs(new String[] { dirs.base().toString() } ); Results results = new Results(); Logger logger = Logger.getLogger(LogoutType.class);; logger.addAppender(results); oddjob.run(); assertEquals(ParentState.COMPLETE, oddjob.lastStateEvent().getState()); oddjob.destroy(); assertTrue(results.messages.get(0).toString().trim().equals("Test")); } }