SimpleTestBookParser.java

package io.github.giulong.spectrum.utils.testbook.parsers;

import io.github.giulong.spectrum.pojos.testbook.TestBookTest;
import io.github.giulong.spectrum.utils.FileUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.lang.System.lineSeparator;

@Slf4j
public abstract class SimpleTestBookParser extends TestBookParser {

    public abstract String getRegex();

    @Override
    public List<TestBookTest> parse() {
        log.debug("Reading lines of {} testbook", getClass().getSimpleName());
        final String regex = getRegex();
        final Pattern PATTERN = Pattern.compile(regex);

        return Arrays
                .stream(FileUtils.getInstance().read(path).split(lineSeparator()))
                .map(line -> {
                    Matcher matcher = PATTERN.matcher(line);
                    if (!matcher.matches()) {
                        throw new IllegalArgumentException(String.format("Line '%s' in TestBook doesn't match pattern %s", line, regex));
                    }

                    final String weight = matcher.group("weight");
                    return TestBookTest.builder()
                            .className(matcher.group("className"))
                            .testName(matcher.group("testName"))
                            .weight(Integer.parseInt(weight != null ? weight : "1"))
                            .build();
                }).toList();
    }
}