diff options
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/MethodRunner.java')
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/MethodRunner.java | 24 |
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()); + } } |
