/* documentr - Edit, maintain, and present software documentation on the web. Copyright (C) 2012-2013 Maik Schreiber This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.pegdown; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.parboiled.Parboiled; import org.pegdown.ast.ParaNode; import org.pegdown.ast.RootNode; import org.pegdown.ast.SuperNode; import org.pegdown.ast.TextNode; import de.blizzy.documentr.markdown.MacroNode; import de.blizzy.documentr.markdown.PageHeaderNode; import de.blizzy.documentr.markdown.VerbatimNodeWithType; public class DocumentrParserTest { private PegDownProcessor processor; @Before public void setUp() { DocumentrParser parser = Parboiled.createParser(DocumentrParser.class); processor = new PegDownProcessor(parser); } @Test public void fencedCodeBlock() { RootNode rootNode = parse("~~~java:title 123\nxyz\n~~~"); //$NON-NLS-1$ VerbatimNodeWithType verbatimNode = (VerbatimNodeWithType) rootNode.getChildren().get(0); assertEquals("java", verbatimNode.getType()); //$NON-NLS-1$ assertEquals("title 123", verbatimNode.getTitle()); //$NON-NLS-1$ assertEquals("xyz", verbatimNode.getText().trim()); //$NON-NLS-1$ } @Test public void standaloneMacro() { RootNode rootNode = parse("{{foo/}}"); //$NON-NLS-1$ ParaNode paraNode = (ParaNode) rootNode.getChildren().get(0); SuperNode superNode = (SuperNode) paraNode.getChildren().get(0); MacroNode macroNode = (MacroNode) superNode.getChildren().get(0); assertEquals("foo", macroNode.getMacroName()); //$NON-NLS-1$ assertNull(macroNode.getParams()); } @Test public void standaloneMacroWithParameters() { RootNode rootNode = parse("{{foo bar baz/}}"); //$NON-NLS-1$ ParaNode paraNode = (ParaNode) rootNode.getChildren().get(0); SuperNode superNode = (SuperNode) paraNode.getChildren().get(0); MacroNode macroNode = (MacroNode) superNode.getChildren().get(0); assertEquals("foo", macroNode.getMacroName()); //$NON-NLS-1$ assertEquals("bar baz", macroNode.getParams()); //$NON-NLS-1$ } @Test public void bodyMacro() { RootNode rootNode = parse("{{foo}}xyz{{/foo}}"); //$NON-NLS-1$ ParaNode paraNode = (ParaNode) rootNode.getChildren().get(0); SuperNode superNode = (SuperNode) paraNode.getChildren().get(0); MacroNode macroNode = (MacroNode) superNode.getChildren().get(0); assertEquals("foo", macroNode.getMacroName()); //$NON-NLS-1$ assertNull(macroNode.getParams()); paraNode = (ParaNode) macroNode.getChildren().get(0); superNode = (SuperNode) paraNode.getChildren().get(0); TextNode textNode = (TextNode) superNode.getChildren().get(0); assertEquals("xyz", textNode.getText()); //$NON-NLS-1$ } @Test public void bodyMacroWithParameters() { RootNode rootNode = parse("{{foo bar baz}}xyz{{/foo}}"); //$NON-NLS-1$ ParaNode paraNode = (ParaNode) rootNode.getChildren().get(0); SuperNode superNode = (SuperNode) paraNode.getChildren().get(0); MacroNode macroNode = (MacroNode) superNode.getChildren().get(0); assertEquals("foo", macroNode.getMacroName()); //$NON-NLS-1$ assertEquals("bar baz", macroNode.getParams()); //$NON-NLS-1$ paraNode = (ParaNode) macroNode.getChildren().get(0); superNode = (SuperNode) paraNode.getChildren().get(0); TextNode textNode = (TextNode) superNode.getChildren().get(0); assertEquals("xyz", textNode.getText()); //$NON-NLS-1$ } @Test public void pageHeader() { RootNode rootNode = parse("{{:header:}}xyz{{:/header:}}"); //$NON-NLS-1$ ParaNode paraNode = (ParaNode) rootNode.getChildren().get(0); SuperNode superNode = (SuperNode) paraNode.getChildren().get(0); PageHeaderNode headerNode = (PageHeaderNode) superNode.getChildren().get(0); paraNode = (ParaNode) headerNode.getChildren().get(0); superNode = (SuperNode) paraNode.getChildren().get(0); TextNode textNode = (TextNode) superNode.getChildren().get(0); assertEquals("xyz", textNode.getText()); //$NON-NLS-1$ } private RootNode parse(String markdown) { return processor.parseMarkdown(markdown.toCharArray()); } }