diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-06 18:52:39 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-06 18:52:39 +0100 |
| commit | fe5c62948545b21ca4af1089a1eb33a70899086c (patch) | |
| tree | 83e7342c8b1d8d66cf9286f52f1558f5ebc7af67 /src/test/java | |
| parent | d6e286f8b595d07fd3d2656a235fe49e3843faf9 (diff) | |
Add stubbed parser
Diffstat (limited to 'src/test/java')
3 files changed, 68 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java new file mode 100644 index 00000000..87ebb7e8 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java @@ -0,0 +1,22 @@ +package org.shedlang.compiler.parser; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.ast.UntypedNamespaceNode; + +import static org.shedlang.compiler.parser.ParserTesting.parseString; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.instanceOf; + +public class ParserNamespaceTests { + @Test + public void canParseEmptyNamespace() { + var source = ""; + + var node = parseString( + source, + Parser::parseNamespace + ); + + assertThat(node, instanceOf(UntypedNamespaceNode.class)); + } +} diff --git a/src/test/java/org/shedlang/compiler/parser/ParserTesting.java b/src/test/java/org/shedlang/compiler/parser/ParserTesting.java new file mode 100644 index 00000000..fd420f73 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/parser/ParserTesting.java @@ -0,0 +1,23 @@ +package org.shedlang.compiler.parser; + +import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.tokeniser.TokenIterator; + +import java.util.function.Function; + +import static org.shedlang.compiler.parser.Tokeniser.tokenise; +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<TokenType>, T> parseTokens + ) { + var source = Sources.file("<string>", sourceContents); + var tokens = tokenise(source); + var result = parseTokens.apply(tokens); + assertThat(tokens.peek().tokenType(), equalTo(TokenType.END)); + return result; + } +} diff --git a/src/test/java/org/shedlang/compiler/parser/TokeniserTests.java b/src/test/java/org/shedlang/compiler/parser/TokeniserTests.java new file mode 100644 index 00000000..038c8ae3 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/parser/TokeniserTests.java @@ -0,0 +1,23 @@ +package org.shedlang.compiler.parser; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.sources.Sources; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TokeniserTests { + @Test + public void whitespaceTokensAreIgnored() { + var source = Sources.file("X.shed", """ + one two three + """); + + var result = Tokeniser.tokenise(source); + + assertThat(result.nextValue(TokenType.IDENTIFIER), equalTo("one")); + assertThat(result.nextValue(TokenType.IDENTIFIER), equalTo("two")); + assertThat(result.nextValue(TokenType.IDENTIFIER), equalTo("three")); + assertThat(result.trySkip(TokenType.END), equalTo(true)); + } +} |
