Resolves #5 - Added FitNesse to the project

This commit is contained in:
Mike Cifelli 2017-02-22 14:11:40 -05:00
parent 013707e11a
commit 6f2802828d
8 changed files with 82 additions and 12 deletions

View File

@ -2,11 +2,13 @@
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="src" path="acceptance"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="lib" path="fitnesse/fitnesse-standalone.jar"/>
<classpathentry kind="output" path="build/classes"/>
</classpath>

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
build/
doc/
fitnesse/FitNesseRoot/files
jar/
*.zip
*.swp

View File

@ -0,0 +1,48 @@
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();
}
}

Binary file not shown.

View File

@ -7,26 +7,26 @@ public class InteractiveLispInterpreter extends LispInterpreter {
@Override
protected void printGreeting() {
environment.getOutput().println(GREETING);
environment.getOutput().println();
output.println(GREETING);
output.println();
}
@Override
protected void displayPrompt() {
environment.getOutput().print(PROMPT);
output.print(PROMPT);
}
@Override
protected void erasePrompt() {
for (int i = 0; i < PROMPT.length(); i++) {
environment.getOutput().print("\b");
output.print("\b");
}
}
@Override
protected void printFarewell() {
environment.getOutput().println();
environment.getOutput().println();
output.println();
output.println();
}
}

View File

@ -2,6 +2,8 @@ package interpreter;
import static function.builtin.EVAL.eval;
import java.io.PrintStream;
import environment.RuntimeEnvironment;
import error.*;
import parser.LispParser;
@ -11,15 +13,17 @@ public class LispInterpreter {
protected RuntimeEnvironment environment;
protected ErrorManager errorManager;
protected PrintStream output;
private LispParser parser;
public LispInterpreter() {
this.environment = RuntimeEnvironment.getInstance();
this.errorManager = this.environment.getErrorManager();
this.parser = new LispParser(this.environment.getInput(), this.environment.getInputName());
this.output = environment.getOutput();
}
public void interpret() {
createParser();
printGreeting();
for (displayPrompt(); !parser.isEof(); displayPrompt())
@ -28,6 +32,10 @@ public class LispInterpreter {
printFarewell();
}
private void createParser() {
parser = new LispParser(environment.getInput(), environment.getInputName());
}
protected void printGreeting() {}
protected void displayPrompt() {}
@ -46,13 +54,13 @@ public class LispInterpreter {
String result = environment.decorateValueOutput(String.valueOf(eval(sExpression)));
erasePrompt();
environment.getOutput().println(result);
output.println(result);
}
protected void erasePrompt() {}
protected void printFarewell() {
environment.getOutput().println();
output.println();
}
}

View File

@ -17,6 +17,8 @@ public interface LispInterpreterBuilder {
void setErrorTerminationFunction(Runnable errorTerminationFunction);
void setNotInteractive();
void useFile(String fileName);
void setOutputDecorator(Function<String, String> outputDecorator);

View File

@ -27,12 +27,14 @@ public class LispInterpreterBuilderImpl implements LispInterpreterBuilder {
private Function<String, String> criticalOutputDecorator;
private RuntimeEnvironment environment;
private boolean isInteractive;
private boolean isUseFile;
private boolean isBuilt;
private LispInterpreterBuilderImpl() {
this.environment = RuntimeEnvironment.getInstance();
this.inputName = "";
this.isInteractive = true;
this.isUseFile = false;
this.isBuilt = false;
this.outputDecorator = s -> s;
this.valueOutputDecorator = s -> s;
@ -73,11 +75,17 @@ public class LispInterpreterBuilderImpl implements LispInterpreterBuilder {
}
@Override
public void useFile(String fileName) {
this.inputName = fileName;
public void setNotInteractive() {
this.isInteractive = false;
}
@Override
public void useFile(String fileName) {
this.isUseFile = true;
this.setInputName(fileName);
this.setNotInteractive();
}
@Override
public void setOutputDecorator(Function<String, String> decorator) {
this.outputDecorator = decorator;
@ -148,7 +156,7 @@ public class LispInterpreterBuilderImpl implements LispInterpreterBuilder {
}
private InputStream getInputStream() throws FileNotFoundException {
return isInteractive ? inputStream : new FileInputStream(inputName);
return isUseFile ? new FileInputStream(inputName) : inputStream;
}
private LispInterpreter createInterpreter() {