From e7d00f5a62e0f03161dbc12939840d332dc76506 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 25 Feb 2024 18:48:53 +0000 Subject: Parse type level params in function signature --- .../parser/ParserFunctionSignatureTests.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/test/java/org/shedlang/compiler/parser') 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") + ))) + ); + } } -- cgit v1.2.3