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

66 lines
1.6 KiB
Java

package function.builtin;
import static org.junit.Assert.assertEquals;
import static testutil.TestUtilities.evaluateString;
import java.io.*;
import java.text.MessageFormat;
import org.junit.*;
import environment.RuntimeEnvironment;
import function.ArgumentValidator.*;
public class PRINTTester {
private RuntimeEnvironment environment;
private ByteArrayOutputStream outputStream;
public PRINTTester() {
this.environment = RuntimeEnvironment.getInstance();
}
private void assertPrinted(String expected) {
assertEquals(expected, outputStream.toString());
}
@Before
public void setUp() {
outputStream = new ByteArrayOutputStream();
environment.reset();
environment.setOutput(new PrintStream(outputStream));
}
@After
public void tearDown() {
environment.reset();
}
@Test
public void printStringWorks() {
String output = "\"Hello, world!\"";
evaluateString(MessageFormat.format("(print {0})", output));
assertPrinted(MessageFormat.format("{0}\n", output));
}
@Test
public void printSymbolWorks() {
String output = "A";
evaluateString(MessageFormat.format("(print ''{0})", output));
assertPrinted(MessageFormat.format("{0}\n", output));
}
@Test(expected = TooManyArgumentsException.class)
public void printWithTooManyArguments() {
evaluateString("(print '1 '2)");
}
@Test(expected = TooFewArgumentsException.class)
public void printWithTooFewArguments() {
evaluateString("(print)");
}
}