package net.jsunit.model;

import org.jdom.Element;
import org.jdom.output.XMLOutputter;

public class TestCaseResultWriter {
    public static final String
            TEST_CASE = "testCase",
            NAME = "name",
            TIME = "time",
            FAILURE = "failure",
            ERROR = "error",
            MESSAGE = "message";

    private TestCaseResult result;

    public TestCaseResultWriter(TestCaseResult result) {
        this.result = result;
    }

    public void addXmlTo(Element element) {
        element.addContent(createTestCaseElement());
    }

    public Element createTestCaseElement() {
        Element testCaseElement = new Element(TEST_CASE);
        try {
            testCaseElement.setAttribute(NAME, result.getFullyQualifiedName().replace('\u0000', ' '));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        testCaseElement.setAttribute(TIME, String.valueOf(result.getTime()));
        if (result.hadFailure()) {
            Element failureElement = new Element(FAILURE);
            try {
                failureElement.setText(result.getFailure().replace('\u0000', ' '));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            testCaseElement.addContent(failureElement);
        } else if (result.hadError()) {
            Element errorElement = new Element(ERROR);
            try {
                errorElement.setText(result.getError().replace('\u0000', ' '));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            testCaseElement.addContent(errorElement);
        }
        return testCaseElement;
    }

    public String getProblemSummary() {
        if (result.hadFailure())
            return result.getFullyQualifiedName() + " failed:\n" + result.getFailure();
        else if (result.hadError())
            return result.getFullyQualifiedName() + " had an error:\n" + result.getError();
        return null;
    }

    public String getXmlFragment() {
        return new XMLOutputter().outputString(createTestCaseElement());
    }
}
