55 lines
2.2 KiB
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);
|
|
}
|
|
}
|
|
}
|
|
}
|