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.runner;
004:
005: import java.io.InputStream;
006: import fitnesse.util.*;
007: import fitnesse.testutil.RegexTest;
008: import org.w3c.dom.*;
009: import fit.Counts;
010:
011: public class XmlResultFormatterTest extends RegexTest {
012: private XmlResultFormatter formatter;
013: private PageResult result1;
014: private PageResult result2;
015: private Counts finalCounts;
016:
017: public void setUp() throws Exception {
018: formatter = new XmlResultFormatter("localhost:8081", "RootPath");
019: result1 = new PageResult("ResultOne", new Counts(1, 2, 3, 4),
020: "result one content");
021: result2 = new PageResult("ResultTwo", new Counts(4, 3, 2, 1),
022: "result two content");
023: finalCounts = new Counts(5, 5, 5, 5);
024: }
025:
026: public void tearDown() throws Exception {
027: formatter = null;
028: System.gc();
029: }
030:
031: public void testValidXml() throws Exception {
032: Document doc = getXmlDoc();
033: Element documentElement = doc.getDocumentElement();
034: assertEquals("testResults", documentElement.getNodeName());
035: assertEquals("localhost:8081", XmlUtil.getTextValue(
036: documentElement, "host"));
037: assertEquals("RootPath", XmlUtil.getTextValue(documentElement,
038: "rootPath"));
039: }
040:
041: public void testOneResult() throws Exception {
042: formatter.acceptResult(result1);
043: Document doc = getXmlDoc();
044: NodeList results = doc.getElementsByTagName("result");
045: assertEquals(1, results.getLength());
046: Element result = (Element) results.item(0);
047: checkResultElement(result, result1);
048: }
049:
050: public void testTwoResults() throws Exception {
051: formatter.acceptResult(result1);
052: formatter.acceptResult(result2);
053: Document doc = getXmlDoc();
054: NodeList results = doc.getElementsByTagName("result");
055: assertEquals(2, results.getLength());
056: Element resultElement1 = (Element) results.item(0);
057: Element resultElement2 = (Element) results.item(1);
058:
059: checkResultElement(resultElement1, result1);
060: checkResultElement(resultElement2, result2);
061: }
062:
063: public void testFinalCounts() throws Exception {
064: formatter.acceptFinalCount(finalCounts);
065: Document doc = getXmlDoc();
066: NodeList finalCountsList = doc
067: .getElementsByTagName("finalCounts");
068: assertEquals(1, finalCountsList.getLength());
069: Element finalCountElement = (Element) finalCountsList.item(0);
070: checkCounts(finalCounts, finalCountElement);
071: }
072:
073: private void checkResultElement(Element resultElement,
074: PageResult result) throws Exception {
075: assertEquals(result.title(), XmlUtil.getTextValue(
076: resultElement, "relativePageName"));
077: assertEquals(result.content(), XmlUtil.getTextValue(
078: resultElement, "content"));
079: Element countsElement = XmlUtil.getElementByTagName(
080: resultElement, "counts");
081: Counts counts = result.counts();
082: checkCounts(counts, countsElement);
083: }
084:
085: private void checkCounts(Counts counts, Element countsElement)
086: throws Exception {
087: assertEquals(counts.right + "", XmlUtil.getTextValue(
088: countsElement, "right"));
089: assertEquals(counts.wrong + "", XmlUtil.getTextValue(
090: countsElement, "wrong"));
091: assertEquals(counts.ignores + "", XmlUtil.getTextValue(
092: countsElement, "ignores"));
093: assertEquals(counts.exceptions + "", XmlUtil.getTextValue(
094: countsElement, "exceptions"));
095: }
096:
097: private String getXml() throws Exception {
098: InputStream input = formatter.getResultStream();
099: assertNotNull(input);
100:
101: int bytes = formatter.getByteCount();
102: String xml = new StreamReader(input).read(bytes);
103: return xml;
104: }
105:
106: private Document getXmlDoc() throws Exception {
107: return XmlUtil.newDocument(getXml());
108: }
109: }
|