summaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-18 13:09:30 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-18 13:09:30 +0100
commit00592db2490ac6274b3926fd007365d2c50327a8 (patch)
tree64f1141f00a396fd71a2e2c9927040b8c04773f8 /src/test/java/org
parentc2d40ab3cf87323ebdb1efd909ee325a89f8303a (diff)
Add initial tokenizer
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java b/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java
new file mode 100644
index 0000000..52c5f79
--- /dev/null
+++ b/src/test/java/org/zwobble/hobgoblin/parser/TokenizerTests.java
@@ -0,0 +1,46 @@
+package org.zwobble.hobgoblin.parser;
+
+import org.junit.jupiter.api.Test;
+import org.zwobble.sourcetext.SourceRange;
+import org.zwobble.sourcetext.SourceText;
+
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.equalTo;
+import static org.zwobble.precisely.Matchers.isSequence;
+
+public class TokenizerTests {
+ @Test
+ public void emptySourceTextIsTokenizedToEmpty() {
+ var sourceText = SourceText.fromString("<string>", "");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens, isSequence());
+ }
+
+ @Test
+ public void structKeywordIsTokenized() {
+ var sourceText = SourceText.fromString("<string>", "struct");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens, isSequence(
+ equalTo(new Token(TokenType.KEYWORD_STRUCT, sourceRange(sourceText, 0, 6)))
+ ));
+ }
+
+ @Test
+ public void identifierIsTokenized() {
+ var sourceText = SourceText.fromString("<string>", "blah");
+
+ var tokens = Tokenizer.tokenize(sourceText);
+
+ assertThat(tokens, isSequence(
+ equalTo(new Token(TokenType.IDENTIFIER, sourceRange(sourceText, 0, 4)))
+ ));
+ }
+
+ private static SourceRange sourceRange(SourceText sourceText, int fromCharacterIndex, int toCharacterIndex) {
+ return sourceText.characterPosition(fromCharacterIndex).to(sourceText.characterPosition(toCharacterIndex));
+ }
+}