public ParameterizedSpecRunner createSpecRunner(SpecInfo spec, RunNotifier notifier) { return new ParameterizedSpecRunner(spec, new JUnitSupervisor(spec, notifier, createStackTraceFilter(spec), diffedObjectRenderer)); }
@Override public int error(ErrorInfo error) { Throwable exception = error.getException(); if (exception instanceof MultipleFailureException) return handleMultipleFailures(error); if (isFailedEqualityComparison(exception)) exception = convertToComparisonFailure(exception); filter.filter(exception); Failure failure = new Failure(getCurrentDescription(), exception); if (exception instanceof AssumptionViolatedException) { // Spock has no concept of "violated assumption", so we don't notify Spock listeners // do notify JUnit listeners unless it's a data-driven iteration that's reported as one feature if (currentIteration == null || !currentFeature.isParameterized() || currentFeature.isReportIterations()) { notifier.fireTestAssumptionFailed(failure); } } else { masterListener.error(error); notifier.fireTestFailure(failure); } errorSinceLastReset = true; return statusFor(error); }
private Throwable convertToComparisonFailure(Throwable exception) { assert isFailedEqualityComparison(exception); ConditionNotSatisfiedError conditionNotSatisfiedError = (ConditionNotSatisfiedError) exception; Condition condition = conditionNotSatisfiedError.getCondition(); ExpressionInfo expr = condition.getExpression(); String actual = renderValue(expr.getChildren().get(0).getValue()); String expected = renderValue(expr.getChildren().get(1).getValue()); ComparisonFailure failure = new SpockComparisonFailure(condition, expected, actual); failure.setStackTrace(exception.getStackTrace()); if (conditionNotSatisfiedError.getCause()!=null){ failure.initCause(conditionNotSatisfiedError.getCause()); } return failure; }
private int handleMultipleFailures(ErrorInfo error) { MultipleFailureException multiFailure = (MultipleFailureException) error.getException(); int runStatus = OK; for (Throwable failure : multiFailure.getFailures()) runStatus = error(new ErrorInfo(error.getMethod(), failure)); return runStatus; }