package function.builtin; import static org.junit.Assert.assertTrue; import static testutil.TestUtilities.evaluateString; import static testutil.TypeAssertions.*; import java.io.*; import org.junit.*; import environment.RuntimeEnvironment; import error.ErrorManager; import function.ArgumentValidator.*; public class LOADTester { private ByteArrayOutputStream outputStream; private ByteArrayOutputStream errorOutputStream; private void assertWarningMessagePrinted() { assertTrue(outputStream.toByteArray().length > 0); assertTrue(errorOutputStream.toByteArray().length == 0); } private void assertErrorMessagePrinted() { assertTrue(errorOutputStream.toByteArray().length > 0); assertTrue(outputStream.toByteArray().length == 0); } private void assertNothingPrinted() { assertTrue(outputStream.toByteArray().length == 0); assertTrue(outputStream.toByteArray().length == 0); } @Before public void setUp() { this.outputStream = new ByteArrayOutputStream(); this.errorOutputStream = new ByteArrayOutputStream(); RuntimeEnvironment.getInstance().setOutput(new PrintStream(outputStream)); RuntimeEnvironment.getInstance().setErrorOutput(new PrintStream(errorOutputStream)); RuntimeEnvironment.getInstance().setErrorManager(new ErrorManager()); } @Test public void loadGoodFile_ReturnsTAndPrintsNothing() { String input = "(load \"test/function/builtin/test-files/load-good.lisp\")"; assertT(evaluateString(input)); assertNothingPrinted(); } @Test public void loadBadFile_ReturnsNilAndPrintsError() { String input = "(load \"test/function/builtin/test-files/load-bad.lisp\")"; assertNil(evaluateString(input)); assertErrorMessagePrinted(); } @Test public void loadNonExistentFile_ReturnsNilAndPrintsError() { String input = "(load \"doesNotExist.lisp\")"; assertNil(evaluateString(input)); assertWarningMessagePrinted(); } @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)"); } }