// 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.io.File; import java.util.List; import junit.framework.TestCase; import util.FileUtil; public class BaseWikiPageTest extends TestCase { private WikiPage linkingPage; public void setUp() throws Exception { BaseWikiPage root = (BaseWikiPage) InMemoryPage.makeRoot("RooT"); root.addChildPage("LinkedPage"); linkingPage = root.addChildPage("LinkingPage"); linkingPage.addChildPage("ChildPage"); } public void tearDown() throws Exception { FileUtil.deleteFileSystemDirectory("testDir"); } public void testGetChildrenUsesSymbolicPages() throws Exception { createLink("LinkedPage"); List<WikiPage> children = linkingPage.getChildren(); assertEquals(2, children.size()); assertEquals("ChildPage", children.get(0).getName()); checkSymbolicPage(children.get(1)); } public void testGetChildUsesSymbolicPages() throws Exception { createLink("LinkedPage"); checkSymbolicPage(linkingPage.getChildPage("SymLink")); } public void testCanCreateSymLinksToExternalDirectories() throws Exception { FileUtil.createDir("testDir"); FileUtil.createDir("testDir/ExternalRoot"); createLink("file://testDir/ExternalRoot"); checkExternalLink(); } private void checkExternalLink() throws Exception { WikiPage symPage = linkingPage.getChildPage("SymLink"); assertNotNull(symPage); assertEquals(SymbolicPage.class, symPage.getClass()); WikiPage realPage = ((SymbolicPage) symPage).getRealPage(); assertEquals(FileSystemPage.class, realPage.getClass()); assertEquals("testDir/ExternalRoot", ((FileSystemPage) realPage).getFileSystemPath()); assertEquals("ExternalRoot", ((FileSystemPage) realPage).getName()); } public void testExternalSymbolicLinkToNewDirectory() throws Exception { FileUtil.createDir("testDir"); createLink("file://testDir/ExternalRoot"); checkExternalLink(); assertTrue(new File("testDir/ExternalRoot").exists()); } private void createLink(String linkedPagePath) throws Exception { PageData data = linkingPage.getData(); WikiPageProperties properties = data.getProperties(); properties.set(SymbolicPage.PROPERTY_NAME); properties.getProperty(SymbolicPage.PROPERTY_NAME).set("SymLink", linkedPagePath); linkingPage.commit(data); } private void checkSymbolicPage(Object page) throws Exception { assertEquals(SymbolicPage.class, page.getClass()); SymbolicPage symPage = (SymbolicPage) page; assertEquals("SymLink", symPage.getName()); assertEquals("LinkedPage", symPage.getRealPage().getName()); } }