package net.jsunit.model;
import org.jdom.CDATA;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class BrowserResultWriter {
public static final String
ID = "id",
BROWSER_RESULT = "browserResult",
USER_AGENT = "userAgent",
TIME = "time",
TEST_CASE_RESULTS = "testCaseResults",
JSUNIT_VERSION = "jsUnitVersion",
REMOTE_ADDRESS = "remoteAddress",
SERVER_SIDE_EXCEPTION_STACK_TRACE = "serverSideExceptionStackTrace",
PROPERTIES = "properties",
PROPERTY = "property",
PROPERTY_KEY = "name",
PROPERTY_VALUE = "value",
URL = "url",
TEST_PAGE_NAME = "testPage",
USER_PROPERTY = "userProperty";
BrowserResult browserResult;
public BrowserResultWriter(BrowserResult result) {
this.browserResult = result;
}
public String writeXmlString() {
Element root = writeXml();
Document document = new Document(root);
return new XMLOutputter().outputString(document);
}
public String writeXmlFragment() {
return new XMLOutputter().outputString(writeXml());
}
private void addPropertiesElementTo(Element element) {
Element properties = new Element(PROPERTIES);
element.addContent(properties);
if (browserResult.completedTestRun()) {
addProperty(properties, JSUNIT_VERSION, browserResult.getJsUnitVersion());
addProperty(properties, USER_AGENT, browserResult.getUserAgent());
addProperty(properties, REMOTE_ADDRESS, browserResult.getRemoteAddress());
addProperty(properties, URL, browserResult.getBaseURL());
addProperty(properties, TEST_PAGE_NAME, browserResult.getTestPageName());
addProperty(properties, USER_PROPERTY, browserResult.getUserProperty());
}
if (browserResult.hasServerSideExceptionStackTrace()) {
Element stackTrace = createPropertyElement(SERVER_SIDE_EXCEPTION_STACK_TRACE);
stackTrace.addContent(new CDATA(browserResult.getServerSideExceptionStackTrace()));
properties.addContent(stackTrace);
}
}
private void addProperty(Element parent, String name, String value) {
Element property = createPropertyElement(name);
property.setAttribute(PROPERTY_VALUE, value == null ? "" : value);
parent.addContent(property);
}
private Element createPropertyElement(String name) {
Element property = new Element(PROPERTY);
property.setAttribute(PROPERTY_KEY, name);
return property;
}
private void addTestCasesElementTo(Element element) {
Element testCasesElement = new Element(TEST_CASE_RESULTS);
for (TestCaseResult result : browserResult._getTestCaseResults()) {
new TestCaseResultWriter(result).addXmlTo(testCasesElement);
}
element.addContent(testCasesElement);
}
public String writeProblems() {
StringBuffer buffer = new StringBuffer();
for (TestCaseResult result : browserResult._getTestCaseResults()) {
if (!result.wasSuccessful()) {
if (buffer.length() > 0)
buffer.append("\n");
String problemMessage = result.getProblemSummary(true);
buffer.append(problemMessage);
}
}
return buffer.toString();
}
public Element writeXml() {
Element root = new Element(BROWSER_RESULT);
root.setAttribute("type", browserResult._getResultType().name());
Browser browser = browserResult.getBrowser();
if (browser != null)
root.addContent(browser.asXml());
addPropertiesElementTo(root);
if (browserResult.completedTestRun()) {
root.setAttribute(ID, browserResult.getId());
root.setAttribute(TIME, String.valueOf(browserResult.getTime()));
addTestCasesElementTo(root);
}
return root;
}
}