aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 13:54:12 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 13:54:12 +0100
commit9685c8fb7fa14d5b75d828f8443dd948715ac4af (patch)
tree6320f8801134c8ebee1301c2c1c0adc148a356cc /src
parent8328a423de9aad4f1219243763d6d5d5e6f1e1de (diff)
Add test for passing arguments to user-defined methods
Diffstat (limited to 'src')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index da599dc..d1d72c0 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -17,9 +17,12 @@ import com.google.common.collect.ImmutableList;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall;
+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.ast.VariableReferenceNode.reference;
import static org.zwobble.couscous.values.PrimitiveValues.value;
import lombok.val;
@@ -85,7 +88,7 @@ public abstract class BackendEvalTests {
}
@Test
- public void canCallInstanceMethodOnUserDefinedClass() {
+ public void canCallInstanceMethodWithNoArgumentsOnUserDefinedClass() {
val classNode = ClassNode.builder("com.example.Example")
.method(MethodNode.method("main")
.statement(new ReturnNode(literal(42)))
@@ -96,6 +99,27 @@ public abstract class BackendEvalTests {
assertEquals(value(42), result);
}
+ @Test
+ public void canCallInstanceMethodWithArgumentsOnUserDefinedClass() {
+ val argument = formalArg(var(42, "x", IntegerValue.REF));
+ val classNode = ClassNode.builder("com.example.Example")
+ .method(MethodNode.method("main")
+ .argument(argument)
+ .statement(new ReturnNode(reference(argument)))
+ .build())
+ .build();
+
+ val result = evalExpression(
+ asList(classNode),
+ methodCall(
+ constructorCall(classNode.getName(), asList()),
+ "main",
+ asList(literal(42)),
+ IntegerValue.REF));
+
+ assertEquals(value(42), result);
+ }
+
protected PrimitiveValue evalExpression(ExpressionNode expression) {
return evalExpression(ImmutableList.of(), expression);
}