java-commons/muscript/src/test/java/io/gitlab/jfronny/muscript/test/ValidExampleTest.java

55 lines
2.2 KiB
Java

package io.gitlab.jfronny.muscript.test;
import io.gitlab.jfronny.commons.StringFormatter;
import io.gitlab.jfronny.muscript.compiler.Parser;
import io.gitlab.jfronny.muscript.error.LocationalException;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;
import static io.gitlab.jfronny.muscript.test.util.MuTestUtil.makeArgs;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ValidExampleTest {
@Test
void assertValidExample() throws IOException {
final String source;
try (InputStream is = Objects.requireNonNull(ValidExampleTest.class.getClassLoader().getResourceAsStream("example.md"))) {
source = new String(is.readAllBytes());
}
String[] split = source.lines().toArray(String[]::new);
for (int i = 0; i < split.length; i++) {
String s = split[i];
if (s.equals("```mu")) {
StringBuilder blockBuilder = new StringBuilder();
while (!split[++i].equals("```")) {
blockBuilder.append('\n').append(split[i]);
}
assertEquals("```", split[i++]);
assertEquals("Result:", split[i++]);
assertEquals("```", split[i]);
StringBuilder resultBuilder = new StringBuilder();
while (!split[++i].equals("```")) {
resultBuilder.append('\n').append(split[i]);
}
i++;
final String block = blockBuilder.substring(1);
final String expectedResult = resultBuilder.substring(1);
String result = null;
try {
result = Parser.parseScript(block).asExpr().asStringExpr().get(makeArgs());
} catch (Throwable t) {
assertEquals(expectedResult, StringFormatter.toString(t, e ->
e instanceof LocationalException le
? le.asPrintable(block).toString()
: e.toString()
));
}
if (result != null) assertEquals(expectedResult, result);
}
}
}
}