package gutenberg.pegdown;
import org.apache.commons.io.IOUtils;
import org.junit.Ignore;
import org.parboiled.Rule;
import org.parboiled.errors.ErrorUtils;
import org.parboiled.errors.ParseError;
import org.parboiled.parserunners.ReportingParseRunner;
import org.parboiled.parserunners.TracingParseRunner;
import org.parboiled.support.ParsingResult;
import org.parboiled.support.ToStringFormatter;
import org.parboiled.trees.GraphUtils;
import org.pegdown.ast.Node;
import org.pegdown.ast.RootNode;
import java.io.IOException;
import java.io.InputStream;
import static org.parboiled.support.ParseTreeUtils.printNodeTree;
/**
* @author <a href="http://twitter.com/aloyer">@aloyer</a>
*/
@Ignore("Base class for test")
public class AbstractPegdownTest {
protected String loadResource(String resourceName) throws IOException {
InputStream stream = getClass().getResourceAsStream(resourceName);
try {
return IOUtils.toString(stream, "utf8");
} finally {
IOUtils.closeQuietly(stream);
}
}
protected String normalize(String string) {
return string.replace("\r\n", "\n").replace("\r", "\n");
}
protected String dumpAST(RootNode rootNode) {
return GraphUtils.printTree(rootNode, new ToStringFormatter<Node>());
}
protected boolean trace = false;
@SuppressWarnings("unchecked")
protected <T> T parse(Rule rule, String input) {
ParsingResult<?> result;
if (trace) {
result = new TracingParseRunner<Object>(rule).run(input);
} else {
result = new ReportingParseRunner(rule).run(input);
}
if (!result.parseErrors.isEmpty()) {
for (ParseError parseError : result.parseErrors) {
System.out.println(ErrorUtils.printParseError(parseError));
}
} else if (trace) {
System.out.println(printNodeTree(result) + '\n');
}
return (T) result.valueStack.pop();
}
}