/* --------------------------------------------------------- * * __________ D E L T A S C R I P T * * (_________() * * / === / - A fast, dynamic scripting language * * | == | - Version 4.13.11.0 * * / === / - Developed by Adam R. Nelson * * | = = | - 2011-2013 * * / === / - Distributed under GNU LGPL v3 * * (________() - http://github.com/ar-nelson/deltascript * * * * --------------------------------------------------------- */ package com.sector91.delta.script.test.doctest; import java.util.List; import org.pegdown.ast.AbbreviationNode; import org.pegdown.ast.AutoLinkNode; import org.pegdown.ast.BlockQuoteNode; import org.pegdown.ast.BulletListNode; import org.pegdown.ast.CodeNode; import org.pegdown.ast.DefinitionListNode; import org.pegdown.ast.DefinitionNode; import org.pegdown.ast.DefinitionTermNode; import org.pegdown.ast.ExpImageNode; import org.pegdown.ast.ExpLinkNode; import org.pegdown.ast.HeaderNode; import org.pegdown.ast.HtmlBlockNode; import org.pegdown.ast.InlineHtmlNode; import org.pegdown.ast.ListItemNode; import org.pegdown.ast.MailLinkNode; import org.pegdown.ast.Node; import org.pegdown.ast.OrderedListNode; import org.pegdown.ast.ParaNode; import org.pegdown.ast.QuotedNode; import org.pegdown.ast.RefImageNode; import org.pegdown.ast.RefLinkNode; import org.pegdown.ast.ReferenceNode; import org.pegdown.ast.RootNode; import org.pegdown.ast.SimpleNode; import org.pegdown.ast.SpecialTextNode; import org.pegdown.ast.StrongEmphSuperNode; import org.pegdown.ast.SuperNode; import org.pegdown.ast.TableBodyNode; import org.pegdown.ast.TableCaptionNode; import org.pegdown.ast.TableCellNode; import org.pegdown.ast.TableColumnNode; import org.pegdown.ast.TableHeaderNode; import org.pegdown.ast.TableNode; import org.pegdown.ast.TableRowNode; import org.pegdown.ast.TextNode; import org.pegdown.ast.VerbatimNode; import org.pegdown.ast.Visitor; import org.pegdown.ast.WikiLinkNode; import com.sector91.delta.script.DScriptContext; import com.sector91.util.A; public class TestExtractorVisitor implements Visitor { private StringBuilder sb = new StringBuilder(); private final List<DocTest> tests = A.list(); private final DScriptContext context; private String file, header, subheader; public TestExtractorVisitor(String file, DScriptContext context) { this.file = file; this.context = context; } public void visit(AbbreviationNode node) {sb.append(node.getExpansion());} public void visit(AutoLinkNode node) {} public void visit(BlockQuoteNode node) {visitChildren(node);} public void visit(BulletListNode node) {visitChildren(node);} public void visit(CodeNode node) {sb.append(node.getText());} public void visit(DefinitionListNode node) {visitChildren(node);} public void visit(DefinitionNode node) {visitChildren(node);} public void visit(DefinitionTermNode node) {visitChildren(node);} public void visit(ExpImageNode node) {visitChildren(node);} public void visit(ExpLinkNode node) {visitChildren(node);} public void visit(HeaderNode node) { if (node.getLevel() == 1) header = extractText(node).trim(); else subheader = extractText(node).trim(); } public void visit(HtmlBlockNode node) {sb.append(node.getText());} public void visit(InlineHtmlNode node) {sb.append(node.getText());} public void visit(ListItemNode node) {visitChildren(node);} public void visit(MailLinkNode node) {} public void visit(OrderedListNode node) {visitChildren(node);} public void visit(ParaNode node) {visitChildren(node);} public void visit(QuotedNode node) {visitChildren(node);} public void visit(ReferenceNode node) {visitChildren(node);} public void visit(RefImageNode node) {visitChildren(node);} public void visit(RefLinkNode node) {visitChildren(node);} public void visit(RootNode node) {visitChildren(node);} public void visit(SimpleNode node) { switch (node.getType()) { case Apostrophe: sb.append('\''); break; case Ellipsis: sb.append("..."); break; case Emdash: sb.append(" -- "); break; case Endash: sb.append("--"); break; case HRule: sb.append("\n---\n"); break; case Linebreak: sb.append("\n"); break; case Nbsp: sb.append(" "); break; default: throw new IllegalStateException(); } } public void visit(SpecialTextNode node) {sb.append(node.getText());} public void visit(TableBodyNode node) {visitChildren(node);} public void visit(TableCaptionNode node) {visitChildren(node);} public void visit(TableCellNode node) {visitChildren(node);} public void visit(TableColumnNode node) {visitChildren(node);} public void visit(TableHeaderNode node) {visitChildren(node);} public void visit(TableNode node) {visitChildren(node);} public void visit(TableRowNode node) {visitChildren(node);} public void visit(VerbatimNode node) { final String text = node.getText(); sb.append(text); if (text.contains(DocTest.ASSERT_PREFIX)) tests.add(new DocTest(file, header, subheader, context, text)); } public void visit(WikiLinkNode node) {sb.append(node.getText());} public void visit(TextNode node) {sb.append(node.getText());} public void visit(SuperNode node) {visitChildren(node);} public void visit(Node node) {throw new UnsupportedOperationException();} public List<DocTest> getTests() {return tests;} private void visitChildren(SuperNode node) { for (Node child : node.getChildren()) child.accept(this); } private String extractText(SuperNode node) { sb = new StringBuilder(); visitChildren(node); return sb.toString(); } public void visit(StrongEmphSuperNode node) {visitChildren(node);} }