diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-04 17:52:29 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-04 17:52:29 +0100 |
| commit | b74d68227dc7c05e24705e3064ef961f95b8b729 (patch) | |
| tree | 70601bc83d1105c6748a062bd6ffe41ecfe68acc /src/test/java/org | |
| parent | 8d2374ba254e637c22e6f1eaa58ccb54d814529f (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.java | 15 |
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]")); |
