From d58b27ee89a014aa294b25baffd53c7a96a64be3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 30 Oct 2016 17:21:10 +0000 Subject: Extract inner type hoisting to separate step --- .../tests/frontends/java/FreeVariablesTests.java | 32 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src/test/java/org') diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java index 8bcf38d..0af0020 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java @@ -1,22 +1,27 @@ package org.zwobble.couscous.tests.frontends.java; import org.junit.Test; -import org.zwobble.couscous.ast.ReferenceNode; -import org.zwobble.couscous.ast.VariableDeclaration; +import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.frontends.java.FreeVariables; import org.zwobble.couscous.tests.TestIds; +import org.zwobble.couscous.types.Type; +import org.zwobble.couscous.types.TypeParameter; import org.zwobble.couscous.types.Types; import java.util.List; +import java.util.Set; import static java.util.Collections.emptyList; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; +import static org.zwobble.couscous.ast.FormalTypeParameterNode.formalTypeParameter; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.frontends.java.FreeVariables.findFreeVariables; import static org.zwobble.couscous.util.ExtraLists.list; +import static org.zwobble.couscous.util.ExtraSets.set; public class FreeVariablesTests { @Test @@ -43,4 +48,27 @@ public class FreeVariablesTests { reference(declaration))); assertEquals(emptyList(), freeVariables); } + + @Test + public void typeParameterIsFreeIfThereIsNoAssociatedDeclaration() { + TypeParameter typeParameter = new TypeParameter(TestIds.ANY_ID, "T"); + MethodNode method = MethodNode.builder("f").argument(argOfType(typeParameter)).build(); + Set freeTypeParameters = FreeVariables.findFreeTypeParameters(method); + assertEquals(set(typeParameter), freeTypeParameters); + } + + @Test + public void typeParameterIsNotFreeIfItIsDeclared() { + TypeParameter typeParameter = new TypeParameter(TestIds.ANY_ID, "T"); + MethodNode method = MethodNode.builder("f") + .typeParameter(formalTypeParameter(typeParameter)) + .argument(argOfType(typeParameter)) + .build(); + Set freeTypeParameters = FreeVariables.findFreeTypeParameters(method); + assertEquals(set(), freeTypeParameters); + } + + private FormalArgumentNode argOfType(Type type) { + return FormalArgumentNode.formalArg(var(TestIds.variable("x"), "x", type)); + } } -- cgit v1.2.3