aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-06 18:52:39 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-06 18:52:39 +0100
commitfe5c62948545b21ca4af1089a1eb33a70899086c (patch)
tree83e7342c8b1d8d66cf9286f52f1558f5ebc7af67 /src/test/java
parentd6e286f8b595d07fd3d2656a235fe49e3843faf9 (diff)
Add stubbed parser
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserNamespaceTests.java22
-rw-r--r--src/test/java/org/shedlang/compiler/parser/ParserTesting.java23
-rw-r--r--src/test/java/org/shedlang/compiler/parser/TokeniserTests.java23
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));
+ }
+}