aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-04 17:52:29 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-04 17:52:29 +0100
commitb74d68227dc7c05e24705e3064ef961f95b8b729 (patch)
tree70601bc83d1105c6748a062bd6ffe41ecfe68acc /src/test/java/org
parent8d2374ba254e637c22e6f1eaa58ccb54d814529f (diff)
Throw exception if assigning value of wrong type
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java15
1 files changed, 15 insertions, 0 deletions
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 46b30d9..6fe799f 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterTests.java
@@ -11,9 +11,11 @@ import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.interpreter.Interpreter;
import org.zwobble.couscous.interpreter.UnboundVariable;
+import org.zwobble.couscous.interpreter.UnexpectedValueType;
import org.zwobble.couscous.interpreter.VariableNotInScope;
import org.zwobble.couscous.interpreter.WrongNumberOfArguments;
import org.zwobble.couscous.values.ConcreteType;
+import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.InterpreterValue;
import org.zwobble.couscous.values.StringValue;
@@ -82,6 +84,19 @@ public class InterpreterTests {
}
@Test
+ public void errorIfTryingToAssignValueOfWrongTypeToVariable() {
+ val arg = new FormalArgumentNode(42, StringValue.REF, "x");
+ val method = staticMethod("hello")
+ .argument(arg)
+ .statement(new ExpressionStatementNode(new Assignment(reference(arg), literal(0))));
+
+ val exception = assertThrows(UnexpectedValueType.class,
+ () -> runMethod(method, new StringValue("")));
+
+ assertEquals(new UnexpectedValueType(StringValue.REF, IntegerValue.REF), exception);
+ }
+
+ @Test
public void canDeclareVariable() {
val localVariableDeclaration = localVariableDeclaration(
42, StringValue.REF, "x", LiteralNode.literal("[initial value]"));