package gutenberg.pegdown; import com.google.common.base.Optional; import gutenberg.pegdown.plugin.AttributesNode; import gutenberg.pegdown.plugin.AttributesPlugin; import org.junit.Test; import org.pegdown.Extensions; import org.pegdown.PegDownProcessor; import org.pegdown.ast.ParaNode; import org.pegdown.ast.RefImageNode; import org.pegdown.ast.RootNode; import org.pegdown.ast.SuperNode; import org.pegdown.plugins.PegDownPlugins; import static gutenberg.pegdown.TreeNavigation.*; import static org.assertj.core.api.Assertions.assertThat; public class TreeNavigationTest extends AbstractPegdownTest { @Test @SuppressWarnings("unchecked") public void usecase__ancestor_sibling_and_of_type() throws Exception { String mkd = loadResource("image-04-ref.md").trim(); PegDownPlugins plugins = PegDownPlugins .builder() .withPlugin(AttributesPlugin.class) .build(); PegDownProcessor processor = new PegDownProcessor(Extensions.ALL, plugins); RootNode rootNode = processor.parseMarkdown(mkd.toCharArray()); TreeNavigation nav; nav = new TreeNavigation(); nav.push(rootNode); nav.pushChild(3); nav.pushChild(); nav.pushChild(); assertThat(nav.peek()).isInstanceOf(RefImageNode.class); // // Optional<TreeNavigation> result1 = ancestor(RefImageNode.class, SuperNode.class, ParaNode.class) .query(nav); assertThat(result1.isPresent()).isTrue(); assertThat(result1.get().peek()).isInstanceOf(ParaNode.class); // // Optional<TreeNavigation> result2 = ancestor(RefImageNode.class, SuperNode.class, ParaNode.class) .then(siblingBefore()) .query(nav); assertThat(result2.isPresent()).isTrue(); assertThat(result2.get().peek()).isInstanceOf(AttributesNode.class); // // Optional<TreeNavigation> result3 = firstAncestorOfType(ParaNode.class) .then(siblingBefore()) .query(nav); assertThat(result3.isPresent()).isTrue(); assertThat(result3.get().peek()).isInstanceOf(AttributesNode.class); //System.out.println("TreeNavigationTest.usecase" + dumpAST(rootNode)); } @Test @SuppressWarnings("unchecked") public void usecase__sibling_then_of_type() throws Exception { String mkd = loadResource("image-04-ref.md").trim(); PegDownPlugins plugins = PegDownPlugins .builder() .withPlugin(AttributesPlugin.class) .build(); PegDownProcessor processor = new PegDownProcessor(Extensions.ALL, plugins); RootNode rootNode = processor.parseMarkdown(mkd.toCharArray()); TreeNavigation nav; nav = new TreeNavigation(); nav.push(rootNode); nav.pushChild(3); assertThat(nav.peek()).isInstanceOf(ParaNode.class); // // Optional<TreeNavigation> result = siblingBefore() .then(ofType(AttributesNode.class)) .query(nav); assertThat(result.isPresent()).isTrue(); assertThat(result.get().peek()).isInstanceOf(AttributesNode.class); } }