aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java19
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/NodeMatchers.java6
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)));