aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java22
1 files changed, 22 insertions, 0 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 2cec753..7c5594a 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -11,6 +11,7 @@ import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.interpreter.ConditionMustBeBoolean;
import org.zwobble.couscous.interpreter.Environment;
+import org.zwobble.couscous.interpreter.NoSuchField;
import org.zwobble.couscous.interpreter.NoSuchMethod;
import org.zwobble.couscous.interpreter.StackFrameBuilder;
import org.zwobble.couscous.interpreter.UnexpectedValueType;
@@ -27,7 +28,9 @@ import com.google.common.collect.ImmutableMap;
import static java.util.Arrays.asList;
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.ConstructorCallNode.constructorCall;
+import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
@@ -112,6 +115,25 @@ public class EvaluatorTests extends BackendEvalTests {
assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception);
}
+ @Test
+ public void cannotSetValueOfUndeclaredField() {
+ val classNode = ClassNode.builder("com.example.Example")
+ .constructor(constructor -> constructor
+ .statement(assignStatement(
+ fieldAccess(constructor.thisReference(), "value", IntegerValue.REF),
+ literal(42))))
+ .build();
+
+ val exception = assertThrows(NoSuchField.class,
+ () -> evalExpression(
+ asList(classNode),
+ constructorCall(
+ classNode.getName(),
+ asList())));
+
+ assertEquals(new NoSuchField("value"), exception);
+ }
+
private static Environment emptyEnvironment() {
return new Environment(
JavaProject.builder().build(),