Detect missing keys while classifying tokens #306

Merged
lars.winzer merged 2 commits from fix/126-missing-key-is-not-detected-by-tokenclassifier into main 2026-04-25 14:33:13 +02:00
2 changed files with 10 additions and 1 deletions
@@ -48,7 +48,7 @@ public class TokenClassifier {
} }
private static void validateSeparator(List<RawToken> rawTokens, int index) { private static void validateSeparator(List<RawToken> rawTokens, int index) {
boolean missingKey = index == 0 || rawTokens.get(index - 1).type() != RawTokenType.WORD; boolean missingKey = index <= 1 || rawTokens.get(index - 1).type() != RawTokenType.WORD;
boolean missingValue = boolean missingValue =
index + 1 >= rawTokens.size() index + 1 >= rawTokens.size()
@@ -63,6 +63,15 @@ public class TokenClassifierTest {
assertEquals("Expected VALUE after '='", ex.getMessage()); assertEquals("Expected VALUE after '='", ex.getMessage());
} }
@Test
void testMissingKeyBeforeSeparatorThrows() {
List<RawToken> raw = Tokenizer.tokenize("CMD =VALUE");
TokenizerException ex =
assertThrows(TokenizerException.class, () -> TokenClassifier.classify(raw));
assertEquals("Expected KEY before '='", ex.getMessage());
}
@Test @Test
void testNextWordIsKeyThrows() { void testNextWordIsKeyThrows() {
List<RawToken> raw = Tokenizer.tokenize("CMD KEY1=KEY2=42"); List<RawToken> raw = Tokenizer.tokenize("CMD KEY1=KEY2=42");