package hudson.plugins.fitnesse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import org.junit.Assert; import org.junit.Test; public class StdConsoleTest { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); @Test public void stdConsoleShouldLogIncrementalOutputToPrintStream() throws Exception { ByteArrayOutputStream stdout = new ByteArrayOutputStream(); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); StdConsole console = new StdConsole(stdout, stderr); simulateWriteTo(stdout, "hello std out"); simulateWriteTo(stderr, "hello std err"); ByteArrayOutputStream log = new ByteArrayOutputStream(); PrintStream logger = new PrintStream(log); console.logIncrementalOutput(logger); Assert.assertEquals(joinWithLineSeparators("hello std out", "hello std err"), new String(log.toByteArray())); log.reset(); simulateWriteTo(stdout, "yo std out"); simulateWriteTo(stderr, "yo std err"); console.logIncrementalOutput(logger); Assert.assertEquals(joinWithLineSeparators("yo std out","yo std err"), new String(log.toByteArray())); } private String joinWithLineSeparators(String first, String second) { return first + LINE_SEPARATOR + second + LINE_SEPARATOR; } private void simulateWriteTo(OutputStream stream, String msg) throws IOException { stream.write(msg.getBytes()); } @Test public void stdConsoleShouldKnowIfThereHasBeenOutputOnStdOut() throws Exception { ByteArrayOutputStream stdout = new ByteArrayOutputStream(); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); StdConsole console = new StdConsole(stdout, stderr); Assert.assertTrue(console.noOutputOnStdOut()); simulateWriteTo(stderr, "ping"); Assert.assertTrue(console.noOutputOnStdOut()); simulateWriteTo(stdout, "ping"); Assert.assertFalse(console.noOutputOnStdOut()); } @Test public void stdConsoleShouldKnowIfThereHasBeenOutputOnStdErr() throws Exception { ByteArrayOutputStream stdout = new ByteArrayOutputStream(); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); StdConsole console = new StdConsole(stdout, stderr); Assert.assertFalse(console.outputOnStdErr()); simulateWriteTo(stdout, "ping"); Assert.assertFalse(console.outputOnStdErr()); simulateWriteTo(stderr, "ping"); Assert.assertTrue(console.outputOnStdErr()); } @Test public void stdConsoleShouldRecogniseStdOutBytesAsIncrementalOutput() throws Exception { ByteArrayOutputStream stdout = new ByteArrayOutputStream(); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); StdConsole console = new StdConsole(stdout, stderr); Assert.assertFalse(console.incrementalOutputOnStdOut()); Assert.assertFalse(console.incrementalOutputOnStdErr()); Assert.assertTrue(console.noIncrementalOutput()); simulateWriteTo(stdout, "cheese"); Assert.assertTrue(console.incrementalOutputOnStdOut()); Assert.assertFalse(console.noIncrementalOutput()); Assert.assertFalse(console.incrementalOutputOnStdErr()); } @Test public void stdConsoleShouldRecogniseStdErrBytesAsIncrementalOutput() throws Exception { ByteArrayOutputStream stdout = new ByteArrayOutputStream(); ByteArrayOutputStream stderr = new ByteArrayOutputStream(); StdConsole console = new StdConsole(stdout, stderr); Assert.assertFalse(console.incrementalOutputOnStdOut()); Assert.assertFalse(console.incrementalOutputOnStdErr()); Assert.assertTrue(console.noIncrementalOutput()); simulateWriteTo(stderr, "wensleydale"); Assert.assertTrue(console.incrementalOutputOnStdErr()); Assert.assertFalse(console.noIncrementalOutput()); Assert.assertFalse(console.incrementalOutputOnStdOut()); } }