From 63fc003231e92e8f5ea2af29a04ba5507c212325 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 4 Apr 2016 22:42:15 +0100 Subject: Partial support for reading type parameters for methods --- .../tests/frontends/java/JavaReaderTests.java | 19 +++++++++++++++++-- .../couscous/tests/frontends/java/NodeMatchers.java | 6 +++++- 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'src/test/java/org') 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 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 isArgument(String name, Type type) { + public static Matcher isFormalTypeParameter(String name) { + return hasFeature("name", node -> node.getName(), equalTo(name)); + } + + public static Matcher isFormalArgument(String name, Type type) { return allOf( hasFeature("name", node -> node.getName(), equalTo(name)), hasFeature("type", node -> node.getType(), equalTo(type))); -- cgit v1.2.3