diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-20 17:51:33 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-20 17:51:33 +0100 |
| commit | c57ca9e4d30e07d2ff0ba2f113e905a3c3794c75 (patch) | |
| tree | 0ad284e2ac442edd68aa32e171f84a1dcfc2ec8c /src/test/java | |
| parent | d2df851ca20b0ec02cb3450c861288d65d45f165 (diff) | |
Parse imports in namespace
Diffstat (limited to 'src/test/java')
3 files changed, 29 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java index 09067087..2c2aad8c 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -118,7 +118,7 @@ public class Untyped { NamespaceName namespaceName, List<UntypedNamespaceStatementNode> body ) { - return new UntypedNamespaceNode(namespaceName, body, Sources.NULL); + return new UntypedNamespaceNode(namespaceName, List.of(), body, Sources.NULL); } public static UntypedNamespaceNode namespace(List<UntypedNamespaceStatementNode> body) { diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java index fdbb8f53..6d426bf4 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/UntypedNodeMatchers.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.ast.untyped; +import org.shedlang.compiler.types.NamespaceName; import org.zwobble.precisely.Matcher; import java.math.BigInteger; @@ -132,6 +133,12 @@ public class UntypedNodeMatchers { ); } + public static Matcher<UntypedImportNode> isUntypedImportNode( + NamespaceName namespaceName + ) { + return has("namespaceName", x -> x.namespaceName(), equalTo(namespaceName)); + } + public static Matcher<UntypedExpressionNode> isUntypedIntLiteralNode(int value) { return isUntypedIntLiteralNode(BigInteger.valueOf(value)); } diff --git a/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java index 9c14e5b4..4f0b81be 100644 --- a/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java @@ -5,6 +5,7 @@ import org.shedlang.compiler.ast.untyped.UntypedNamespaceNode; import org.shedlang.compiler.types.NamespaceName; import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedFunctionDefinitionNode; +import static org.shedlang.compiler.ast.untyped.UntypedNodeMatchers.isUntypedImportNode; import static org.shedlang.compiler.parser.ParserTesting.parseString; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.*; @@ -49,4 +50,24 @@ public class ParserNamespaceTests { )) )); } + + @Test + public void canParseNamespaceWithImports() { + var source = """ + import One; + import Two/Three;"""; + + var node = parseString( + source, + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) + ); + + assertThat(node, instanceOf( + UntypedNamespaceNode.class, + has("imports", x -> x.imports(), isSequence( + isUntypedImportNode(NamespaceName.of("One")), + isUntypedImportNode(NamespaceName.of("Two", "Three")) + )) + )); + } } |
