Convert runtime environment to kotlin
This commit is contained in:
parent
b2989809eb
commit
26709a7f9e
|
@ -1,154 +0,0 @@
|
||||||
package environment;
|
|
||||||
|
|
||||||
import error.ErrorManager;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class RuntimeEnvironment {
|
|
||||||
|
|
||||||
private static RuntimeEnvironment uniqueInstance = new RuntimeEnvironment();
|
|
||||||
|
|
||||||
public static RuntimeEnvironment getInstance() {
|
|
||||||
return uniqueInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String inputName;
|
|
||||||
private InputStream input;
|
|
||||||
private PrintStream output;
|
|
||||||
private PrintStream errorOutput;
|
|
||||||
private ErrorManager errorManager;
|
|
||||||
private String path;
|
|
||||||
private Runnable terminationFunction;
|
|
||||||
private Runnable errorTerminationFunction;
|
|
||||||
private Function<String, String> promptDecorator;
|
|
||||||
private Function<String, String> valueOutputDecorator;
|
|
||||||
private Function<String, String> warningOutputDecorator;
|
|
||||||
private Function<String, String> errorOutputDecorator;
|
|
||||||
private Function<String, String> criticalOutputDecorator;
|
|
||||||
|
|
||||||
private RuntimeEnvironment() {
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reset() {
|
|
||||||
inputName = null;
|
|
||||||
input = null;
|
|
||||||
output = null;
|
|
||||||
errorOutput = null;
|
|
||||||
errorManager = null;
|
|
||||||
path = null;
|
|
||||||
terminationFunction = null;
|
|
||||||
errorTerminationFunction = null;
|
|
||||||
promptDecorator = null;
|
|
||||||
valueOutputDecorator = null;
|
|
||||||
warningOutputDecorator = null;
|
|
||||||
errorOutputDecorator = null;
|
|
||||||
criticalOutputDecorator = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInputName(String inputName) {
|
|
||||||
this.inputName = inputName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInput(InputStream input) {
|
|
||||||
this.input = input;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOutput(PrintStream output) {
|
|
||||||
this.output = output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorOutput(PrintStream errorOutput) {
|
|
||||||
this.errorOutput = errorOutput;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorManager(ErrorManager errorManager) {
|
|
||||||
this.errorManager = errorManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPath(String path) {
|
|
||||||
this.path = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTerminationFunction(Runnable terminationFunction) {
|
|
||||||
this.terminationFunction = terminationFunction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorTerminationFunction(Runnable errorTerminationFunction) {
|
|
||||||
this.errorTerminationFunction = errorTerminationFunction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPromptDecorator(Function<String, String> promptDecorator) {
|
|
||||||
this.promptDecorator = promptDecorator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValueOutputDecorator(Function<String, String> valueOutputDecorator) {
|
|
||||||
this.valueOutputDecorator = valueOutputDecorator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWarningOutputDecorator(Function<String, String> warningOutputDecorator) {
|
|
||||||
this.warningOutputDecorator = warningOutputDecorator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setErrorOutputDecorator(Function<String, String> errorOutputDecorator) {
|
|
||||||
this.errorOutputDecorator = errorOutputDecorator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCriticalOutputDecorator(Function<String, String> criticalOutputDecorator) {
|
|
||||||
this.criticalOutputDecorator = criticalOutputDecorator;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getInputName() {
|
|
||||||
return inputName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputStream getInput() {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PrintStream getOutput() {
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PrintStream getErrorOutput() {
|
|
||||||
return errorOutput;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ErrorManager getErrorManager() {
|
|
||||||
return errorManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPath() {
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void terminateSuccessfully() {
|
|
||||||
terminationFunction.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void terminateExceptionally() {
|
|
||||||
errorTerminationFunction.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decoratePrompt(String prompt) {
|
|
||||||
return promptDecorator.apply(prompt);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decorateValueOutput(String valueOutput) {
|
|
||||||
return valueOutputDecorator.apply(valueOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decorateWarningOutput(String warningOutput) {
|
|
||||||
return warningOutputDecorator.apply(warningOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decorateErrorOutput(String errorOutput) {
|
|
||||||
return errorOutputDecorator.apply(errorOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decorateCriticalOutput(String criticalOutput) {
|
|
||||||
return criticalOutputDecorator.apply(criticalOutput);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package environment
|
||||||
|
|
||||||
|
import error.ErrorManager
|
||||||
|
|
||||||
|
import java.io.InputStream
|
||||||
|
import java.io.PrintStream
|
||||||
|
import java.util.function.Function
|
||||||
|
|
||||||
|
object RuntimeEnvironment {
|
||||||
|
|
||||||
|
var inputName: String? = null
|
||||||
|
var input: InputStream? = null
|
||||||
|
var output: PrintStream? = null
|
||||||
|
var errorOutput: PrintStream? = null
|
||||||
|
var errorManager: ErrorManager? = null
|
||||||
|
var path: String? = null
|
||||||
|
|
||||||
|
// TODO - convert to function types ()-> Unit etc... once calling code is kotlin
|
||||||
|
var terminationFunction: Runnable? = null
|
||||||
|
var errorTerminationFunction: Runnable? = null
|
||||||
|
var promptDecorator: Function<String, String>? = null
|
||||||
|
var valueOutputDecorator: Function<String, String>? = null
|
||||||
|
var warningOutputDecorator: Function<String, String>? = null
|
||||||
|
var errorOutputDecorator: Function<String, String>? = null
|
||||||
|
var criticalOutputDecorator: Function<String, String>? = null
|
||||||
|
|
||||||
|
fun reset() {
|
||||||
|
inputName = null
|
||||||
|
input = null
|
||||||
|
output = null
|
||||||
|
errorOutput = null
|
||||||
|
errorManager = null
|
||||||
|
path = null
|
||||||
|
terminationFunction = null
|
||||||
|
errorTerminationFunction = null
|
||||||
|
promptDecorator = null
|
||||||
|
valueOutputDecorator = null
|
||||||
|
warningOutputDecorator = null
|
||||||
|
errorOutputDecorator = null
|
||||||
|
criticalOutputDecorator = null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun terminateSuccessfully() {
|
||||||
|
terminationFunction!!.run()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun terminateExceptionally() {
|
||||||
|
errorTerminationFunction!!.run()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun decoratePrompt(prompt: String) = promptDecorator!!.apply(prompt)
|
||||||
|
fun decorateValueOutput(valueOutput: String) = valueOutputDecorator!!.apply(valueOutput)
|
||||||
|
fun decorateWarningOutput(warningOutput: String) = warningOutputDecorator!!.apply(warningOutput)
|
||||||
|
fun decorateErrorOutput(errorOutput: String) = errorOutputDecorator!!.apply(errorOutput)
|
||||||
|
fun decorateCriticalOutput(criticalOutput: String) = criticalOutputDecorator!!.apply(criticalOutput)
|
||||||
|
}
|
|
@ -11,13 +11,11 @@ import java.text.MessageFormat.format
|
||||||
*/
|
*/
|
||||||
class ErrorManager {
|
class ErrorManager {
|
||||||
|
|
||||||
private val environment: RuntimeEnvironment = RuntimeEnvironment.getInstance()
|
|
||||||
|
|
||||||
fun handle(lispException: LispException) {
|
fun handle(lispException: LispException) {
|
||||||
printMessage(lispException)
|
printMessage(lispException)
|
||||||
|
|
||||||
if (isCritical(lispException))
|
if (isCritical(lispException))
|
||||||
environment.terminateExceptionally()
|
RuntimeEnvironment.terminateExceptionally()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun printMessage(lispException: LispException) {
|
private fun printMessage(lispException: LispException) {
|
||||||
|
@ -26,7 +24,7 @@ class ErrorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectOutputStream(severity: Severity): PrintStream {
|
private fun selectOutputStream(severity: Severity): PrintStream {
|
||||||
return if (severity === WARNING) environment.output else environment.errorOutput
|
return if (severity === WARNING) RuntimeEnvironment.output!! else RuntimeEnvironment.errorOutput!!
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun formatMessage(lispException: LispException): String {
|
private fun formatMessage(lispException: LispException): String {
|
||||||
|
@ -34,7 +32,7 @@ class ErrorManager {
|
||||||
val prefix = severity.toDisplayString()
|
val prefix = severity.toDisplayString()
|
||||||
val message = format("[{0}] {1}", prefix, lispException.message)
|
val message = format("[{0}] {1}", prefix, lispException.message)
|
||||||
|
|
||||||
return severity.decorate(message, environment)
|
return severity.decorate(message, RuntimeEnvironment)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isCritical(lispException: LispException) = lispException.severity == CRITICAL
|
private fun isCritical(lispException: LispException) = lispException.severity == CRITICAL
|
||||||
|
|
|
@ -6,21 +6,21 @@ enum class Severity {
|
||||||
|
|
||||||
WARNING {
|
WARNING {
|
||||||
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
environment.decorateWarningOutput(output)
|
RuntimeEnvironment.decorateWarningOutput(output)!!
|
||||||
|
|
||||||
override fun toDisplayString() = "warning"
|
override fun toDisplayString() = "warning"
|
||||||
},
|
},
|
||||||
|
|
||||||
ERROR {
|
ERROR {
|
||||||
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
environment.decorateErrorOutput(output)
|
RuntimeEnvironment.decorateErrorOutput(output)!!
|
||||||
|
|
||||||
override fun toDisplayString() = "error"
|
override fun toDisplayString() = "error"
|
||||||
},
|
},
|
||||||
|
|
||||||
CRITICAL {
|
CRITICAL {
|
||||||
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
environment.decorateCriticalOutput(output)
|
RuntimeEnvironment.decorateCriticalOutput(output)!!
|
||||||
|
|
||||||
override fun toDisplayString() = "critical"
|
override fun toDisplayString() = "critical"
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class EXIT extends LispFunction {
|
||||||
public EXIT(String name) {
|
public EXIT(String name) {
|
||||||
this.argumentValidator = new ArgumentValidator(name);
|
this.argumentValidator = new ArgumentValidator(name);
|
||||||
this.argumentValidator.setMaximumNumberOfArguments(0);
|
this.argumentValidator.setMaximumNumberOfArguments(0);
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class LOAD extends LispFunction {
|
||||||
this.argumentValidator = new ArgumentValidator(name);
|
this.argumentValidator = new ArgumentValidator(name);
|
||||||
this.argumentValidator.setExactNumberOfArguments(1);
|
this.argumentValidator.setExactNumberOfArguments(1);
|
||||||
this.argumentValidator.setEveryArgumentExpectedType(LispString.class);
|
this.argumentValidator.setEveryArgumentExpectedType(LispString.class);
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class PRINT extends LispFunction {
|
||||||
public PRINT(String name) {
|
public PRINT(String name) {
|
||||||
this.argumentValidator = new ArgumentValidator(name);
|
this.argumentValidator = new ArgumentValidator(name);
|
||||||
this.argumentValidator.setExactNumberOfArguments(1);
|
this.argumentValidator.setExactNumberOfArguments(1);
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -31,7 +31,7 @@ public abstract class Define extends LispSpecialFunction {
|
||||||
this.lambdaListValidator = new ArgumentValidator(functionName + "|parameter|");
|
this.lambdaListValidator = new ArgumentValidator(functionName + "|parameter|");
|
||||||
this.lambdaListValidator.setEveryArgumentExpectedType(Symbol.class);
|
this.lambdaListValidator.setEveryArgumentExpectedType(Symbol.class);
|
||||||
|
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class LispInterpreter {
|
||||||
private LispParser parser;
|
private LispParser parser;
|
||||||
|
|
||||||
public LispInterpreter() {
|
public LispInterpreter() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void interpretLanguageFiles(List<LanguageFile> languageFiles) {
|
public void interpretLanguageFiles(List<LanguageFile> languageFiles) {
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class LispInterpreterBuilderImpl implements LispInterpreterBuilder {
|
||||||
protected boolean isBuilt;
|
protected boolean isBuilt;
|
||||||
|
|
||||||
protected LispInterpreterBuilderImpl() {
|
protected LispInterpreterBuilderImpl() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
this.inputName = "";
|
this.inputName = "";
|
||||||
this.isInteractive = true;
|
this.isInteractive = true;
|
||||||
this.isFileBased = false;
|
this.isFileBased = false;
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class LispInterpreterFixture {
|
||||||
|
|
||||||
private static ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
private static ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||||
private static ExecutionContext executionContext = ExecutionContext.INSTANCE;
|
private static ExecutionContext executionContext = ExecutionContext.INSTANCE;
|
||||||
private static RuntimeEnvironment environment = RuntimeEnvironment.getInstance();
|
private static RuntimeEnvironment environment = RuntimeEnvironment.INSTANCE;
|
||||||
private static LispInterpreter interpreter = null;
|
private static LispInterpreter interpreter = null;
|
||||||
|
|
||||||
public static void resetInterpreter() {
|
public static void resetInterpreter() {
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class MainTest extends SymbolAndFunctionCleaner {
|
||||||
private CountDownLatch latch;
|
private CountDownLatch latch;
|
||||||
|
|
||||||
public MainTest() {
|
public MainTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runInterpreterWithFile(String fileName) {
|
private void runInterpreterWithFile(String fileName) {
|
||||||
|
|
|
@ -1,199 +0,0 @@
|
||||||
package environment;
|
|
||||||
|
|
||||||
import error.ErrorManager;
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
public class RuntimeEnvironmentTest {
|
|
||||||
|
|
||||||
private static final String TERMINATED_SUCCESSFULLY = "TERMINATED_SUCCESSFULLY";
|
|
||||||
private static final String TERMINATED_EXCEPTIONALLY = "TERMINATED_EXCEPTIONALLY";
|
|
||||||
|
|
||||||
private RuntimeEnvironment environment;
|
|
||||||
private Set<String> indicatorSet;
|
|
||||||
|
|
||||||
public RuntimeEnvironmentTest() {
|
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
indicatorSet = new HashSet<>();
|
|
||||||
environment.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void tearDown() {
|
|
||||||
environment.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignInputName() {
|
|
||||||
environment.setInputName("test");
|
|
||||||
|
|
||||||
assertEquals("test", environment.getInputName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignInput() {
|
|
||||||
environment.setInput(System.in);
|
|
||||||
|
|
||||||
assertEquals(System.in, environment.getInput());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignOutput() {
|
|
||||||
environment.setOutput(System.out);
|
|
||||||
|
|
||||||
assertEquals(System.out, environment.getOutput());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignErrorOutput() {
|
|
||||||
environment.setErrorOutput(System.err);
|
|
||||||
|
|
||||||
assertEquals(System.err, environment.getErrorOutput());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignErrorManager() {
|
|
||||||
ErrorManager errorManager = new ErrorManager();
|
|
||||||
environment.setErrorManager(errorManager);
|
|
||||||
|
|
||||||
assertEquals(errorManager, environment.getErrorManager());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignPath() {
|
|
||||||
environment.setPath("testpath/");
|
|
||||||
|
|
||||||
assertEquals("testpath/", environment.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignTerminationFunction() {
|
|
||||||
environment.setTerminationFunction(() -> indicatorSet.add(TERMINATED_SUCCESSFULLY));
|
|
||||||
environment.terminateSuccessfully();
|
|
||||||
|
|
||||||
assertTrue(indicatorSet.contains(TERMINATED_SUCCESSFULLY));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignErrorTerminationFunction() {
|
|
||||||
environment.setErrorTerminationFunction(() -> indicatorSet.add(TERMINATED_EXCEPTIONALLY));
|
|
||||||
environment.terminateExceptionally();
|
|
||||||
|
|
||||||
assertTrue(indicatorSet.contains(TERMINATED_EXCEPTIONALLY));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignPromptDecorator() {
|
|
||||||
environment.setPromptDecorator(s -> "[" + s + "]");
|
|
||||||
|
|
||||||
assertEquals("[test]", environment.decoratePrompt("test"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignValueOutputDecorator() {
|
|
||||||
environment.setValueOutputDecorator(s -> "(" + s + ")");
|
|
||||||
|
|
||||||
assertEquals("(test)", environment.decorateValueOutput("test"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignWarningOutputDecorator() {
|
|
||||||
environment.setWarningOutputDecorator(s -> "|" + s + "|");
|
|
||||||
|
|
||||||
assertEquals("|test|", environment.decorateWarningOutput("test"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignErrorOutputDecorator() {
|
|
||||||
environment.setErrorOutputDecorator(s -> "{" + s + "}");
|
|
||||||
|
|
||||||
assertEquals("{test}", environment.decorateErrorOutput("test"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void assignCriticalOutputDecorator() {
|
|
||||||
environment.setCriticalOutputDecorator(s -> "/" + s + "/");
|
|
||||||
|
|
||||||
assertEquals("/test/", environment.decorateCriticalOutput("test"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void resetWorks() {
|
|
||||||
environment.setInputName("test");
|
|
||||||
environment.setInput(System.in);
|
|
||||||
environment.setOutput(System.out);
|
|
||||||
environment.setErrorOutput(System.err);
|
|
||||||
environment.setErrorManager(new ErrorManager());
|
|
||||||
environment.setPath("testpath/");
|
|
||||||
environment.setTerminationFunction(() -> indicatorSet.add(TERMINATED_SUCCESSFULLY));
|
|
||||||
environment.setErrorTerminationFunction(() -> indicatorSet.add(TERMINATED_EXCEPTIONALLY));
|
|
||||||
environment.setPromptDecorator(s -> "[" + s + "]");
|
|
||||||
environment.setValueOutputDecorator(s -> "(" + s + ")");
|
|
||||||
environment.setWarningOutputDecorator(s -> "|" + s + "|");
|
|
||||||
environment.setErrorOutputDecorator(s -> "{" + s + "}");
|
|
||||||
environment.setCriticalOutputDecorator(s -> "/" + s + "/");
|
|
||||||
environment.reset();
|
|
||||||
|
|
||||||
assertNull(environment.getInputName());
|
|
||||||
assertNull(environment.getInput());
|
|
||||||
assertNull(environment.getOutput());
|
|
||||||
assertNull(environment.getErrorOutput());
|
|
||||||
assertNull(environment.getErrorManager());
|
|
||||||
assertNull(environment.getPath());
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.terminateSuccessfully();
|
|
||||||
fail("terminateSuccessfully");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.terminateExceptionally();
|
|
||||||
fail("terminateExceptionally");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.decoratePrompt("");
|
|
||||||
fail("decoratePrompt");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.decorateValueOutput("");
|
|
||||||
fail("decorateValueOutput");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.decorateWarningOutput("");
|
|
||||||
fail("decorateWarningOutput");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.decorateErrorOutput("");
|
|
||||||
fail("decorateErrorOutput");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
environment.decorateCriticalOutput("");
|
|
||||||
fail("decorateCriticalOutput");
|
|
||||||
} catch (NullPointerException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,161 @@
|
||||||
|
package environment
|
||||||
|
|
||||||
|
import error.ErrorManager
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
|
import org.junit.jupiter.api.AfterEach
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.TestInstance
|
||||||
|
import org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS
|
||||||
|
import org.junit.jupiter.api.Assertions.assertThrows
|
||||||
|
import java.util.HashSet
|
||||||
|
import java.util.function.Function
|
||||||
|
|
||||||
|
@TestInstance(PER_CLASS)
|
||||||
|
class RuntimeEnvironmentTest {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val TERMINATED_SUCCESSFULLY = "TERMINATED_SUCCESSFULLY"
|
||||||
|
private const val TERMINATED_EXCEPTIONALLY = "TERMINATED_EXCEPTIONALLY"
|
||||||
|
}
|
||||||
|
|
||||||
|
private var indicatorSet: MutableSet<String>? = null
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
fun setUp() {
|
||||||
|
indicatorSet = HashSet()
|
||||||
|
RuntimeEnvironment.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
fun tearDown() {
|
||||||
|
RuntimeEnvironment.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignInputName() {
|
||||||
|
RuntimeEnvironment.inputName = "test"
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.inputName).isEqualTo("test")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignInput() {
|
||||||
|
RuntimeEnvironment.input = System.`in`
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.input).isEqualTo(System.`in`)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignOutput() {
|
||||||
|
RuntimeEnvironment.output = System.out
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.output).isEqualTo(System.out)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignErrorOutput() {
|
||||||
|
RuntimeEnvironment.errorOutput = System.err
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.errorOutput).isEqualTo(System.err)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignErrorManager() {
|
||||||
|
val errorManager = ErrorManager()
|
||||||
|
RuntimeEnvironment.errorManager = errorManager
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.errorManager).isEqualTo(errorManager)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignPath() {
|
||||||
|
RuntimeEnvironment.path = "testpath/"
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.path).isEqualTo("testpath/")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignTerminationFunction() {
|
||||||
|
RuntimeEnvironment.terminationFunction = Runnable { indicatorSet!!.add(TERMINATED_SUCCESSFULLY) }
|
||||||
|
RuntimeEnvironment.terminateSuccessfully()
|
||||||
|
|
||||||
|
assertThat(indicatorSet!!.contains(TERMINATED_SUCCESSFULLY)).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignErrorTerminationFunction() {
|
||||||
|
RuntimeEnvironment.errorTerminationFunction = Runnable { indicatorSet!!.add(TERMINATED_EXCEPTIONALLY) }
|
||||||
|
RuntimeEnvironment.terminateExceptionally()
|
||||||
|
|
||||||
|
assertThat(indicatorSet!!.contains(TERMINATED_EXCEPTIONALLY)).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignPromptDecorator() {
|
||||||
|
RuntimeEnvironment.promptDecorator = Function { s -> "[$s]" }
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.decoratePrompt("test")).isEqualTo("[test]")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignValueOutputDecorator() {
|
||||||
|
RuntimeEnvironment.valueOutputDecorator = Function { s -> "($s)" }
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.decorateValueOutput("test")).isEqualTo("(test)")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignWarningOutputDecorator() {
|
||||||
|
RuntimeEnvironment.warningOutputDecorator = Function { s -> "|$s|" }
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.decorateWarningOutput("test")).isEqualTo("|test|")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignErrorOutputDecorator() {
|
||||||
|
RuntimeEnvironment.errorOutputDecorator = Function { s -> "{$s}" }
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.decorateErrorOutput("test")).isEqualTo("{test}")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assignCriticalOutputDecorator() {
|
||||||
|
RuntimeEnvironment.criticalOutputDecorator = Function { s -> "/$s/" }
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.decorateCriticalOutput("test")).isEqualTo("/test/")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun resetWorks() {
|
||||||
|
RuntimeEnvironment.inputName = "test"
|
||||||
|
RuntimeEnvironment.input = System.`in`
|
||||||
|
RuntimeEnvironment.output = System.out
|
||||||
|
RuntimeEnvironment.errorOutput = System.err
|
||||||
|
RuntimeEnvironment.errorManager = ErrorManager()
|
||||||
|
RuntimeEnvironment.path = "testpath/"
|
||||||
|
RuntimeEnvironment.terminationFunction = Runnable { indicatorSet!!.add(TERMINATED_SUCCESSFULLY) }
|
||||||
|
RuntimeEnvironment.errorTerminationFunction = Runnable { indicatorSet!!.add(TERMINATED_EXCEPTIONALLY) }
|
||||||
|
RuntimeEnvironment.promptDecorator = Function { s -> "[$s]" }
|
||||||
|
RuntimeEnvironment.valueOutputDecorator = Function { s -> "($s)" }
|
||||||
|
RuntimeEnvironment.warningOutputDecorator = Function { s -> "|$s|" }
|
||||||
|
RuntimeEnvironment.errorOutputDecorator = Function { s -> "{$s}" }
|
||||||
|
RuntimeEnvironment.criticalOutputDecorator = Function { s -> "/$s/" }
|
||||||
|
RuntimeEnvironment.reset()
|
||||||
|
|
||||||
|
assertThat(RuntimeEnvironment.inputName).isNull()
|
||||||
|
assertThat(RuntimeEnvironment.input).isNull()
|
||||||
|
assertThat(RuntimeEnvironment.output).isNull()
|
||||||
|
assertThat(RuntimeEnvironment.errorOutput).isNull()
|
||||||
|
assertThat(RuntimeEnvironment.errorManager).isNull()
|
||||||
|
assertThat(RuntimeEnvironment.path).isNull()
|
||||||
|
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.terminateSuccessfully() }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.terminateExceptionally() }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.decoratePrompt("") }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.decorateValueOutput("") }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.decorateWarningOutput("") }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.decorateErrorOutput("") }
|
||||||
|
assertThrows(NullPointerException::class.java) { RuntimeEnvironment.decorateCriticalOutput("") }
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ public class ErrorManagerTest {
|
||||||
private RuntimeEnvironment environment;
|
private RuntimeEnvironment environment;
|
||||||
|
|
||||||
public ErrorManagerTest() {
|
public ErrorManagerTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ErrorManager createErrorManagerWithIndicators() {
|
private ErrorManager createErrorManagerWithIndicators() {
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class EXITTest extends SymbolAndFunctionCleaner {
|
||||||
private Set<String> indicatorSet;
|
private Set<String> indicatorSet;
|
||||||
|
|
||||||
public EXITTest() {
|
public EXITTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertTerminated() {
|
private void assertTerminated() {
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class LOADTest extends SymbolAndFunctionCleaner {
|
||||||
private RuntimeEnvironment environment;
|
private RuntimeEnvironment environment;
|
||||||
|
|
||||||
public LOADTest() {
|
public LOADTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertWarningMessagePrinted() {
|
private void assertWarningMessagePrinted() {
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class PRINTTest extends SymbolAndFunctionCleaner {
|
||||||
private ByteArrayOutputStream outputStream;
|
private ByteArrayOutputStream outputStream;
|
||||||
|
|
||||||
public PRINTTest() {
|
public PRINTTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertPrinted(String expected) {
|
private void assertPrinted(String expected) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class DEFINE_SPECIALTest extends SymbolAndFunctionCleaner {
|
||||||
private RuntimeEnvironment environment;
|
private RuntimeEnvironment environment;
|
||||||
|
|
||||||
public DEFINE_SPECIALTest() {
|
public DEFINE_SPECIALTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertSomethingPrinted() {
|
private void assertSomethingPrinted() {
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class DEFMACROTest extends SymbolAndFunctionCleaner {
|
||||||
private RuntimeEnvironment environment;
|
private RuntimeEnvironment environment;
|
||||||
|
|
||||||
public DEFMACROTest() {
|
public DEFMACROTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertSomethingPrinted() {
|
private void assertSomethingPrinted() {
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class DEFUNTest extends SymbolAndFunctionCleaner {
|
||||||
private RuntimeEnvironment environment;
|
private RuntimeEnvironment environment;
|
||||||
|
|
||||||
public DEFUNTest() {
|
public DEFUNTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertSomethingPrinted() {
|
private void assertSomethingPrinted() {
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class LispInterpreterTest {
|
||||||
private LispInterpreterBuilder builder;
|
private LispInterpreterBuilder builder;
|
||||||
|
|
||||||
public LispInterpreterTest() {
|
public LispInterpreterTest() {
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
this.environment = RuntimeEnvironment.INSTANCE;
|
||||||
|
|
||||||
this.builder = new LispInterpreterBuilderImpl() {
|
this.builder = new LispInterpreterBuilderImpl() {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue