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/org/shedlang/compiler/parser | |
| parent | 5396117397cda16a4ab23e6c098253af20f085ff (diff) | |
Parse type level params in function signature
Diffstat (limited to 'src/test/java/org/shedlang/compiler/parser')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/parser/ParserFunctionSignatureTests.java | 42 |
1 files changed, 42 insertions, 0 deletions
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") + ))) + ); + } } |
