From 2df02c35b70f7e8077832470de9594b657f1be67 Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Fri, 23 Jun 2023 19:48:38 -0400 Subject: Add terminal This is some functionality based on the way that MVS/other IBM OSes handle their UI --- .../bjc/utils/test/cli/StreamTerminalTest.java | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 base/src/test/java/bjc/utils/test/cli/StreamTerminalTest.java (limited to 'base/src/test/java/bjc/utils') 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 +} -- cgit v1.2.3