package gutenberg.pegdown; import gutenberg.pegdown.plugin.AttributesPlugin; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.pegdown.Extensions; import org.pegdown.PegDownProcessor; import org.pegdown.ast.RootNode; import org.pegdown.plugins.PegDownPlugins; import java.io.IOException; import java.io.InputStream; import static org.assertj.core.api.Assertions.assertThat; public class ReferencesTest { @Test public void usecase() throws IOException { RootNode rootNode = parseMarkdown("references-01.md"); References references = new References(); references.traverse(rootNode); References.Ref logo1 = references.lookup("logo1"); assertThat(logo1).isNotNull(); assertThat(logo1.url()).isEqualTo("${imageDir}/printing-history-gutenberg-press.jpg"); References.Ref google = references.lookup("google"); assertThat(google).isNotNull(); assertThat(google.url()).isEqualTo("http://google.com/"); assertThat(google.title()).isEqualTo("Google"); } private RootNode parseMarkdown(String resourcePath) throws IOException { String mkd = loadResource(resourcePath).trim(); PegDownPlugins plugins = PegDownPlugins .builder() .withPlugin(AttributesPlugin.class) .build(); PegDownProcessor processor = new PegDownProcessor(Extensions.ALL, plugins); return processor.parseMarkdown(mkd.toCharArray()); } protected String loadResource(String resourceName) throws IOException { InputStream stream = getClass().getResourceAsStream(resourceName); try { return IOUtils.toString(stream, "utf8"); } finally { IOUtils.closeQuietly(stream); } } }