diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-14 11:05:12 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-14 11:05:12 +0100 |
| commit | 8f4049e29116e1f80a2ab8d740ca1f4519a64aa2 (patch) | |
| tree | e835b0a4cd3724802e3b72c47522236c9b932385 /src/test/java | |
| parent | 95f9dc1f12d14acad47472bb20f03f0e90a98fac (diff) | |
Parse imports
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java index 22878dc..4df8b95 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedStructDefinitionNode; import org.zwobble.hobgoblin.compiler.types.NamespaceName; +import static org.zwobble.hobgoblin.compiler.ast.untyped.UntypedImportNodeMatcher.isUntypedImportNode; import static org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceNodeMatcher.isUntypedNamespaceNode; import static org.zwobble.hobgoblin.compiler.parser.ParserTesting.parseString; import static org.zwobble.precisely.AssertThat.assertThat; @@ -11,6 +12,48 @@ import static org.zwobble.precisely.Matchers.*; public class ParserNamespaceTests { @Test + public void emptyNamespaceHasNoImports() { + var source = ""; + + var node = parseString( + source, + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) + ); + + assertThat(node, isUntypedNamespaceNode() + .withImports(isSequence()) + ); + } + + @Test + public void importsAreParsed() { + var source = """ + import {Point} from point; + import {Square, Rectangle} from ./shapes; + import {Line} from ../../line; + """; + + var node = parseString( + source, + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) + ); + + assertThat(node, isUntypedNamespaceNode() + .withImports(isSequence( + isUntypedImportNode() + .withImportedNames(isSequence(equalTo("Point"))) + .withNamespaceName(equalTo(NamespaceName.of("point"))), + isUntypedImportNode() + .withImportedNames(isSequence(equalTo("Square"), equalTo("Rectangle"))) + .withNamespaceName(equalTo(NamespaceName.of(".", "shapes"))), + isUntypedImportNode() + .withImportedNames(isSequence(equalTo("Line"))) + .withNamespaceName(equalTo(NamespaceName.of("..", "..", "line"))) + )) + ); + } + + @Test public void emptyNamespaceHasEmptyBody() { var source = ""; |
