// 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 java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import util.FileUtil;
import util.RegexTestCase;
import fitnesse.FitNesseContext;
import fitnesse.Responder;
import fitnesse.http.MockRequest;
import fitnesse.http.SimpleResponse;
import fitnesse.wiki.FileSystemPage;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.ProxyPage;
import fitnesse.wiki.SymbolicPage;
import fitnesse.wiki.VersionInfo;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPageProperties;
import fitnesse.wiki.WikiPageProperty;
public class SerializedPageResponderTest extends RegexTestCase {
private final String RootPath = "TestRooT";
private PageCrawler crawler;
private WikiPage root;
private MockRequest request;
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
request = new MockRequest();
}
public void tearDown() throws Exception {
FileUtil.deleteFileSystemDirectory(RootPath);
}
public void testWithInMemory() throws Exception {
Object obj = doSetUpWith(root, "bones");
doTestWith(obj);
}
public void testWithFileSystem() throws Exception {
root = new FileSystemPage(".", RootPath);
Object obj = doSetUpWith(root, "bones");
FileUtil.deleteFileSystemDirectory(RootPath);
doTestWith(obj);
}
private void doTestWith(Object obj) throws Exception {
assertNotNull(obj);
assertEquals(true, obj instanceof ProxyPage);
WikiPage page = (WikiPage) obj;
assertEquals("PageOne", page.getName());
}
private Object doSetUpWith(WikiPage root, String proxyType) throws Exception {
WikiPage page1 = crawler.addPage(root, PathParser.parse("PageOne"), "this is page one");
PageData data = page1.getData();
data.setAttribute("Attr1", "true");
page1.commit(data);
crawler.addPage(page1, PathParser.parse("ChildOne"), "this is child one");
request.addInput("type", proxyType);
request.setResource("PageOne");
return getObject(root, request);
}
private Object getObject(WikiPage root, MockRequest request) throws Exception {
Responder responder = new SerializedPageResponder();
SimpleResponse response = (SimpleResponse) responder.makeResponse(new FitNesseContext(root), request);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(response.getContentBytes()));
return ois.readObject();
}
public void testGetContentAndAttributes() throws Exception {
Object obj = doSetUpWith(root, "meat");
assertNotNull(obj);
assertTrue(obj instanceof PageData);
PageData data = (PageData) obj;
assertEquals("this is page one", data.getContent());
WikiPageProperties props = data.getProperties();
assertTrue(props.has("Attr1"));
}
public void testGetVersionOfPageData() throws Exception {
WikiPage page = crawler.addPage(root, PathParser.parse("PageOne"), "some content");
VersionInfo commitRecord = page.commit(page.getData());
request.addInput("type", "meat");
request.addInput("version", commitRecord.getName());
request.setResource("PageOne");
Object obj = getObject(root, request);
assertEquals(PageData.class, obj.getClass());
PageData data = (PageData) obj;
assertEquals("some content", data.getContent());
}
public void testGetPageHieratchyAsXml() throws Exception {
crawler.addPage(root, PathParser.parse("PageOne"));
crawler.addPage(root, PathParser.parse("PageOne.ChildOne"));
crawler.addPage(root, PathParser.parse("PageTwo"));
request.setResource("root");
request.addInput("type", "pages");
Responder responder = new SerializedPageResponder();
SimpleResponse response = (SimpleResponse) responder.makeResponse(new FitNesseContext(root), request);
String xml = response.getContent();
assertEquals("text/xml", response.getContentType());
assertSubString("<name>PageOne</name>", xml);
assertSubString("<name>PageTwo</name>", xml);
assertSubString("<name>ChildOne</name>", xml);
}
public void testGetPageHieratchyAsXmlDoesntContainSymbolicLinks() throws Exception {
WikiPage pageOne = crawler.addPage(root, PathParser.parse("PageOne"));
crawler.addPage(root, PathParser.parse("PageOne.ChildOne"));
crawler.addPage(root, PathParser.parse("PageTwo"));
PageData data = pageOne.getData();
WikiPageProperties properties = data.getProperties();
WikiPageProperty symLinks = properties.set(SymbolicPage.PROPERTY_NAME);
symLinks.set("SymPage", "PageTwo");
pageOne.commit(data);
request.setResource("root");
request.addInput("type", "pages");
Responder responder = new SerializedPageResponder();
SimpleResponse response = (SimpleResponse) responder.makeResponse(new FitNesseContext(root), request);
String xml = response.getContent();
assertEquals("text/xml", response.getContentType());
assertSubString("<name>PageOne</name>", xml);
assertSubString("<name>PageTwo</name>", xml);
assertSubString("<name>ChildOne</name>", xml);
assertNotSubString("SymPage", xml);
}
public void testGetDataAsHtml() throws Exception {
crawler.addPage(root, PathParser.parse("TestPageOne"), "test page");
request.setResource("TestPageOne");
request.addInput("type", "data");
Responder responder = new SerializedPageResponder();
SimpleResponse response = (SimpleResponse) responder.makeResponse(new FitNesseContext(root), request);
String xml = response.getContent();
assertEquals("text/xml", response.getContentType());
assertSubString("test page", xml);
assertSubString("<Test", xml);
}
}