public void testCommandWithStream()

in javatests/com/google/devtools/bazel/e4b/command/CommandTest.java [82:116]


  public void testCommandWithStream() throws IOException, InterruptedException {
    ByteArrayOutputStream stdout = new ByteArrayOutputStream();
    ByteArrayOutputStream stderr = new ByteArrayOutputStream();
    Function<String, String> stdoutSelector =
        (x) -> (x.trim().isEmpty() || x.equals("a")) ? null : x;
    Function<String, String> stderrSelector =
        (x) -> (x.trim().isEmpty() || x.equals("b")) ? null : x;

    Command.Builder builder = Command.builder(mockConsoleFactory)
        .setConsoleName("test")
        .setDirectory(folder.getRoot())
        .setStandardError(stderr)
        .setStandardOutput(stdout)
        .setStderrLineSelector(stderrSelector)
        .setStdoutLineSelector(stdoutSelector);
    builder.addArguments("bash", "-c", "echo a; echo b; echo a >&2; echo b >&2");
    Command cmd = builder.build();
    assertThat(cmd.run()).isEqualTo(0);
    String stdoutStr = new String(stdout.toByteArray(), StandardCharsets.UTF_8).trim();
    String stderrStr = new String(stderr.toByteArray(), StandardCharsets.UTF_8).trim();

    assertThat(stdoutStr).isEqualTo("a");
    assertThat(stderrStr).isEqualTo("b");
    assertThat(cmd.getSelectedErrorLines()).containsExactly("a");
    assertThat(cmd.getSelectedOutputLines()).containsExactly("b");
    assertThat(mockConsoleFactory.consoles).hasSize(1);
    MockCommandConsole console = mockConsoleFactory.consoles.get(0);
    assertThat(console.name).isEqualTo("test");
    assertThat(console.title).isEqualTo(
        "Running bash -c echo a; echo b; echo a >&2; echo b >&2 " + "from " + folder.getRoot());
    stdoutStr = new String(console.stdout.toByteArray(), StandardCharsets.UTF_8).trim();
    stderrStr = new String(console.stderr.toByteArray(), StandardCharsets.UTF_8).trim();
    assertThat(stdoutStr).isEmpty();
    assertThat(stderrStr).isEmpty();
  }