001: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
002: // Released under the terms of the GNU General Public License version 2 or later.
003: package fitnesse.responders;
004:
005: import fitnesse.wiki.*;
006: import fitnesse.http.*;
007: import fitnesse.*;
008: import fitnesse.testutil.RegexTest;
009: import fitnesse.util.FileUtil;
010:
011: import java.io.*;
012:
013: public class SerializedPageResponderTest extends RegexTest {
014: private final String RootPath = "TestRooT";
015: private PageCrawler crawler;
016: private WikiPage root;
017: private MockRequest request;
018:
019: public void setUp() throws Exception {
020: root = InMemoryPage.makeRoot("RooT");
021: crawler = root.getPageCrawler();
022: request = new MockRequest();
023: }
024:
025: public void tearDown() throws Exception {
026: FileUtil.deleteFileSystemDirectory(RootPath);
027: }
028:
029: public void testWithInMemory() throws Exception {
030: Object obj = doSetUpWith(root, "bones");
031: doTestWith(obj);
032:
033: }
034:
035: public void testWithFileSystem() throws Exception {
036: root = FileSystemPage.makeRoot(".", RootPath);
037: Object obj = doSetUpWith(root, "bones");
038: FileUtil.deleteFileSystemDirectory(RootPath);
039: doTestWith(obj);
040: }
041:
042: private void doTestWith(Object obj) throws Exception {
043: assertNotNull(obj);
044: assertEquals(true, obj instanceof ProxyPage);
045: WikiPage page = (WikiPage) obj;
046: assertEquals("PageOne", page.getName());
047: }
048:
049: private Object doSetUpWith(WikiPage root, String proxyType)
050: throws Exception {
051: WikiPage page1 = crawler.addPage(root, PathParser
052: .parse("PageOne"), "this is page one");
053: PageData data = page1.getData();
054: data.setAttribute("Attr1", "true");
055: page1.commit(data);
056: crawler.addPage(page1, PathParser.parse("ChildOne"),
057: "this is child one");
058:
059: request.addInput("type", proxyType);
060: request.setResource("PageOne");
061:
062: return getObject(root, request);
063: }
064:
065: private Object getObject(WikiPage root, MockRequest request)
066: throws Exception {
067: Responder responder = new SerializedPageResponder();
068: SimpleResponse response = (SimpleResponse) responder
069: .makeResponse(new FitNesseContext(root), request);
070:
071: ObjectInputStream ois = new ObjectInputStream(
072: new ByteArrayInputStream(response.getContentBytes()));
073: Object obj = ois.readObject();
074: return obj;
075: }
076:
077: public void testGetContentAndAttributes() throws Exception {
078: Object obj = doSetUpWith(root, "meat");
079: assertNotNull(obj);
080: assertTrue(obj instanceof PageData);
081: PageData data = (PageData) obj;
082:
083: assertEquals("this is page one", data.getContent());
084:
085: WikiPageProperties props = data.getProperties();
086: assertTrue(props.has("Attr1"));
087: }
088:
089: public void testGetVersionOfPageData() throws Exception {
090: WikiPage page = crawler.addPage(root, PathParser
091: .parse("PageOne"), "some content");
092: VersionInfo commitRecord = page.commit(page.getData());
093:
094: request.addInput("type", "meat");
095: request.addInput("version", commitRecord.getName());
096: request.setResource("PageOne");
097:
098: Object obj = getObject(root, request);
099: assertEquals(PageData.class, obj.getClass());
100: PageData data = (PageData) obj;
101: assertEquals("some content", data.getContent());
102: }
103:
104: public void testGetPageHieratchyAsXml() throws Exception {
105: crawler.addPage(root, PathParser.parse("PageOne"));
106: crawler.addPage(root, PathParser.parse("PageOne.ChildOne"));
107: crawler.addPage(root, PathParser.parse("PageTwo"));
108:
109: request.setResource("root");
110: request.addInput("type", "pages");
111: Responder responder = new SerializedPageResponder();
112: SimpleResponse response = (SimpleResponse) responder
113: .makeResponse(new FitNesseContext(root), request);
114: String xml = response.getContent();
115:
116: assertEquals("text/xml", response.getContentType());
117: assertSubString("<name>PageOne</name>", xml);
118: assertSubString("<name>PageTwo</name>", xml);
119: assertSubString("<name>ChildOne</name>", xml);
120: }
121:
122: public void testGetPageHieratchyAsXmlDoesntContainSymbolicLinks()
123: throws Exception {
124: WikiPage pageOne = crawler.addPage(root, PathParser
125: .parse("PageOne"));
126: crawler.addPage(root, PathParser.parse("PageOne.ChildOne"));
127: crawler.addPage(root, PathParser.parse("PageTwo"));
128:
129: PageData data = pageOne.getData();
130: WikiPageProperties properties = data.getProperties();
131: WikiPageProperty symLinks = properties
132: .set(SymbolicPage.PROPERTY_NAME);
133: symLinks.set("SymPage", "PageTwo");
134: pageOne.commit(data);
135:
136: request.setResource("root");
137: request.addInput("type", "pages");
138: Responder responder = new SerializedPageResponder();
139: SimpleResponse response = (SimpleResponse) responder
140: .makeResponse(new FitNesseContext(root), request);
141: String xml = response.getContent();
142:
143: assertEquals("text/xml", response.getContentType());
144: assertSubString("<name>PageOne</name>", xml);
145: assertSubString("<name>PageTwo</name>", xml);
146: assertSubString("<name>ChildOne</name>", xml);
147: assertNotSubString("SymPage", xml);
148: }
149:
150: public void testGetDataAsHtml() throws Exception {
151: crawler.addPage(root, PathParser.parse("TestPageOne"),
152: "test page");
153:
154: request.setResource("TestPageOne");
155: request.addInput("type", "data");
156: Responder responder = new SerializedPageResponder();
157: SimpleResponse response = (SimpleResponse) responder
158: .makeResponse(new FitNesseContext(root), request);
159: String xml = response.getContent();
160:
161: assertEquals("text/xml", response.getContentType());
162: assertSubString("test page", xml);
163: assertSubString("<Test", xml);
164: }
165: }
|