diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-04-20 13:04:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-04-20 13:04:57 +0100 |
| commit | 2394ae418641b638db23f66bb289e2771d8a2b1b (patch) | |
| tree | 9bae55d288dadf1b2982f25c728640ad85cdc6a7 /src/test | |
| parent | 7d088b0a827b2ec7d32968ec36c376d13116d76d (diff) | |
Parse empty namespace
Diffstat (limited to 'src/test')
3 files changed, 56 insertions, 7 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/parser/ParserNamespaceTests.java b/src/test/java/org/zwobble/hobgoblin/parser/ParserNamespaceTests.java new file mode 100644 index 0000000..89527e9 --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/parser/ParserNamespaceTests.java @@ -0,0 +1,27 @@ +package org.zwobble.hobgoblin.parser; + +import org.junit.jupiter.api.Test; +import org.zwobble.hobgoblin.ast.untyped.UntypedNamespaceNode; +import org.zwobble.hobgoblin.types.NamespaceName; + +import static org.zwobble.hobgoblin.parser.ParserTesting.parseString; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.*; + +public class ParserNamespaceTests { + @Test + public void emptyNamespaceHasEmptyBody() { + var source = ""; + + var node = parseString( + source, + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) + ); + + assertThat(node, instanceOf( + UntypedNamespaceNode.class, + has("namespaceName", x -> x.namespaceName(), equalTo(NamespaceName.of("Example", "Project"))), + has("body", x -> x.body(), isSequence()) + )); + } +} diff --git a/src/test/java/org/zwobble/hobgoblin/parser/ParserTesting.java b/src/test/java/org/zwobble/hobgoblin/parser/ParserTesting.java new file mode 100644 index 0000000..14cfb62 --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/parser/ParserTesting.java @@ -0,0 +1,22 @@ +package org.zwobble.hobgoblin.parser; + +import org.zwobble.sourcetext.SourceText; + +import java.util.function.Function; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class ParserTesting { + public static <T> T parseString( + String sourceContents, + Function<TokenIterator, T> parseTokens + ) { + var sourceText = SourceText.fromString("<string>", sourceContents); + var tokens = Tokenizer.tokenize(sourceText); + var tokenIterator = tokens.iterator(); + var result = parseTokens.apply(tokenIterator); + assertThat(tokenIterator.peek().tokenType(), equalTo(TokenType.END)); + return result; + } +} diff --git a/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java b/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java index 05848a3..6f77470 100644 --- a/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java +++ b/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java @@ -15,7 +15,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence()); + assertThat(tokens.tokens(), isSequence()); } @Test @@ -24,7 +24,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.KEYWORD_STRUCT, sourceRange(sourceText, 0, 6))) )); } @@ -35,7 +35,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 0, 4))) )); } @@ -46,7 +46,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.SYMBOL_BRACE_OPEN, sourceRange(sourceText, 0, 1))) )); } @@ -57,7 +57,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.SYMBOL_BRACE_CLOSE, sourceRange(sourceText, 0, 1))) )); } @@ -68,7 +68,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 2, 6))) )); } @@ -79,7 +79,7 @@ public class TokenizerTests { var tokens = Tokenizer.tokenize(sourceText); - assertThat(tokens, isSequence( + assertThat(tokens.tokens(), isSequence( equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 0, 3))), equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 4, 7))), equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 10, 15))) |
