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.Responder;
006: import fitnesse.FitNesseContext;
007: import fitnesse.wiki.*;
008: import fitnesse.util.XmlUtil;
009: import fitnesse.http.*;
010: import org.w3c.dom.*;
011:
012: import java.text.SimpleDateFormat;
013: import java.util.Date;
014:
015: public class RssResponderTest extends ResponderTest {
016: protected Element channelElement;
017: protected Element rssElement;
018: protected Document rssDoc;
019: private String date;
020: private String rfcDate;
021: private String hostName;
022:
023: // Return an instance of the Responder being tested.
024: protected Responder responderInstance() {
025: return new RssResponder();
026: }
027:
028: public void setUp() throws Exception {
029: super .setUp();
030: SimpleDateFormat dateFormat = new SimpleDateFormat(
031: FitNesseContext.recentChangesDateFormat);
032: date = dateFormat.format(new Date());
033: SimpleDateFormat rfcDateFormat = new SimpleDateFormat(
034: FitNesseContext.rfcCompliantDateFormat);
035: rfcDate = rfcDateFormat.format(new Date());
036: hostName = java.net.InetAddress.getLocalHost().getHostName();
037: }
038:
039: public void testEmptyRssReport() throws Exception {
040: buildRssChannel();
041: assertEquals("rss", rssElement.getTagName());
042: assertEquals("2.0", rssElement.getAttribute("version"));
043: assertNotNull(channelElement);
044: assertEquals("FitNesse:", XmlUtil.getTextValue(channelElement,
045: "title"));
046: }
047:
048: public void testOneNewPage() throws Exception {
049: NodeList items = getReportedItems("|MyNewPage|me|" + date + "|");
050: assertEquals(1, items.getLength());
051: String title = "MyNewPage";
052: String author = "me";
053: String pubDate = rfcDate;
054: String description = "me:" + rfcDate;
055: checkItem(items.item(0), title, author, pubDate, description,
056: "http://" + hostName + "/MyNewPage");
057: }
058:
059: public void testTwoNewPages() throws Exception {
060: String recentChangeOne = "|MyNewPage|me|" + date + "|";
061: String recentChangeTwo = "|SomeOtherPage||" + date + "|";
062: String recentChangesContent = recentChangeOne + "\n"
063: + recentChangeTwo + "\n";
064: NodeList items = getReportedItems(recentChangesContent);
065: assertEquals(2, items.getLength());
066: checkItem(items.item(0), "MyNewPage", "me", rfcDate, "me:"
067: + rfcDate, "http://" + hostName + "/MyNewPage");
068: checkItem(items.item(1), "SomeOtherPage", null, rfcDate,
069: rfcDate, "http://" + hostName + "/SomeOtherPage");
070: }
071:
072: public void testReportedPagesSelectedByResource() throws Exception {
073: request.setResource("FrontPage");
074: String page1 = "|SomePage|me|" + date + "|";
075: String page2 = "|FrontPage|me|" + date + "|";
076: String page3 = "|FrontPage.MyPage|me|" + date + "|";
077: String page4 = "|SomePage.FrontPage|me|" + date;
078:
079: String recentChangesContent = page1 + "\n" + page2 + "\n"
080: + page3 + "\n" + page4 + "\n";
081: NodeList items = getReportedItems(recentChangesContent);
082: assertEquals(2, items.getLength());
083: checkItem(items.item(0), "FrontPage", "me", rfcDate, "me:"
084: + rfcDate, "http://" + hostName + "/FrontPage");
085: checkItem(items.item(1), "FrontPage.MyPage", "me", rfcDate,
086: "me:" + rfcDate, "http://" + hostName
087: + "/FrontPage.MyPage");
088: }
089:
090: public void testLinkWithSetPrefix() throws Exception {
091: PageData data = root.getData();
092: data.setContent("!define RSS_PREFIX {http://host/}\n");
093: root.commit(data);
094:
095: NodeList items = getReportedItems("|PageName|author|" + date
096: + "|");
097: assertEquals(1, items.getLength());
098: checkItem(items.item(0), "PageName", "author", rfcDate,
099: "author:" + rfcDate, "http://host/PageName");
100: }
101:
102: public void testLinkWitDefaultPrefix() throws Exception {
103: NodeList items = getReportedItems("|PageName|author|" + date
104: + "|");
105: assertEquals(1, items.getLength());
106: checkItem(items.item(0), "PageName", "author", rfcDate,
107: "author:" + rfcDate, "http://" + hostName + "/PageName");
108: }
109:
110: public void testConvertDateFormat() throws Exception {
111: SimpleDateFormat oldFormat = new SimpleDateFormat(
112: FitNesseContext.recentChangesDateFormat);
113: SimpleDateFormat newFormat = new SimpleDateFormat(
114: FitNesseContext.rfcCompliantDateFormat);
115: String inDate = oldFormat.format(new Date());
116: String outDate = newFormat.format(new Date());
117: RssResponder responder = new RssResponder();
118: String convertedDate = responder.convertDateFormat(inDate);
119: assertEquals(convertedDate, outDate);
120: }
121:
122: public void testBadDateFormat() throws Exception {
123: SimpleDateFormat oldFormat = new SimpleDateFormat(
124: "h:mm:ss a EEE MMM dd, yyyy");
125: String inDate = oldFormat.format(new Date());
126: RssResponder responder = new RssResponder();
127: String convertedDate = responder.convertDateFormat(inDate);
128: assertEquals(convertedDate, inDate);
129: }
130:
131: private void buildRssChannel() throws Exception {
132: SimpleResponse response = (SimpleResponse) responder
133: .makeResponse(context, request);
134: rssDoc = XmlUtil.newDocument(response.getContent());
135: rssElement = rssDoc.getDocumentElement();
136: channelElement = XmlUtil.getElementByTagName(rssElement,
137: "channel");
138: }
139:
140: private void checkItem(Node node, String title, String author,
141: String pubDate, String description, String link)
142: throws Exception {
143: Element itemElement = (Element) node;
144: assertEquals(title, XmlUtil.getTextValue(itemElement, "title"));
145: assertEquals(author, XmlUtil
146: .getTextValue(itemElement, "author"));
147: assertEquals(pubDate, XmlUtil.getTextValue(itemElement,
148: "pubDate"));
149: assertEquals(description, XmlUtil.getTextValue(itemElement,
150: "description"));
151: assertEquals(link, XmlUtil.getTextValue(itemElement, "link"));
152: }
153:
154: private NodeList getReportedItems(String recentChangesContent)
155: throws Exception {
156: crawler.addPage(root, PathParser.parse("RecentChanges"),
157: recentChangesContent);
158: buildRssChannel();
159: NodeList items = channelElement.getElementsByTagName("item");
160: return items;
161: }
162: }
|