package gherkin.formatter.model; import gherkin.formatter.Mappable; import gherkin.formatter.Reporter; import java.io.PrintWriter; import java.io.StringWriter; public class Result extends Mappable { private static final long serialVersionUID = 1L; private final String status; private final Long duration; private final String error_message; private final Throwable error; public static final Result SKIPPED = new Result("skipped", null, null); public static final Result UNDEFINED = new Result("undefined", null, null); public static final String PASSED = "passed"; public static final String FAILED = "failed"; /** * Used at runtime * * @param status * @param duration * @param error * @param dummy only used to distinguish the constructor when used from JRuby (and null for error). */ public Result(String status, Long duration, Throwable error, Object dummy) { this.status = status; this.duration = duration; this.error_message = error != null ? getErrorMessage(error) : null; this.error = error; } /** * Used when parsing JSON. TODO: constructing an Exception instance when parsing JSON might be better. * * @param status * @param duration * @param errorMessage */ public Result(String status, Long duration, String errorMessage) { this.status = status; this.duration = duration; this.error_message = errorMessage; this.error = null; } public String getStatus() { return status; } public Long getDuration() { return duration; } public String getErrorMessage() { return error_message; } public Throwable getError() { return error; } private String getErrorMessage(Throwable error) { StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); error.printStackTrace(printWriter); return stringWriter.getBuffer().toString(); } public void replay(Reporter reporter) { reporter.result(this); } }