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();
}