From bac463d6b411c2108d56190b5766c9c92eade69d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 13 Feb 2016 14:53:32 +0000 Subject: Distinguish static and instance fields when checking field exists --- .../couscous/tests/interpreter/EvaluatorTests.java | 26 ++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/test/java') 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 98f4e22..b2b572d 100644 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java +++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java @@ -2,10 +2,7 @@ package org.zwobble.couscous.tests.interpreter; import com.google.common.collect.ImmutableMap; import org.junit.Test; -import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.ExpressionNode; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.JavaProject; import org.zwobble.couscous.interpreter.MapBackedProject; @@ -171,6 +168,27 @@ public class EvaluatorTests extends BackendEvalTests { assertEquals(new NoSuchField("value"), exception); } + + @Test + public void cannotSetValueOfInstanceFieldAsThoughItIsAStaticField() { + TypeName type = TypeName.of("com.example.Example"); + ClassNode classNode = ClassNode.builder(type) + .field("value", IntegerValue.REF) + .constructor(constructor -> constructor + .statement(assignStatement( + fieldAccess(type, "value", IntegerValue.REF), + literal(42)))) + .build(); + + NoSuchField exception = assertThrows(NoSuchField.class, + () -> evalExpression( + list(classNode), + constructorCall( + classNode.getName(), + list()))); + + assertEquals(new NoSuchField("value"), exception); + } @Test public void cannotSetValueOfFieldWithWrongType() { -- cgit v1.2.3