aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 20:10:54 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 20:10:54 +0000
commite1d8a9727e1a84ddfa5b38e8f8a433b7105bc6bd (patch)
tree698286dde058e0cbdfdf75da9a04c97e2a7f278e /src/test/java/org
parentd0e09b193e96f573231254ca60d5a62c65b6d232 (diff)
Implements casts in the interpreter
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
index d3c2a12..4d91cdb 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -1,8 +1,6 @@
package org.zwobble.couscous.tests.interpreter;
-import java.util.List;
-import java.util.Optional;
-
+import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
@@ -14,14 +12,17 @@ import org.zwobble.couscous.interpreter.values.InterpreterValue;
import org.zwobble.couscous.interpreter.values.StringInterpreterValue;
import org.zwobble.couscous.tests.BackendEvalTests;
import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.values.ObjectValues;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.StringValue;
-import com.google.common.collect.ImmutableMap;
+import java.util.List;
+import java.util.Optional;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.AssignmentNode.assignStatement;
+import static org.zwobble.couscous.ast.CastNode.cast;
import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall;
import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
@@ -186,6 +187,23 @@ public class EvaluatorTests extends BackendEvalTests {
assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception);
}
+
+ @Test
+ public void validCastPassesValueThrough() {
+ InterpreterValue value = eval(
+ emptyEnvironment(),
+ cast(literal("42"), ObjectValues.OBJECT));
+ assertEquals(value("42"), value);
+ }
+
+ @Test
+ public void errorIfCastIsNotValid() {
+ InvalidCast exception = assertThrows(InvalidCast.class,
+ () -> eval(emptyEnvironment(),
+ cast(literal(42), StringValue.REF)));
+ assertEquals(StringValue.REF, exception.getExpected());
+ assertEquals(IntegerValue.REF, exception.getActual());
+ }
private static Environment emptyEnvironment() {
return new Environment(