diff options
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))) |
