diff options
Diffstat (limited to 'base/src/test/java/bjc/utils')
| -rw-r--r-- | base/src/test/java/bjc/utils/test/cli/StreamTerminalTest.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/base/src/test/java/bjc/utils/test/cli/StreamTerminalTest.java b/base/src/test/java/bjc/utils/test/cli/StreamTerminalTest.java new file mode 100644 index 0000000..de300d2 --- /dev/null +++ b/base/src/test/java/bjc/utils/test/cli/StreamTerminalTest.java @@ -0,0 +1,86 @@ +package bjc.utils.test.cli; + +import static org.junit.Assert.*; + +import java.io.*; +import java.util.Scanner; + +import org.junit.Test; + +import bjc.utils.cli.StreamTerminal; + +/** + * Test {@link StreamTerminal} + * + * @author bjcul + * + */ +public class StreamTerminalTest { + + /** + * Single-threaded test of stream-terminal + */ + @SuppressWarnings("resource") + @Test + public void stTest() { + try { + PipedInputStream inPipeIn = new PipedInputStream(); + PipedOutputStream inPipeOut = new PipedOutputStream(inPipeIn); + + InputStreamReader inPipeReader = new InputStreamReader(inPipeIn); + OutputStreamWriter inPipeWriter = new OutputStreamWriter(inPipeOut); + + PipedInputStream outPipeIn = new PipedInputStream(); + PipedOutputStream outPipeOut = new PipedOutputStream(outPipeIn); + + InputStreamReader outPipeReader = new InputStreamReader(outPipeIn); + OutputStreamWriter outPipeWriter = new OutputStreamWriter(outPipeOut); + + StreamTerminal terminal = new StreamTerminal(inPipeReader, outPipeWriter); + + long reqID1 = terminal.submitRequest("Request 1"); + long reqID2 = terminal.submitRequest("Request 2"); + + assertEquals(0, reqID1); + assertEquals(1, reqID2); + + inPipeWriter.write("r 0,A\n"); + inPipeWriter.write("r 1,B\n"); + inPipeWriter.write("q\n"); + inPipeWriter.flush(); + inPipeWriter.close(); + + terminal.run(); + + outPipeWriter.flush(); + outPipeWriter.close(); + + try (Scanner outPipeScanner = new Scanner(outPipeReader)) { + assertTrue(outPipeScanner.hasNextLine()); + String out1 = outPipeScanner.nextLine(); + assertEquals("IOLPI00001 STARTING PROCESSING", out1); + + assertTrue(outPipeScanner.hasNextLine()); + String out2 = outPipeScanner.nextLine(); + assertEquals("0 Request 1", out2); + + assertTrue(outPipeScanner.hasNextLine()); + String out3 = outPipeScanner.nextLine(); + assertEquals("1 Request 2", out3); + + assertTrue(outPipeScanner.hasNextLine()); + String out4 = outPipeScanner.nextLine(); + assertEquals("IOLPI00002 ENDING PROCESSING", out4); + } + + assertEquals("A", terminal.awaitReply(reqID1)); + assertEquals("B", terminal.awaitReply(reqID2)); + } catch (IOException ioex) { + throw new RuntimeException(ioex); + } catch (InterruptedException iex) { + throw new RuntimeException(iex); + } + } + + // TODO write a test that ensures that the multi-threading/reply-wait functionality works +} |
