package fitnesse.components;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPageProperties;
public class TitleWikiPageFinderTest implements TraversalListener<WikiPage> {
WikiPage root;
private WikiPage pageTwo;
private List<WikiPage> hits = new ArrayList<WikiPage>();
private PageCrawler crawler;
private TitleWikiPageFinder searcher;
public void process(WikiPage page) {
hits.add(page);
}
@Before
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
crawler.addPage(root, PathParser.parse("PageOne"), "has PageOne content");
crawler.addPage(root, PathParser.parse("PageOne.PageOneChild"), "PageChild is a child of PageOne");
pageTwo = crawler.addPage(root, PathParser.parse("PageTwo"), "PageTwo has a bit of content too\n^PageOneChild");
PageData data = pageTwo.getData();
data.setAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://localhost:" + FitNesseUtil.port + "/PageOne");
pageTwo.commit(data);
hits.clear();
}
@Test
public void titleSearch() throws Exception {
searcher = new TitleWikiPageFinder("one", this);
hits.clear();
searcher.search(root);
assertPagesFound("PageOne", "PageOneChild");
}
private void assertPagesFound(String... pageNames) throws Exception {
assertEquals(pageNames.length, hits.size());
List<String> pageNameList = Arrays.asList(pageNames);
for (WikiPage page: hits) {
assertTrue(pageNameList.contains(page.getName()));
}
}
}