diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-02-25 18:48:53 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-02-25 18:48:53 +0000 |
| commit | e7d00f5a62e0f03161dbc12939840d332dc76506 (patch) | |
| tree | c0f76daa9549e18f5808b057d27d8e78c51293cb /src/test/java | |
| parent | 5396117397cda16a4ab23e6c098253af20f085ff (diff) | |
Parse type level params in function signature
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionSignatureNodeMatcher.java | 7 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java | 42 |
2 files changed, 49 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionSignatureNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionSignatureNodeMatcher.java index 8cd1c638..2059f506 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionSignatureNodeMatcher.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedFunctionSignatureNodeMatcher.java @@ -5,6 +5,7 @@ import org.pcollections.PVector; import org.shedlang.compiler.testing.MatcherBuilder; import org.zwobble.precisely.Matcher; +import java.util.List; import java.util.Optional; import static org.zwobble.precisely.Matchers.*; @@ -59,4 +60,10 @@ public class UntypedFunctionSignatureNodeMatcher extends MatcherBuilder< ) { return with(has("returnType", x -> x.returnType(), returnType)); } + + public UntypedFunctionSignatureNodeMatcher withTypeLevelParams( + Matcher<Optional<? extends List<UntypedTypeLevelParamNode>>> typeLevelParams + ) { + return with(has("typeLevelParams", x -> x.typeLevelParams(), typeLevelParams)); + } } diff --git a/src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java b/src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java index f26efa64..1e639069 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java @@ -210,4 +210,46 @@ public class ParserFunctionSignatureTests { .withoutReturnType() ); } + + @Test + public void canParseAbsentTypeLevelParams() { + var source = "() -> Unit"; + + var node = parseString(source, Parser::parseFunctionSignature); + + assertThat( + node, + isUntypedFunctionSignatureNode().withTypeLevelParams(isOptionalEmpty()) + ); + } + + @Test + public void canParseSingleTypeLevelParam() { + var source = "[A]() -> Unit"; + + var node = parseString(source, Parser::parseFunctionSignature); + + assertThat( + node, + isUntypedFunctionSignatureNode().withTypeLevelParams(isOptionalOf(isSequence( + isUntypedTypeLevelParamNode("A") + ))) + ); + } + + @Test + public void canParseManyTypeLevelParams() { + var source = "[A, B, C]() -> Unit"; + + var node = parseString(source, Parser::parseFunctionSignature); + + assertThat( + node, + isUntypedFunctionSignatureNode().withTypeLevelParams(isOptionalOf(isSequence( + isUntypedTypeLevelParamNode("A"), + isUntypedTypeLevelParamNode("B"), + isUntypedTypeLevelParamNode("C") + ))) + ); + } } |
