From c02fac3e8b50b1941a8d3f35a033212c1e51d5d4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 2 Oct 2015 19:06:57 +0100 Subject: Preserve environment across calls --- .../couscous/tests/interpreter/EvaluatorTests.java | 25 +++++++++++++++++++++- .../tests/interpreter/InterpreterTests.java | 5 +++-- .../tests/interpreter/MapBackedProject.java | 19 ---------------- 3 files changed, 27 insertions(+), 22 deletions(-) delete mode 100644 src/test/java/org/zwobble/couscous/tests/interpreter/MapBackedProject.java (limited to 'src/test/java') 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 72a3ab4..e2cf1b8 100644 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java +++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java @@ -1,13 +1,19 @@ package org.zwobble.couscous.tests.interpreter; 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.FormalArgumentNode; +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; import org.zwobble.couscous.interpreter.NoSuchMethod; import org.zwobble.couscous.interpreter.UnexpectedValueType; import org.zwobble.couscous.interpreter.WrongNumberOfArguments; +import org.zwobble.couscous.values.ConcreteType; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.StringValue; @@ -101,9 +107,26 @@ public class EvaluatorTests { assertEquals(new IntegerValue(42), result); } + @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("com.example.Program", ConcreteType.fromNode(classNode)) + .build(), + ImmutableMap.of()); + val result = eval(environment, + staticMethodCall("com.example.Program", "main")); + assertEquals(new IntegerValue(42), result); + } + private static Environment emptyEnvironment() { return new Environment( - new MapBackedProject(ImmutableMap.of("java.lang.Integer", IntegerValue.TYPE)), + JavaProject.builder().build(), ImmutableMap.of()); } } 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 c764261..d187c20 100644 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java +++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.tests.interpreter; 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; @@ -78,10 +79,10 @@ public class InterpreterTests { private InterpreterValue runMethod(MethodNode.MethodNodeBuilder methodBuilder, InterpreterValue... arguments) { val method = methodBuilder.build(); - val classNode = ClassNode.builder() + val className = "com.example.Program"; + val classNode = ClassNode.builder(className) .method(method) .build(); - val className = "com.example.Program"; val interpreter = new Interpreter(new MapBackedProject(ImmutableMap.of( className, ConcreteType.fromNode(classNode)))); diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/MapBackedProject.java b/src/test/java/org/zwobble/couscous/tests/interpreter/MapBackedProject.java deleted file mode 100644 index 0874afb..0000000 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/MapBackedProject.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.zwobble.couscous.tests.interpreter; - -import java.util.Map; - -import org.zwobble.couscous.Project; -import org.zwobble.couscous.values.ConcreteType; - -public class MapBackedProject implements Project { - private Map> classes; - - public MapBackedProject(Map> classes) { - this.classes = classes; - } - - @Override - public ConcreteType findClass(String name) { - return classes.get(name); - } -} -- cgit v1.2.3