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

70 lines
1.9 KiB
Java
Raw Normal View History

package function.builtin;
import static org.junit.Assert.assertEquals;
import static testutil.TestUtilities.*;
import java.io.*;
import org.junit.*;
import environment.Environment;
import function.ArgumentValidator.*;
public class LOADTester {
private ByteArrayOutputStream outputStream;
private void assertPrinted(String expected) {
assertEquals(expected, outputStream.toString());
}
private void assertNothingPrinted() {
assertPrinted("");
}
@Before
public void setUp() {
this.outputStream = new ByteArrayOutputStream();
Environment.getInstance().setErrorOutput(new PrintStream(outputStream));
}
@Test
public void loadGoodFile_ReturnsTAndPrintsNothing() {
String input = "(load \"test/function/builtin/test-files/load-good.lisp\")";
assertSExpressionsMatch(parseString("T"), evaluateString(input));
assertNothingPrinted();
}
@Test
public void loadBadFile_ReturnsNilAndPrintsError() {
String input = "(load \"test/function/builtin/test-files/load-bad.lisp\")";
assertSExpressionsMatch(parseString("nil"), evaluateString(input));
assertPrinted("LOAD: expression begins with ')' - line 1, column 1\n");
}
@Test
public void loadNonExistentFile_ReturnsNilAndPrintsError() {
String input = "(load \"doesNotExist.lisp\")";
assertSExpressionsMatch(parseString("nil"), evaluateString(input));
assertPrinted("LOAD: could not open 'doesNotExist.lisp'\n");
}
@Test(expected = BadArgumentTypeException.class)
public void testLoadWithBadArgumentType() {
evaluateString("(load '1)");
}
@Test(expected = TooManyArgumentsException.class)
public void testLoadWithTooManyArguments() {
evaluateString("(load \"1\" \"2\")");
}
@Test(expected = TooFewArgumentsException.class)
public void testLoadWithTooFewArguments() {
evaluateString("(load)");
}
}