aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-05 11:04:17 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-05 11:04:17 +0100
commit96b1e6f776ae8ce8910c44a3bbec0b489fd10c88 (patch)
tree86658222ef741b1620c1635d3fd98d99452a387b /src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
parentcdf51cdb9b3f8cef5896315496f348d9f7220903 (diff)
Add the beginnings of a Python backend
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java50
1 files changed, 19 insertions, 31 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
index d0c8976..98271f7 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
@@ -1,18 +1,21 @@
package org.zwobble.couscous.tests.interpreter;
+import java.util.List;
+
import org.junit.Test;
import org.zwobble.couscous.MapBackedProject;
import org.zwobble.couscous.ast.Assignment;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
-import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.interpreter.Interpreter;
import org.zwobble.couscous.interpreter.UnboundVariable;
import org.zwobble.couscous.interpreter.UnexpectedValueType;
import org.zwobble.couscous.interpreter.VariableNotInScope;
import org.zwobble.couscous.interpreter.WrongNumberOfArguments;
+import org.zwobble.couscous.tests.BackendTests;
+import org.zwobble.couscous.tests.MethodRunner;
import org.zwobble.couscous.values.ConcreteType;
import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.InterpreterValue;
@@ -20,7 +23,6 @@ import org.zwobble.couscous.values.StringValue;
import com.google.common.collect.ImmutableMap;
-import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
@@ -29,28 +31,10 @@ import static org.zwobble.couscous.ast.MethodNode.staticMethod;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
import static org.zwobble.couscous.tests.util.ExtraAsserts.assertThrows;
-import static org.zwobble.couscous.values.UnitValue.UNIT;
import lombok.val;
-public class InterpreterTests {
- @Test
- public void methodWithNoStatementsReturnsUnit() {
- val method = staticMethod("hello");
- val result = runMethod(method);
-
- assertEquals(UNIT, result);
- }
-
- @Test
- public void canReturnLiteralValue() {
- val method = staticMethod("hello")
- .statement(new ReturnNode(LiteralNode.literal("hello, world!")));
- val result = runMethod(method);
-
- assertEquals(new StringValue("hello, world!"), result);
- }
-
+public class InterpreterTests extends BackendTests {
@Test
public void canPassValueToMethod() {
val arg = formalArg(var(42, "x", StringValue.REF));
@@ -162,15 +146,19 @@ public class InterpreterTests {
assertEquals(new UnboundVariable(42), exception);
}
- private InterpreterValue runMethod(MethodNode.MethodNodeBuilder methodBuilder, InterpreterValue... arguments) {
- val method = methodBuilder.build();
- val className = "com.example.Program";
- val classNode = ClassNode.builder(className)
- .method(method)
- .build();
- val interpreter = new Interpreter(new MapBackedProject(ImmutableMap.of(
- className, ConcreteType.fromNode(classNode))));
-
- return interpreter.run(className, method.getName(), asList(arguments));
+ @Override
+ protected MethodRunner buildMethodRunner() {
+ return new MethodRunner() {
+ @Override
+ public InterpreterValue runMethod(
+ ClassNode classNode,
+ String methodName,
+ List<InterpreterValue> arguments) {
+ val interpreter = new Interpreter(new MapBackedProject(ImmutableMap.of(
+ classNode.getName(), ConcreteType.fromNode(classNode))));
+
+ return interpreter.run(classNode.getName(), methodName, arguments);
+ }
+ };
}
}