aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java25
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java5
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/MapBackedProject.java19
3 files changed, 27 insertions, 22 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 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<String, ConcreteType<?>> classes;
-
- public MapBackedProject(Map<String, ConcreteType<?>> classes) {
- this.classes = classes;
- }
-
- @Override
- public ConcreteType<?> findClass(String name) {
- return classes.get(name);
- }
-}