transcendental-lisp/test/function/builtin/LOADTest.java

132 lines
3.7 KiB
Java
Raw Normal View History

package function.builtin;
2017-02-11 10:42:07 -05:00
import static org.junit.Assert.assertTrue;
import static testutil.TestUtilities.evaluateString;
import static testutil.TypeAssertions.*;
import java.io.*;
import org.junit.*;
import environment.RuntimeEnvironment;
2017-02-11 10:42:07 -05:00
import error.ErrorManager;
import function.ArgumentValidator.*;
2017-03-15 13:37:39 -04:00
public class LOADTest {
private ByteArrayOutputStream outputStream;
2017-02-11 10:42:07 -05:00
private ByteArrayOutputStream errorOutputStream;
2017-02-11 10:51:37 -05:00
private RuntimeEnvironment environment;
2017-03-15 13:37:39 -04:00
public LOADTest() {
2017-02-11 10:51:37 -05:00
this.environment = RuntimeEnvironment.getInstance();
}
2017-02-11 10:42:07 -05:00
private void assertWarningMessagePrinted() {
assertTrue(outputStream.toByteArray().length > 0);
2017-02-11 10:42:07 -05:00
assertTrue(errorOutputStream.toByteArray().length == 0);
}
private void assertErrorMessagePrinted() {
assertTrue(errorOutputStream.toByteArray().length > 0);
assertTrue(outputStream.toByteArray().length == 0);
}
private void assertNothingPrinted() {
assertTrue(errorOutputStream.toByteArray().length == 0);
2017-02-11 10:42:07 -05:00
assertTrue(outputStream.toByteArray().length == 0);
}
@Before
public void setUp() {
2017-02-11 10:51:37 -05:00
outputStream = new ByteArrayOutputStream();
errorOutputStream = new ByteArrayOutputStream();
environment.reset();
2017-02-11 10:51:37 -05:00
environment.setOutput(new PrintStream(outputStream));
environment.setErrorOutput(new PrintStream(errorOutputStream));
environment.setErrorManager(new ErrorManager());
environment.setPath("");
2017-02-11 13:33:34 -05:00
environment.setWarningOutputDecorator(s -> s);
environment.setErrorOutputDecorator(s -> s);
}
@After
public void tearDown() {
environment.reset();
}
2017-03-05 10:41:49 -05:00
@Test
public void loadEmptyFileName_ReturnsNilAndPrintsWarning() {
String input = "(load \"\")";
assertNil(evaluateString(input));
assertWarningMessagePrinted();
}
@Test
public void loadGoodFile_ReturnsTAndPrintsNothing() {
String input = "(load \"test/function/builtin/test-files/load-good.lisp\")";
2017-02-11 10:42:07 -05:00
assertT(evaluateString(input));
assertNothingPrinted();
}
2017-01-26 16:00:47 -05:00
@Test
public void loadBadFile_ReturnsNilAndPrintsError() {
String input = "(load \"test/function/builtin/test-files/load-bad.lisp\")";
2017-02-11 10:42:07 -05:00
assertNil(evaluateString(input));
assertErrorMessagePrinted();
}
@Test
2017-03-05 10:41:49 -05:00
public void loadNonExistentFile_ReturnsNilAndPrintsWarning() {
String input = "(load \"doesNotExist.lisp\")";
2017-02-11 10:42:07 -05:00
assertNil(evaluateString(input));
assertWarningMessagePrinted();
}
@Test
public void nestedLoadsInTheSameDirectory() {
String input = "(load \"test/function/builtin/test-files/nested/nested.lisp\")";
assertT(evaluateString(input));
assertNothingPrinted();
}
@Test
public void nestedLoadsInDifferentDirectories() {
String input = "(load \"test/function/builtin/test-files/nested/one/load-one.lisp\")";
assertT(evaluateString(input));
assertNothingPrinted();
}
@Test(expected = BadArgumentTypeException.class)
public void loadWithBadArgumentType() {
evaluateString("(load '1)");
}
@Test(expected = TooManyArgumentsException.class)
public void loadWithTooManyArguments() {
evaluateString("(load \"1\" \"2\")");
}
@Test(expected = TooFewArgumentsException.class)
public void loadWithTooFewArguments() {
evaluateString("(load)");
}
@Test
public void loadUsesRuntimePath() {
environment.setPath("test/function/builtin/test-files/nested/one/");
String input = "(load \"load-one.lisp\")";
assertT(evaluateString(input));
assertNothingPrinted();
}
}