summaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/hobgoblin/compiler/parser/ParserTesting.java
blob: 6fec7590194783f1ac898683b70908b6d8c77fbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package org.zwobble.hobgoblin.compiler.parser;

import org.zwobble.hobgoblin.compiler.parser.TokenIterator;
import org.zwobble.hobgoblin.compiler.parser.TokenType;
import org.zwobble.hobgoblin.compiler.parser.Tokenizer;
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;
    }
}