diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-09-27 10:40:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-09-27 10:40:47 +0100 |
| commit | b70f537b17bd0aa5a06635b5c34e79613e5e5ce9 (patch) | |
| tree | 7400a740624a577cbbb4f9b99883144b9b38ec71 | |
| parent | 659c2fefd53dbc55c68a247785a8b21d7b94d382 (diff) | |
Throw appropriate error on recognised namespace statement
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java | 2 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserNamespaceTests.java | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java index 12259ad..a80c4bf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java @@ -112,7 +112,7 @@ public class Parser { } else if (tokens.isNext(TokenType.KEYWORD_SUM)) { return parseSumDefinition(tokens, docComment); } else { - throw new UnsupportedOperationException("TODO"); + throw new UnexpectedTokenError("namespace statement", tokens.peek()); } } 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 ada6414..f749767 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.junit.jupiter.api.Assertions.assertThrows; 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; @@ -95,4 +96,20 @@ public class ParserNamespaceTests { )) ); } + + @Test + public void whenNamespaceStatementIsNotRecognisedThenErrorIsThrown() { + var source = "blah"; + + var error = assertThrows( + UnexpectedTokenError.class, + () -> parseString( + source, + tokens -> Parser.parseNamespace(tokens, NamespaceName.of("Example", "Project")) + ) + ); + + assertThat(error.getExpected(), equalTo("namespace statement")); + assertThat(error.getActual().charSequence().toString(), equalTo("blah")); + } } |
