diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-10-30 17:21:10 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-10-30 17:21:10 +0000 |
| commit | d58b27ee89a014aa294b25baffd53c7a96a64be3 (patch) | |
| tree | 6dcd100dd36c54b481dd49d07fab76bd747dc851 /src/test/java | |
| parent | befd7c344ba8a7c3402d4c678f1b81017fd65947 (diff) | |
Extract inner type hoisting to separate step
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java | 32 |
1 files changed, 30 insertions, 2 deletions
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<TypeParameter> 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<TypeParameter> freeTypeParameters = FreeVariables.findFreeTypeParameters(method); + assertEquals(set(), freeTypeParameters); + } + + private FormalArgumentNode argOfType(Type type) { + return FormalArgumentNode.formalArg(var(TestIds.variable("x"), "x", type)); + } } |
