// 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.responders;
import fitnesse.Responder;
import fitnesse.http.MockRequest;
import fitnesse.responders.editing.*;
import fitnesse.responders.files.*;
import fitnesse.responders.refactoring.*;
import fitnesse.responders.run.*;
import fitnesse.responders.search.*;
import fitnesse.responders.testHistory.HistoryComparerResponder;
import fitnesse.responders.testHistory.PageHistoryResponder;
import fitnesse.responders.testHistory.PurgeHistoryResponder;
import fitnesse.responders.testHistory.TestHistoryResponder;
import fitnesse.responders.versions.RollbackResponder;
import fitnesse.responders.versions.VersionResponder;
import fitnesse.responders.versions.VersionSelectionResponder;
import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.*;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import util.FileUtil;
import java.io.File;
public class ResponderFactoryTest {
private ResponderFactory factory;
private MockRequest request;
private WikiPageDummy nonExistantPage;
private WikiPage root;
private PageCrawler crawler;
@Before
public void setUp() throws Exception {
factory = new ResponderFactory("testDir");
request = new MockRequest();
root = InMemoryPage.makeRoot("root");
crawler = root.getPageCrawler();
nonExistantPage = new WikiPageDummy();
}
@Test
public void testGetResponderKey() throws Exception {
checkResponderKey("railroad", "railroad");
checkResponderKey("responder=railroad", "railroad");
checkResponderKey("", "");
}
private void checkResponderKey(String queryString, String key) {
MockRequest request = new MockRequest();
request.setQueryString(queryString);
assertEquals(key, factory.getResponderKey(request));
}
@Test
public void testWikiPageResponder() throws Exception {
request.setResource("SomePage");
assertResponderType(WikiPageResponder.class, root);
request.setResource("");
assertResponderType(WikiPageResponder.class, root);
request.setResource("root");
assertResponderType(WikiPageResponder.class, root);
}
@Test
public void testRefactorPageResponder() throws Exception {
assertResponderTypeMatchesInput("refactor", RefactorPageResponder.class);
}
@Test
public void testDeletePageResponder() throws Exception {
assertResponderTypeMatchesInput("deletePage", DeletePageResponder.class);
}
@Test
public void testRenamePageResponder() throws Exception {
assertResponderTypeMatchesInput("renamePage", RenamePageResponder.class);
}
@Test
public void testEditResponder() throws Exception {
request.addInput("responder", "edit");
request.setResource("SomePage");
assertResponderType(EditResponder.class, root);
assertResponderType(EditResponder.class, nonExistantPage);
}
@Test
public void testPageDataResponder() throws Exception {
request.addInput("responder", "pageData");
request.setResource("SomePage");
assertResponderType(PageDataWikiPageResponder.class, root);
}
@Test
public void testSaveResponder() throws Exception {
assertResponderTypeMatchesInput("saveData", SaveResponder.class);
}
@Test
public void testTestResponder() throws Exception {
assertResponderTypeMatchesInput("test", TestResponder.class);
}
@Test
public void testSuiteResponder() throws Exception {
assertResponderTypeMatchesInput("suite", SuiteResponder.class);
}
@Test
public void testFileResponder() throws Exception {
try {
new File("testDir").mkdir();
new File("testDir/files").mkdir();
FileUtil.createFile("testDir/files/someFile", "this is a test");
request.setResource("files/someFile");
assertResponderType(FileResponder.class, nonExistantPage);
} finally {
FileUtil.deleteFileSystemDirectory("testDir");
}
}
@Test
public void testSearchFormResponder() throws Exception {
assertResponderTypeMatchesInput("searchForm", SearchFormResponder.class);
}
@Test
public void testSearchResponder() throws Exception {
assertResponderTypeMatchesInput("search", SearchResponder.class);
}
@Test
public void testSerializedPageResponder() throws Exception {
assertResponderTypeMatchesInput("proxy", SerializedPageResponder.class);
}
@Test
public void testVersionSelectionResponder() throws Exception {
assertResponderTypeMatchesInput("versions", VersionSelectionResponder.class);
}
@Test
public void testVersionResponder() throws Exception {
assertResponderTypeMatchesInput("viewVersion", VersionResponder.class);
}
@Test
public void testRollbackResponder() throws Exception {
assertResponderTypeMatchesInput("rollback", RollbackResponder.class);
}
@Test
public void testNameReponder() throws Exception {
assertResponderTypeMatchesInput("names", NameWikiPageResponder.class);
}
@Test
public void testUploadResponder() throws Exception {
assertResponderTypeMatchesInput("upload", UploadResponder.class);
}
@Test
public void testCreateDirectoryResponder() throws Exception {
assertResponderTypeMatchesInput("createDir", CreateDirectoryResponder.class);
}
@Test
public void testDeleteFileResponder() throws Exception {
assertResponderTypeMatchesInput("deleteFile", DeleteFileResponder.class);
}
@Test
public void testRenameFileResponder() throws Exception {
assertResponderTypeMatchesInput("renameFile", RenameFileResponder.class);
}
@Test
public void testDeleteConfirmationFileResponder() throws Exception {
assertResponderTypeMatchesInput("deleteConfirmation", DeleteConfirmationResponder.class);
}
@Test
public void testRenameFileConfirmationResponder() throws Exception {
assertResponderTypeMatchesInput("renameConfirmation", RenameFileConfirmationResponder.class);
}
@Test
public void testCreatePropertiesResponder() throws Exception {
assertResponderTypeMatchesInput("properties", PropertiesResponder.class);
}
@Test
public void testCreateSavePropertiesResponder() throws Exception {
assertResponderTypeMatchesInput("saveProperties", SavePropertiesResponder.class);
}
@Test
public void testCreateExecuteSearchPropertiesResponder() throws Exception {
assertResponderTypeMatchesInput("executeSearchProperties", ExecuteSearchPropertiesResponder.class);
}
@Test
public void testCreateWhereUsedResponder() throws Exception {
assertResponderTypeMatchesInput("whereUsed", WhereUsedResponder.class);
}
@Test
public void testCreateMovePageResponer() throws Exception {
assertResponderTypeMatchesInput("movePage", MovePageResponder.class);
}
@Test
public void testSocketCatcher() throws Exception {
assertResponderTypeMatchesInput("socketCatcher", SocketCatchingResponder.class);
}
@Test
public void testFitClient() throws Exception {
assertResponderTypeMatchesInput("fitClient", FitClientResponder.class);
}
@Test
public void testRawContent() throws Exception {
assertResponderTypeMatchesInput("raw", RawContentResponder.class);
}
@Test
public void testRssResponder() throws Exception {
assertResponderTypeMatchesInput("rss", RssResponder.class);
}
@Test
public void testPageImporterResponder() throws Exception {
assertResponderTypeMatchesInput("import", WikiImportingResponder.class);
}
@Test
public void testShutdownResponder() throws Exception {
assertResponderTypeMatchesInput("shutdown", ShutdownResponder.class);
}
@Test
public void testTestResultFormattingResponder() throws Exception {
assertResponderTypeMatchesInput("format", TestResultFormattingResponder.class);
}
@Test
public void testSymbolicLinkResponder() throws Exception {
assertResponderTypeMatchesInput("symlink", SymbolicLinkResponder.class);
}
@Test
public void testPacketResponder() throws Exception {
assertResponderTypeMatchesInput("packet", PacketResponder.class);
}
@Test
public void testStopTestResponder() throws Exception {
assertResponderTypeMatchesInput("stoptest", StopTestResponder.class);
}
@Test
public void testReplaceResponder() throws Exception {
assertResponderTypeMatchesInput("replace", SearchReplaceResponder.class);
}
@Test
public void testWillDisplayVirtualPages() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page1 = crawler.addPage(root, PathParser.parse("PageOne"));
crawler.addPage(page1, PathParser.parse("ChildOne"), "child content");
WikiPage page2 = crawler.addPage(root, PathParser.parse("PageTwo"));
FitNesseUtil.bindVirtualLinkToPage(page2, page1);
request.setResource("PageTwo.ChildOne");
assertResponderType(WikiPageResponder.class, root);
}
@Test
public void testNotFoundResponder() throws Exception {
request.setResource("somepage");
assertResponderType(NotFoundResponder.class, root);
}
@Test
public void testAddingResponders() throws Exception {
factory.addResponder("custom", WikiPageResponder.class);
assertResponderTypeMatchesInput("custom", WikiPageResponder.class);
}
private void assertResponderType(Class<?> expectedClass, WikiPage page) throws Exception {
Responder responder = factory.makeResponder(request, page);
assertEquals(expectedClass, responder.getClass());
}
private void assertResponderTypeMatchesInput(String responderType, Class<?> responderClass) throws Exception {
request.addInput("responder", responderType);
assertResponderType(responderClass, root);
}
@Test
public void testTestHistoryResponder() throws Exception {
assertResponderTypeMatchesInput("testHistory", TestHistoryResponder.class);
}
@Test
public void testPageHistoryResponder() throws Exception {
assertResponderTypeMatchesInput("pageHistory", PageHistoryResponder.class);
}
@Test
public void testAddChildPageResponder() throws Exception {
assertResponderTypeMatchesInput("addChild", AddChildPageResponder.class);
}
@Test
public void testPurgeHistoryResponder() throws Exception {
assertResponderTypeMatchesInput("purgeHistory", PurgeHistoryResponder.class);
}
@Test
public void testHistoryComparerResponder() throws Exception {
assertResponderTypeMatchesInput("compareHistory", HistoryComparerResponder.class);
}
}