aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous/tests/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 11:52:26 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 11:52:26 +0100
commitf8824d99ce826ebf83498dbce2bbf1d98472a9e3 (patch)
treec60d08a20db43fda9de9b41451407e3e651ee847 /src/test/java/org/zwobble/couscous/tests/interpreter
parentfda9d33c0d630906baad5c60e75db5cd8502bfe8 (diff)
Support user-defined static methods in Python backend
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/interpreter')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java33
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java16
2 files changed, 18 insertions, 31 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
index bc6a205..4ec8428 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -1,12 +1,12 @@
package org.zwobble.couscous.tests.interpreter;
+import java.util.List;
+
import org.junit.Test;
import org.zwobble.couscous.JavaProject;
import org.zwobble.couscous.MapBackedProject;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
-import org.zwobble.couscous.ast.MethodNode;
-import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.interpreter.ConditionMustBeBoolean;
import org.zwobble.couscous.interpreter.Environment;
@@ -14,7 +14,6 @@ import org.zwobble.couscous.interpreter.NoSuchMethod;
import org.zwobble.couscous.interpreter.StackFrameBuilder;
import org.zwobble.couscous.interpreter.UnexpectedValueType;
import org.zwobble.couscous.interpreter.WrongNumberOfArguments;
-import org.zwobble.couscous.interpreter.values.ConcreteType;
import org.zwobble.couscous.interpreter.values.IntegerInterpreterValue;
import org.zwobble.couscous.interpreter.values.StringInterpreterValue;
import org.zwobble.couscous.tests.BackendEvalTests;
@@ -30,7 +29,6 @@ import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
-import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
import static org.zwobble.couscous.interpreter.Evaluator.eval;
import static org.zwobble.couscous.interpreter.values.InterpreterValues.value;
@@ -93,23 +91,6 @@ public class EvaluatorTests extends BackendEvalTests {
assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception);
}
- @Test
- public void canCallStaticMethodFromAnotherStaticMethod() {
- val classNode = ClassNode.builder("com.example.Program")
- .method(MethodNode.staticMethod("main")
- .statement(new ReturnNode(staticMethodCall("java.lang.Integer", "parseInt", literal("42"))))
- .build())
- .build();
- val environment = new Environment(
- JavaProject.builder()
- .addClass(ConcreteType.fromNode(classNode))
- .build(),
- ImmutableMap.of());
- val result = eval(environment,
- staticMethodCall("com.example.Program", "main"));
- assertEquals(new IntegerInterpreterValue(42), result);
- }
-
private static Environment emptyEnvironment() {
return new Environment(
JavaProject.builder().build(),
@@ -117,7 +98,13 @@ public class EvaluatorTests extends BackendEvalTests {
}
@Override
- protected PrimitiveValue evalExpression(ExpressionNode expression) {
- return eval(emptyEnvironment(), expression).toPrimitiveValue().get();
+ protected PrimitiveValue evalExpression(
+ List<ClassNode> classes,
+ ExpressionNode expression) {
+
+ val environment = new Environment(
+ JavaProject.of(classes),
+ ImmutableMap.of());
+ return eval(environment, expression).toPrimitiveValue().get();
}
}
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
index 26939dc..449a251 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
@@ -4,18 +4,18 @@ import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;
-import org.zwobble.couscous.MapBackedProject;
+import org.zwobble.couscous.JavaProject;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.TypeName;
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.interpreter.values.ConcreteType;
import org.zwobble.couscous.interpreter.values.InterpreterValues;
import org.zwobble.couscous.tests.BackendMethodTests;
import org.zwobble.couscous.tests.MethodRunner;
@@ -23,8 +23,6 @@ import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.StringValue;
-import com.google.common.collect.ImmutableMap;
-
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
@@ -106,16 +104,18 @@ public class InterpreterMethodTests extends BackendMethodTests {
return new MethodRunner() {
@Override
public PrimitiveValue runMethod(
- ClassNode classNode,
+ List<ClassNode> classNodes,
+ TypeName className,
String methodName,
List<PrimitiveValue> arguments) {
- val interpreter = new Interpreter(new MapBackedProject(ImmutableMap.of(
- classNode.getName(), ConcreteType.fromNode(classNode))));
+
+ val project = JavaProject.of(classNodes);
+ val interpreter = new Interpreter(project);
val argumentValues = arguments.stream()
.map(InterpreterValues::value)
.collect(Collectors.toList());
- return interpreter.run(classNode.getName(), methodName, argumentValues)
+ return interpreter.run(className, methodName, argumentValues)
.toPrimitiveValue().get();
}
};