package fitnesse.wikitext.test;
import fitnesse.wiki.*;
import fitnesse.wikitext.parser.WikiWord;
import fitnesse.wikitext.parser.WikiWordBuilder;
import fitnesse.wikitext.parser.WikiWordPath;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class WikiWordTest {
private TestRoot root;
private WikiPage pageOne;
private WikiPage pageOneTwo;
private WikiPage pageOneTwoThree;
private WikiPage pageOneThree;
private WikiPage root2;
private PageCrawler crawler;
@Before
public void setUp() throws Exception {
root = new TestRoot();
pageOne = root.makePage("PageOne");
pageOneTwo = root.makePage(pageOne, "PageOne2");
pageOneTwoThree = root.makePage(pageOneTwo, "PageThree");
pageOneThree = root.makePage(pageOne, "PageThree");
root2 = InMemoryPage.makeRoot("RooT");
crawler = root2.getPageCrawler();
}
@Test
public void translatesWikiWords() throws Exception {
ParserTestHelper.assertTranslatesTo(pageOne, "PageOne", wikiLink("PageOne", "PageOne"));
ParserTestHelper.assertTranslatesTo(pageOneTwo, "PageOne2", wikiLink("PageOne.PageOne2", "PageOne2"));
ParserTestHelper.assertTranslatesTo(pageOneThree, ".PageOne", wikiLink("PageOne", ".PageOne"));
ParserTestHelper.assertTranslatesTo(pageOne, ">PageOne2", wikiLink("PageOne.PageOne2", ">PageOne2"));
ParserTestHelper.assertTranslatesTo(pageOneTwoThree, "<PageOne", wikiLink("PageOne", "<PageOne"));
}
@Test
public void translatesMissingWikiWords() throws Exception {
ParserTestHelper.assertTranslatesTo(pageOne, "PageNine",
"PageNine<a title=\"create page\" href=\"PageNine?edit&nonExistent=true\">[?]</a>");
}
@Test
public void regracesWikiWords() throws Exception {
root.setPageData(pageOne, "!define " + WikiWord.REGRACE_LINK + " {true}\nPageOne\n!define " + WikiWord.REGRACE_LINK + " {false}\n");
assertTrue(ParserTestHelper.translateTo(pageOne).indexOf(wikiLink("PageOne", "Page One")) >= 0);
}
@Test
public void testIsSingleWikiWord() throws Exception {
assertTrue(WikiWordPath.isSingleWikiWord("WikiWord"));
assertFalse(WikiWordPath.isSingleWikiWord("notWikiWord"));
assertFalse(WikiWordPath.isSingleWikiWord("NotSingle.WikiWord"));
}
@Test
public void testIsWikiWord() throws Exception {
assertEquals(true, WikiWordPath.isWikiWord("HelloThere"));
assertEquals(false, WikiWordPath.isWikiWord("not.a.wiki.word"));
}
@Test
public void testBackwardSearchWidget() throws Exception {
//todo: use TestRoot
WikiPage top = addPage(root2, "TopPage");
WikiPage target = addPage(top, "TargetPage");
WikiPage referer = addPage(target, "ReferingPage");
@SuppressWarnings("unused")
WikiPage subTarget = addPage(target, "SubTarget");
String actual = WikiWordBuilder.expandPrefix(referer, "<TargetPage.SubTarget");
assertEquals(".TopPage.TargetPage.SubTarget", actual);
actual = WikiWordBuilder.expandPrefix(referer, "<NoSuchPage");
assertEquals(".NoSuchPage", actual);
PageData data = referer.getData();
data.setContent("<TargetPage.SubTarget");
referer.commit(data);
String renderedLink = referer.getData().getHtml();
assertEquals("<a href=\"TopPage.TargetPage.SubTarget\"><TargetPage.SubTarget</a>", renderedLink);
}
private WikiPage addPage(WikiPage parent, String childName) throws Exception {
return crawler.addPage(parent, PathParser.parse(childName));
}
private String wikiLink(String link, String text) {
return "<a href=\"" + link + "\">" + text + "</a>";
}
}