package fitnesse.wikitext.test;
import fitnesse.html.HtmlElement;
import fitnesse.wiki.WikiPage;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class ContentsTest {
@Test public void scansContents() {
ParserTestHelper.assertScansTokenType("!contents", "Contents", true);
ParserTestHelper.assertScansTokenType(" !contents", "Contents", false);
ParserTestHelper.assertScansTokenType("!note !contents", "Contents", true);
ParserTestHelper.assertScansTokenType("| !contents|\n", "Contents", true);
}
@Test public void parsesContents() throws Exception {
ParserTestHelper.assertParses("!contents -f -g", "SymbolList[Contents[Text, Text]]");
ParserTestHelper.assertParses("!contents hi", "SymbolList[Text, Whitespace, Text]");
ParserTestHelper.assertParses("!contents ]", "SymbolList[Text, Whitespace, CloseBracket]");
}
@Test public void translatesContents() throws Exception {
WikiPage pageOne = makePages();
ParserTestHelper.assertTranslatesTo(pageOne, "!contents",
contentsWithPages("PageThree", "PageTwo", ""));
}
@Test public void translatesContentsInInclude() throws Exception {
WikiPage pageOne = makePages();
assertContains(ParserTestHelper.translateTo(pageOne, "!include >PageTwo"),
contentsWithPages("PageThree", "PageTwo", ""));
}
@Test public void translatesRecursiveContents() throws Exception {
WikiPage pageOne = makePages();
ParserTestHelper.assertTranslatesTo(pageOne, "!contents -R",
contentsWithPages("PageThree", "PageTwo",
nestedContents("\t\t\t\t", "2", "<a href=\"PageOne.PageTwo.PageTwoChild\">PageTwoChild</a>",
nestedContents("\t\t\t\t\t\t\t\t", "3", "<a href=\"PageOne.PageTwo.PageTwoChild.PageTwoGrandChild\">PageTwoGrandChild</a>", ""))));
}
@Test public void translatesRecursiveContentsToLevel() throws Exception {
WikiPage pageOne = makePages();
ParserTestHelper.assertTranslatesTo(pageOne, "!contents -R2",
contentsWithPages("PageThree", "PageTwo",
nestedContents("\t\t\t\t", "2", "<a href=\"PageOne.PageTwo.PageTwoChild\">PageTwoChild ...</a>", "")));
}
@Test public void translatesContentsWithInvalidRecursionLimit() throws Exception {
WikiPage pageOne = makePages();
ParserTestHelper.assertTranslatesTo(pageOne, "!contents -Rx",
contentsWithPages("PageThree", "PageTwo", ""));
}
private WikiPage makePages() throws Exception {
TestRoot root = new TestRoot();
WikiPage pageOne = root.makePage("PageOne");
WikiPage pageTwo = root.makePage(pageOne, "PageTwo", "!contents");
WikiPage pageTwoChild = root.makePage(pageTwo, "PageTwoChild");
root.makePage(pageTwoChild, "PageTwoGrandChild");
root.makePage(pageOne, "PageThree");
return pageOne;
}
private String contentsWithPages(String name1, String name2, String nested) {
return "<div class=\"toc1\">" + HtmlElement.endl +
"\t<div class=\"contents\">" + HtmlElement.endl +
"\t\t<b>Contents:</b>" + HtmlElement.endl +
"\t\t<ul>" + HtmlElement.endl +
"\t\t\t<li>" + HtmlElement.endl +
"\t\t\t\t<a href=\"PageOne.PageThree\">" + name1 + "</a>" + HtmlElement.endl +
"\t\t\t</li>" + HtmlElement.endl +
"\t\t\t<li>" + HtmlElement.endl +
"\t\t\t\t<a href=\"PageOne.PageTwo\">" + name2 + "</a>" + HtmlElement.endl + nested +
"\t\t\t</li>" + HtmlElement.endl +
"\t\t</ul>" + HtmlElement.endl +
"\t</div>" + HtmlElement.endl +
"</div>" + HtmlElement.endl;
}
private String nestedContents(String indent, String level, String pageReference, String nested) {
return
indent + "<div class=\"toc" + level + "\">" + HtmlElement.endl +
indent + "\t<div class=\"nested-contents\">" + HtmlElement.endl +
indent + "\t\t<ul>" + HtmlElement.endl +
indent + "\t\t\t<li>" + HtmlElement.endl +
indent + "\t\t\t\t" + pageReference + HtmlElement.endl + nested +
indent + "\t\t\t</li>" + HtmlElement.endl +
indent + "\t\t</ul>" + HtmlElement.endl +
indent + "\t</div>" + HtmlElement.endl +
indent + "</div>" + HtmlElement.endl;
}
private void assertContains(String result, String substring) {
assertTrue(result, result.indexOf(substring) >= 0);
}
}