package net.jsunit.model; import org.jdom.Element; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.List; import java.util.NoSuchElementException; import java.util.StringTokenizer; public class TestCaseResult extends AbstractResult { public static final String TEST_PAGE_TEST_NAME_DELIMITER = ":"; public static final String DELIMITER = "|"; public static final String ERROR_INDICATOR = "E"; public static final String FAILURE_INDICATOR = "F"; private String testPageName; private String name; private double time; private String failure, error; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getError() { return error; } public void setError(String error) { this.error = error; } public String getFailure() { return failure; } public void setFailure(String failure) { this.failure = failure; } public double getTime() { return time; } public void setTimeTaken(double time) { this.time = time; } public boolean hadError() { return error != null; } public boolean hadFailure() { return failure != null; } public static TestCaseResult fromString(String string) { TestCaseResult result = new TestCaseResult(); StringTokenizer toker = new StringTokenizer(string, DELIMITER); try { String fullyQualifiedName; try { fullyQualifiedName = URLDecoder.decode(toker.nextToken(), "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } result.setFullyQualifiedName(fullyQualifiedName); result.setTimeTaken(Double.parseDouble(toker.nextToken())); String successString = toker.nextToken(); if (successString.equals(ERROR_INDICATOR)) result.setError(toker.nextToken()); else if (successString.equals(FAILURE_INDICATOR)) result.setFailure(toker.nextToken()); } catch (NoSuchElementException ex) { result.setError("Malformed test result: '" + string + "'."); } return result; } public void setFullyQualifiedName(String fullyQualifiedName) { int colonIndex = fullyQualifiedName.lastIndexOf(TEST_PAGE_TEST_NAME_DELIMITER); setTestPageName(fullyQualifiedName.substring(0, colonIndex)); setName(fullyQualifiedName.substring(colonIndex + 1)); } public static TestCaseResult fromXmlElement(Element testCaseElement) { return new TestCaseResultBuilder().build(testCaseElement); } public String getXmlFragment() { return new TestCaseResultWriter(this).getXmlFragment(); } public String getProblemSummary() { return new TestCaseResultWriter(this).getProblemSummary(); } public void setTestPageName(String testPageName) { this.testPageName = testPageName; } public String getFullyQualifiedName() { return testPageName + TEST_PAGE_TEST_NAME_DELIMITER + name; } public String getTestPageName() { return testPageName; } public String toString() { return getFullyQualifiedName() + ": " + getResultType().getDisplayString(); } public int getErrorCount() { return hadError() ? 1 : 0; } public int getFailureCount() { return hadFailure() ? 1 : 0; } public int getTestCount() { return 1; } protected List<? extends Result> getChildren() { return null; } public boolean wasSuccessful() { return !hadError() && !hadFailure(); } public ResultType getResultType() { if (hadError()) return ResultType.ERROR; if (hadFailure()) return ResultType.FAILURE; return ResultType.SUCCESS; } }