// 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.runner;
import java.io.InputStream;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import util.RegexTestCase;
import util.StreamReader;
import util.XmlUtil;
import fitnesse.responders.run.TestSummary;
public class XmlResultFormatterTest extends RegexTestCase {
private XmlResultFormatter formatter;
private PageResult result1;
private PageResult result2;
private TestSummary finalSummary;
public void setUp() throws Exception {
formatter = new XmlResultFormatter("localhost:8081", "RootPath");
result1 = new PageResult("ResultOne", new TestSummary(1, 2, 3, 4), "result one content");
result2 = new PageResult("ResultTwo", new TestSummary(4, 3, 2, 1), "result two content");
finalSummary = new TestSummary(5, 5, 5, 5);
}
public void tearDown() throws Exception {
formatter = null;
}
public void testValidXml() throws Exception {
Document doc = getXmlDoc();
Element documentElement = doc.getDocumentElement();
assertEquals("testResults", documentElement.getNodeName());
assertEquals("localhost:8081", XmlUtil.getTextValue(documentElement, "host"));
assertEquals("RootPath", XmlUtil.getTextValue(documentElement, "rootPath"));
}
public void testOneResult() throws Exception {
formatter.acceptResult(result1);
Document doc = getXmlDoc();
NodeList results = doc.getElementsByTagName("result");
assertEquals(1, results.getLength());
Element result = (Element) results.item(0);
checkResultElement(result, result1);
}
public void testTwoResults() throws Exception {
formatter.acceptResult(result1);
formatter.acceptResult(result2);
Document doc = getXmlDoc();
NodeList results = doc.getElementsByTagName("result");
assertEquals(2, results.getLength());
Element resultElement1 = (Element) results.item(0);
Element resultElement2 = (Element) results.item(1);
checkResultElement(resultElement1, result1);
checkResultElement(resultElement2, result2);
}
public void testFinalCounts() throws Exception {
formatter.acceptFinalCount(finalSummary);
Document doc = getXmlDoc();
NodeList finalCountsList = doc.getElementsByTagName("finalCounts");
assertEquals(1, finalCountsList.getLength());
Element finalCountElement = (Element) finalCountsList.item(0);
checkCounts(finalSummary, finalCountElement);
}
private void checkResultElement(Element resultElement, PageResult result) throws Exception {
assertEquals(result.title(), XmlUtil.getTextValue(resultElement, "relativePageName"));
assertEquals(result.content(), XmlUtil.getTextValue(resultElement, "content"));
Element countsElement = XmlUtil.getElementByTagName(resultElement, "counts");
TestSummary testSummary = result.testSummary();
checkCounts(testSummary, countsElement);
}
private void checkCounts(TestSummary testSummary, Element countsElement) throws Exception {
assertEquals(testSummary.getRight() + "", XmlUtil.getTextValue(countsElement, "right"));
assertEquals(testSummary.getWrong() + "", XmlUtil.getTextValue(countsElement, "wrong"));
assertEquals(testSummary.getIgnores() + "", XmlUtil.getTextValue(countsElement, "ignores"));
assertEquals(testSummary.getExceptions() + "", XmlUtil.getTextValue(countsElement, "exceptions"));
}
private String getXml() throws Exception {
InputStream input = formatter.getResultStream();
assertNotNull(input);
int bytes = formatter.getByteCount();
String xml = new StreamReader(input).read(bytes);
return xml;
}
private Document getXmlDoc() throws Exception {
return XmlUtil.newDocument(getXml());
}
}