// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved. // Released under the terms of the CPL Common Public License version 1.0. package fitnesse.wiki; import java.util.List; import junit.framework.TestCase; import fitnesse.testutil.FitNesseUtil; import fitnesse.testutil.SimpleCachinePage; public class VirtualCouplingExtensionTest extends TestCase { public WikiPage root; public BaseWikiPage page1; public WikiPage page2; private PageCrawler crawler; @Override public void setUp() throws Exception { root = InMemoryPage.makeRoot("RooT"); crawler = root.getPageCrawler(); FitNesseUtil.startFitnesse(root); page2 = crawler.addPage(root, PathParser.parse("PageTwo"), "page two"); crawler.addPage(page2, PathParser.parse("PageTwoChild"), "page two child"); page1 = (BaseWikiPage) crawler.addPage(root, PathParser.parse("PageOne"), "page one content\n!contents\n"); crawler.addPage(page1, PathParser.parse("SomeOtherPage"), "some other page"); setVirtualWiki(page1, "http://localhost:" + FitNesseUtil.port + "/PageTwo"); } public static void setVirtualWiki(WikiPage page, String virtualWikiURL) throws Exception { PageData data = page.getData(); data.setAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, virtualWikiURL); page.commit(data); } @Override public void tearDown() throws Exception { FitNesseUtil.stopFitnesse(); } public void testGetChildren() throws Exception { List<?> children = page1.getChildren(); assertEquals(1, children.size()); assertEquals("SomeOtherPage", ((WikiPage) children.get(0)).getName()); VirtualCouplingExtension extension = (VirtualCouplingExtension) page1.getExtension(VirtualCouplingExtension.NAME); children = extension.getVirtualCoupling().getChildren(); assertEquals(1, children.size()); assertTrue(children.get(0) instanceof ProxyPage); assertEquals("PageTwoChild", ((WikiPage) children.get(0)).getName()); } public void testNewProxyChildrenAreFound() throws Exception { CachingPage.cacheTime = 0; BaseWikiPage realChild = (BaseWikiPage) page2.getChildPage("PageTwoChild"); PageCrawler crawler = page2.getPageCrawler(); crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler()); ProxyPage childProxy = (ProxyPage) crawler.getPage(page1, PathParser.parse("PageTwoChild")); assertNull(childProxy.getChildPage("AnotherChild")); crawler.addPage(realChild, PathParser.parse("AnotherChild"), "another child"); assertNotNull(childProxy.getChildPage("AnotherChild")); } public void testProxyChildrenAreFoundOnStartUp() throws Exception { WikiPage page3 = crawler.addPage(root, PathParser.parse("PageThree"), "page three content"); setVirtualWiki(page3, "http://localhost:" + FitNesseUtil.port + "/PageTwo"); assertTrue(page3.hasExtension(VirtualCouplingExtension.NAME)); VirtualCouplingExtension extension = (VirtualCouplingExtension) page3.getExtension(VirtualCouplingExtension.NAME); List<?> children = extension.getVirtualCoupling().getChildren(); assertEquals(1, children.size()); assertEquals("PageTwoChild", ((WikiPage) children.get(0)).getName()); } public void testGetChildrenOnlyAsksOnce() throws Exception { CachingPage.cacheTime = 10000; ProxyPage.retrievalCount = 0; SimpleCachinePage page = new SimpleCachinePage("RooT", null); setVirtualWiki(page, "http://localhost:" + FitNesseUtil.port + "/PageTwo"); VirtualCouplingExtension extension = (VirtualCouplingExtension) page.getExtension(VirtualCouplingExtension.NAME); extension.getVirtualCoupling().getChildren(); assertEquals(1, ProxyPage.retrievalCount); } public void testNoNastyExceptionIsThrownWhenVirutalChildrenAreLoaded() throws Exception { WikiPage page3 = crawler.addPage(root, PathParser.parse("PageThree"), "page three content"); setVirtualWiki(page3, "http://google.com/SomePage"); VirtualCouplingExtension extension = (VirtualCouplingExtension) page3.getExtension(VirtualCouplingExtension.NAME); extension.getVirtualCoupling().getChildren(); assertNotNull(page3.getChildPage("VirtualWikiNetworkError")); } }