package fitnesse.wiki.fs; import fitnesse.ConfigurationParameter; import fitnesse.wiki.PathParser; import fitnesse.wiki.SystemVariableSource; import fitnesse.wiki.VersionInfo; import fitnesse.wiki.WikiPage; import org.junit.Before; import org.junit.Test; import java.io.File; import java.util.Collection; import java.util.HashSet; import java.util.Properties; import static org.junit.Assert.assertEquals; public class FileSystemPageFactoryTest { private FileSystem fileSystem; private FileSystemPageFactory fileSystemPageFactory; private WikiPage rootPage; @Before public void SetUp() throws Exception { fileSystem = new MemoryFileSystem(); fileSystemPageFactory = new FileSystemPageFactory(fileSystem, new ZipFileVersionsController()); fileSystem.makeFile(new File("./somepath/content.txt"), ""); rootPage = fileSystemPageFactory.makePage(new File("./somepath"), "somepath", null, new SystemVariableSource()); } @Test public void DirectoryOfHtmlFilesIsExternalSuitePage() throws Exception { fileSystem.makeFile(new File("./somepath/ExternalSuite/myfile.html"), "stuff"); WikiPage page = rootPage.addChildPage("ExternalSuite"); assertEquals(ExternalSuitePage.class, page.getClass()); } @Test public void DirectoryOfDirectoryOfHtmlFilesIsExternalSuitePage() throws Exception { fileSystem.makeFile(new File("./somepath/ExternalSuite/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.addChildPage("ExternalSuite"); assertEquals(ExternalSuitePage.class, page.getClass()); } @Test public void DirectoryWithoutHtmlFilesIsWikiFilePage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage/myfile.txt"), "stuff"); fileSystem.makeFile(new File("./somepath/OtherPage/myfile.html"), "stuff"); WikiPage page = rootPage.addChildPage("WikiPage"); assertEquals(WikiFilePage.class, page.getClass()); } @Test public void DirectoryWithContentIsFileSystemPage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage/content.txt"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.addChildPage("WikiPage"); assertEquals(FileSystemPage.class, page.getClass()); } @Test public void FileWithWikiExtensionIsNewFileSystemPage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage.wiki"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.addChildPage("WikiPage"); assertEquals(WikiFilePage.class, page.getClass()); } @Test public void NestedWikiFileIsNewFileSystemPage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage/content.txt"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite.wiki"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.getPageCrawler().getPage(PathParser.parse("WikiPage.subsuite")); assertEquals(WikiFilePage.class, page.getClass()); } @Test public void NestedWikiFileInOldStyleDirectoryIsNewFileSystemPage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage.wiki"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite.wiki"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.getPageCrawler().getPage(PathParser.parse("WikiPage.subsuite")); assertEquals(WikiFilePage.class, page.getClass()); } @Test public void OldStyleDirectoryInNestedWikiFileIsFileSystemPage() throws Exception { fileSystem.makeFile(new File("./somepath/WikiPage.wiki"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/SubPage/content.txt"), "stuff"); fileSystem.makeFile(new File("./somepath/WikiPage/SubPage/subsuite/myfile.html"), "stuff"); WikiPage page = rootPage.getPageCrawler().getPage(PathParser.parse("WikiPage.SubPage")); assertEquals(FileSystemPage.class, page.getClass()); } @Test public void HtmlFileIsExternalSuitePageChild() throws Exception { fileSystem.makeFile(new File("./somepath/ExternalSuite/myfile.html"), "stuff"); ExternalSuitePage page = (ExternalSuitePage) rootPage.addChildPage("ExternalSuite"); WikiPage child = page.getChildren().get(0); assertEquals(ExternalTestPage.class, child.getClass()); assertEquals("myfile", child.getName()); } @Test public void DirectoryOfHtmlFilesIsExternalSuitePageChild() throws Exception { fileSystem.makeFile(new File("./somepath/ExternalSuite/subsuite/myfile.html"), "stuff"); ExternalSuitePage page = (ExternalSuitePage) rootPage.addChildPage("ExternalSuite"); WikiPage child = page.getChildren().get(0); assertEquals(ExternalSuitePage.class, child.getClass()); assertEquals("subsuite", child.getName()); } @Test public void testShouldUseZipFileRevisionControllerAsDefault() throws Exception { VersionsController defaultRevisionController = fileSystemPageFactory.getVersionsController(); assertEquals(ZipFileVersionsController.class, defaultRevisionController.getClass()); } @Test public void testShouldUseSpecifiedRevisionController() throws Exception { Properties testProperties = new Properties(); testProperties.setProperty(ConfigurationParameter.VERSIONS_CONTROLLER_CLASS.getKey(), NullVersionsController.class.getName()); fileSystemPageFactory = new FileSystemPageFactory(testProperties); VersionsController defaultRevisionController = fileSystemPageFactory.getVersionsController(); assertEquals(NullVersionsController.class, defaultRevisionController.getClass()); } @Test public void testShouldUseSpecifiedRevisionControllerWithHistoryDepth() throws Exception { Properties testProperties = new Properties(); testProperties.setProperty(ConfigurationParameter.VERSIONS_CONTROLLER_CLASS.getKey(), NullVersionsController.class.getName()); testProperties.setProperty(ConfigurationParameter.VERSIONS_CONTROLLER_DAYS.getKey(), "42"); fileSystemPageFactory = new FileSystemPageFactory(testProperties); VersionsController defaultRevisionController = fileSystemPageFactory.getVersionsController(); assertEquals(NullVersionsController.class, defaultRevisionController.getClass()); assertEquals(42, ((NullVersionsController) defaultRevisionController).getHistoryDepth()); } public static class NullVersionsController implements VersionsController { private final int historyDepth; public NullVersionsController(Properties properties) { historyDepth = Integer.valueOf(properties.getProperty(ConfigurationParameter.VERSIONS_CONTROLLER_DAYS.getKey(), "0")); } public int getHistoryDepth() { return historyDepth; } @Override public FileVersion[] getRevisionData(final String label, final File... files) { return null; } @Override public Collection<VersionInfo> history(final File... files) { return new HashSet<>(); } @Override public VersionInfo makeVersion(final FileVersion... fileVersions) { return null; } @Override public VersionInfo addDirectory(FileVersion filePath) { return null; } @Override public void rename(FileVersion fileVersion, File originalFile) { } @Override public void delete(File... files) { } } }