com.github.tonivade.purefun.runtimes.ConsoleExecutor Maven / Gradle / Ivy
/*
* Copyright (c) 2018-2019, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.purefun.runtimes;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;
import com.github.tonivade.purefun.monad.IO;
public class ConsoleExecutor {
private final StringBuilder input = new StringBuilder();
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
public ConsoleExecutor read(String string) {
input.append(string).append('\n');
return this;
}
public String getOutput() {
return new String(output.toByteArray(), UTF_8);
}
public T run(IO program) {
InputStream savedInput = System.in;
PrintStream savedOutput = System.out;
try {
System.setIn(mockInput());
System.setOut(mockOutput());
return program.unsafeRunSync();
} finally {
System.setIn(savedInput);
System.setOut(savedOutput);
}
}
private PrintStream mockOutput() {
return new PrintStream(output);
}
private ByteArrayInputStream mockInput() {
return new ByteArrayInputStream(input.toString().getBytes(UTF_8));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy