package org.oddjob.sql; import java.io.ByteArrayOutputStream; import java.util.Arrays; import junit.framework.TestCase; import org.apache.commons.beanutils.DynaBean; import org.apache.log4j.Logger; import org.oddjob.Oddjob; import org.oddjob.arooa.beanutils.MagicBeanClassCreator; import org.oddjob.arooa.reflect.ArooaClass; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.arooa.xml.XMLConfiguration; import org.oddjob.beanbus.BasicBeanBus; import org.oddjob.beanbus.BusCrashException; import org.oddjob.io.BufferType; import org.oddjob.io.CopyJob; import org.oddjob.state.ParentState; import org.oddjob.tools.ConsoleCapture; public class SQLResultsSheetTest extends TestCase { private static final Logger logger = Logger.getLogger(SQLResultsSheetTest.class); String EOL = System.getProperty("line.separator"); @Override protected void setUp() throws Exception { super.setUp(); logger.info("----------------------------- " + getName() + " ----------------"); } public void testNoHeaders() throws BusCrashException { SQLResultsSheet test = new SQLResultsSheet(); ByteArrayOutputStream out = new ByteArrayOutputStream(); Object[] values = createFruit(); test.setOutput(out); test.setDataOnly(true); test.setArooaSession(new StandardArooaSession()); BasicBeanBus<Object> bus = new BasicBeanBus<Object>(); test.setBusConductor(bus.getBusConductor()); bus.startBus(); test.writeBeans(Arrays.asList(values)); bus.stopBus(); String expected = "Apple Cox Red and Green 7.6" + EOL + "Orange Jaffa Orange 9.245" + EOL; assertEquals(expected, out.toString()); // Check it can be re-run. out = new ByteArrayOutputStream(); test.setOutput(out); bus.startBus(); test.writeBeans(Arrays.asList(values)); bus.stopBus(); assertEquals(expected, out.toString()); } private Object[] createFruit() { MagicBeanClassCreator creator = new MagicBeanClassCreator("Fruit"); creator.addProperty("type", String.class); creator.addProperty("variety", String.class); creator.addProperty("colour", String.class); creator.addProperty("size", double.class); ArooaClass arooaClass = creator.create(); DynaBean fruit1 = (DynaBean) arooaClass.newInstance(); fruit1.set("type", "Apple"); fruit1.set("variety", "Cox"); fruit1.set("colour", "Red and Green"); fruit1.set("size", 7.6); DynaBean fruit2 = (DynaBean) arooaClass.newInstance(); fruit2.set("type", "Orange"); fruit2.set("variety", "Jaffa"); fruit2.set("colour", "Orange"); fruit2.set("size", 9.245); return new Object[] { fruit1, fruit2 }; } public void testExample() { Oddjob oddjob = new Oddjob(); oddjob.setConfiguration(new XMLConfiguration( "org/oddjob/sql/SQLResultsSheetExample.xml", getClass().getClassLoader())); ConsoleCapture console = new ConsoleCapture(); try (ConsoleCapture.Close close = console.captureConsole()) { oddjob.run(); } assertEquals("Failed, Exception: " + oddjob.lastStateEvent().getException(), ParentState.COMPLETE, oddjob.lastStateEvent().getState()); console.dump(logger); BufferType buffer = new BufferType(); buffer.configured(); CopyJob copy = new CopyJob(); copy.setInput(getClass().getResourceAsStream("SQLResultsSheetExample.txt")); copy.setOutput(buffer.toOutputStream()); copy.run(); String[] expected = buffer.getLines(); String[] lines = console.getLines(); assertEquals(expected.length, lines.length); for (int i = 0; i < expected.length; ++i) { assertTrue(expected[i] + " regexp does not match " + lines[i], lines[i].trim().matches(expected[i].trim())); } oddjob.destroy(); } }