summaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java43
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 = "";