From b74d68227dc7c05e24705e3064ef961f95b8b729 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 4 Oct 2015 17:52:29 +0100 Subject: Throw exception if assigning value of wrong type --- .../couscous/tests/interpreter/InterpreterTests.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/test/java/org') 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; @@ -81,6 +83,19 @@ public class InterpreterTests { assertEquals(new StringValue("[updated value]"), result); } + @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( -- cgit v1.2.3