transcendental-lisp/acceptance/fixture/LispInterpreterFixture.java

49 lines
1.3 KiB
Java

package fixture;
import java.io.*;
import environment.RuntimeEnvironment;
import interpreter.*;
public class LispInterpreterFixture {
private ByteArrayOutputStream outputStream;
private RuntimeEnvironment environment;
private LispInterpreter interpreter;
public LispInterpreterFixture() throws IOException {
this.outputStream = new ByteArrayOutputStream();
this.environment = RuntimeEnvironment.getInstance();
this.interpreter = buildInterpreter();
}
private LispInterpreter buildInterpreter() {
LispInterpreterBuilder builder = LispInterpreterBuilderImpl.getInstance();
builder.setInputName("fitnesse");
builder.setOutput(new PrintStream(outputStream));
builder.setErrorOutput(new PrintStream(outputStream));
builder.setNotInteractive();
builder.setTerminationFunction(() -> System.exit(0));
builder.setErrorTerminationFunction(() -> System.exit(1));
return builder.build();
}
public void input(String input) throws IOException {
environment.setInput(new ByteArrayInputStream(input.getBytes()));
interpreter.interpret();
}
public String output() {
String output = outputStream.toString();
discardOutput();
return output;
}
public void discardOutput() {
outputStream.reset();
}
}