package fitnesse.wiki.search; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import fitnesse.components.TraversalListener; import fitnesse.wiki.PathParser; import fitnesse.wiki.WikiPage; import fitnesse.wiki.WikiPageUtil; import fitnesse.wiki.fs.InMemoryPage; import org.junit.Before; import org.junit.Test; public class WhereUsedPageFinderTest implements TraversalListener<WikiPage> { private WikiPage root; private WikiPage pageOne; private WikiPage pageTwo; private WikiPage pageThree; private WikiPage pageTwoChild; private List<WikiPage> hits = new ArrayList<>(); @Override public void process(WikiPage page) { hits.add(page); } @Before public void setUp() throws Exception { root = InMemoryPage.makeRoot("RooT"); pageOne = WikiPageUtil.addPage(root, PathParser.parse("PageOne"), "this is page one, uncle of PageTwo.ChildPage"); pageTwo = WikiPageUtil.addPage(root, PathParser.parse("PageTwo"), "I am Page Two my brother is PageOne. I have a >ChildPage. (and SomeMissingPage)"); pageThree = WikiPageUtil.addPage(root, PathParser.parse("PageThree"), "This is !-PageThree-!, I Have \n!include PageTwo"); pageTwoChild = WikiPageUtil.addPage(pageTwo, PathParser.parse("ChildPage"), "I am Child page, my uncle is .PageOne "); hits.clear(); } @Test public void testFindReferencingPagesOnSiblingAndChild() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageOne, this); whereUsed.search(root); assertEquals(2, hits.size()); assertTrue(hits.contains(pageTwo)); assertTrue(hits.contains(pageTwoChild)); } @Test public void testFindReferencingPagesOnSibling() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageTwo, this); whereUsed.search(root); assertEquals(1, hits.size()); assertEquals(pageThree, hits.get(0)); } @Test public void testFindReferencingPagesNotReferenced() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); whereUsed.search(root); assertEquals(0, hits.size()); } @Test public void testFindReferencingPagesFromChild() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageTwoChild, this); whereUsed.search(root); assertEquals(2, hits.size()); assertTrue(hits.contains(pageOne)); assertTrue(hits.contains(pageTwo)); } @Test public void testObserving() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageOne, this); whereUsed.search(root); assertEquals(2, hits.size()); } @Test public void testOnlyOneReferencePerPage() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); WikiPage newPage = WikiPageUtil.addPage(root, PathParser.parse("NewPage"), "one reference to PageThree. Two reference to PageThree"); whereUsed.search(root); assertEquals(1, hits.size()); assertEquals(newPage, hits.get(0)); } @Test public void testWordsNotFoundInPreprocessedText() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); WikiPageUtil.addPage(root, PathParser.parse("NewPage"), "{{{ PageThree }}}"); whereUsed.search(root); assertEquals(0, hits.size()); } @Test public void testFindReferencingPagesWithLinksWithAlternateText() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); WikiPage newPage = WikiPageUtil.addPage(root, PathParser.parse("NewPage"), "I enjoy being a sibling of [[the third page][PageThree]]"); whereUsed.search(root); assertEquals(1, hits.size()); assertEquals(newPage, hits.get(0)); } @Test public void pleaseMindPagesWithSuffixAreNotFound() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); WikiPage newPage = WikiPageUtil.addPage(root, PathParser.parse("NewPage"), "I enjoy being a sibling of [[the third page][PageThree?edit]]"); whereUsed.search(root); assertEquals(1, hits.size()); assertEquals(newPage, hits.get(0)); } @Test public void testFinderShouldDealWithOtherLinks() throws Exception { WhereUsedPageFinder whereUsed = new WhereUsedPageFinder(pageThree, this); WikiPage newPage = WikiPageUtil.addPage(root, PathParser.parse("NewPage"), "I enjoy being a sibling of [[the third page][http://fitnesse.org]]"); whereUsed.search(root); assertEquals(0, hits.size()); } }