diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-04 22:42:15 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-05 22:28:43 +0100 |
| commit | 63fc003231e92e8f5ea2af29a04ba5507c212325 (patch) | |
| tree | aa75d120c99570340402f06edffb9acc357f8394 /src/test | |
| parent | 449c10917348eee52c2d769eb5f6fb7f8ec836b9 (diff) | |
Partial support for reading type parameters for methods
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 19 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java | 6 |
2 files changed, 22 insertions, 3 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index 5bcb044..4a05385 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -29,7 +29,9 @@ import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.ast.WhileNode.whileLoop; import static org.zwobble.couscous.tests.frontends.java.JavaReading.*; -import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.isArgument; +import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.isFormalArgument; +import static org.zwobble.couscous.tests.frontends.java.NodeMatchers.isFormalTypeParameter; +import static org.zwobble.couscous.types.TypeParameter.typeParameter; import static org.zwobble.couscous.util.ExtraLists.list; import static org.zwobble.couscous.util.ExtraSets.set; @@ -75,11 +77,24 @@ public class JavaReaderTests { "}"); MethodNode method = classNode.getMethods().get(0); - assertThat(method.getArguments(), contains(isArgument("value", ScalarType.of("int")))); + assertThat(method.getArguments(), contains(isFormalArgument("value", ScalarType.of("int")))); ReturnNode returnNode = (ReturnNode)method.getBody().get().get(0); assertEquals(reference(method.getArguments().get(0)), returnNode.getValue()); } + + @Test + public void canReadTypeParametersForMethod() { + ClassNode classNode = readClass( + "public <T> T identity(T value) {" + + " return value;" + + "}"); + + MethodNode method = classNode.getMethods().get(0); + assertThat(method.getTypeParameters(), contains(isFormalTypeParameter("T"))); + // TODO: typeParameter should be declared on method, not class + assertThat(method.getArguments(), contains(isFormalArgument("value", typeParameter(classNode.getName(), "T")))); + } @Test public void canReadExpressionStatements() { diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java index efd4eb4..104cf8b 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java @@ -14,7 +14,11 @@ public class NodeMatchers { return hasFeature("initial value", node -> node.getInitialValue(), matcher); } - public static Matcher<FormalArgumentNode> isArgument(String name, Type type) { + public static Matcher<FormalTypeParameterNode> isFormalTypeParameter(String name) { + return hasFeature("name", node -> node.getName(), equalTo(name)); + } + + public static Matcher<FormalArgumentNode> isFormalArgument(String name, Type type) { return allOf( hasFeature("name", node -> node.getName(), equalTo(name)), hasFeature("type", node -> node.getType(), equalTo(type))); |
