package fitnesse.components;
import java.util.ArrayList;
import java.util.List;
import util.RegexTestCase;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
public class WhereUsedPageFinderTest extends RegexTestCase implements TraversalListener<WikiPage> {
private WikiPage root;
private InMemoryPage pageOne;
private WikiPage pageTwo;
private WikiPage pageThree;
private WhereUsedPageFinder whereUsed;
private List<WikiPage> hits = new ArrayList<WikiPage>();
private PageCrawler crawler;
public void process(WikiPage page) {
hits.add(page);
}
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
pageOne = (InMemoryPage) crawler.addPage(root, PathParser.parse("PageOne"), "this is page one ^ChildPage");
pageTwo = crawler.addPage(root, PathParser.parse("PageTwo"), "I am Page Two my brother is PageOne . SomeMissingPage");
pageThree = crawler.addPage(root, PathParser.parse("PageThree"), "This is !-PageThree-!, I Have \n!include PageTwo");
crawler.addPage(pageTwo, PathParser.parse("ChildPage"), "I will be a virtual page to .PageOne ");
whereUsed = new WhereUsedPageFinder(root, this);
hits.clear();
}
public void testFindReferencingPages() throws Exception {
whereUsed = new WhereUsedPageFinder(pageOne, this);
List<WikiPage> resultList = whereUsed.search(root);
assertEquals(2, resultList.size());
assertEquals(pageTwo, resultList.get(0));
whereUsed = new WhereUsedPageFinder(pageTwo, this);
resultList = whereUsed.search(root);
assertEquals(1, resultList.size());
whereUsed = new WhereUsedPageFinder(pageThree, this);
resultList = whereUsed.search(root);
assertEquals(0, resultList.size());
}
public void testObserving() throws Exception {
whereUsed = new WhereUsedPageFinder(pageOne, this);
whereUsed.search(root);
assertEquals(2, hits.size());
}
public void testOnlyOneReferencePerPage() throws Exception {
whereUsed = new WhereUsedPageFinder(pageThree, this);
WikiPage newPage = crawler.addPage(root, PathParser.parse("NewPage"), "one reference to PageThree. Two reference to PageThree");
List<WikiPage> resultList = whereUsed.search(root);
assertEquals(1, resultList.size());
assertEquals(newPage, resultList.get(0));
}
public void testWordsNotFoundInPreprocessedText() throws Exception {
crawler.addPage(root, PathParser.parse("NewPage"), "{{{ PageThree }}}");
List<WikiPage> resultList = whereUsed.search(pageThree);
assertEquals(0, resultList.size());
}
public void testDontLookForReferencesInVirtualPages() throws Exception {
FitNesseUtil.bindVirtualLinkToPage(pageOne, pageTwo);
whereUsed = new WhereUsedPageFinder(pageOne, this);
whereUsed.search(pageOne);
assertEquals(0, hits.size());
}
}