aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/MethodRunner.java')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/MethodRunner.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/MethodRunner.java b/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
index 3f69779..1a856ba 100644
--- a/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/MethodRunner.java
@@ -1,10 +1,13 @@
package org.zwobble.couscous.tests;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import org.zwobble.couscous.ast.*;
+import org.zwobble.couscous.values.PrimitiveValue;
+
import java.util.List;
-import org.zwobble.couscous.ast.ClassNode;
-import org.zwobble.couscous.ast.TypeName;
-import org.zwobble.couscous.values.PrimitiveValue;
+import static org.zwobble.couscous.util.ExtraLists.list;
public interface MethodRunner {
PrimitiveValue runMethod(
@@ -12,4 +15,19 @@ public interface MethodRunner {
TypeName className,
String methodName,
List<PrimitiveValue> arguments);
+
+ default PrimitiveValue evalExpression(List<ClassNode> classes, ExpressionNode expression) {
+ ClassNode programNode = ClassNode.builder("Program")
+ .method(MethodNode.staticMethod("run")
+ .statement(ReturnNode.returns(expression))
+ .build())
+ .build();
+ return runMethod(
+ ImmutableList.copyOf(Iterables.concat(
+ classes,
+ list(programNode))),
+ programNode.getName(),
+ "run",
+ list());
+ }
}