aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-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]"));