in src/main/java/org/jetbrains/jetCheck/PropertyFalsified.java [28:72]
private String calcMessage() {
StringBuilder traceBuilder = new StringBuilder();
String exampleString = valueToString(failure.getMinimalCounterexample(), traceBuilder);
Throwable failureReason = failure.getMinimalCounterexample().getExceptionCause();
Throwable rootCause = failureReason == null ? null : getRootCause(failureReason);
String msg = rootCause != null && !rootCause.toString().contains("ComparisonFailure") // otherwise IDEA replaces the whole message (including example and rechecking information) with a diff
? "Failed with " + rootCause + "\nOn " + exampleString
: "Falsified on " + exampleString;
if (!failure.reproducible) {
msg += "\n\n" + NOT_REPRODUCIBLE;
}
msg += "\n" +
getShrinkingStats() +
"\n" + failure.iteration.printToReproduce(failureReason, failure.getMinimalCounterexample()) + "\n";
if (failureReason != null) {
appendTrace(traceBuilder,
rootCause == failureReason ? "Property failure reason: " : "Property failure reason, innermost exception (see full trace below): ",
rootCause);
}
if (failure.getStoppingReason() != null) {
msg += "\n Shrinking stopped prematurely, see the reason below.";
appendTrace(traceBuilder, "An unexpected exception happened during shrinking: ", failure.getStoppingReason());
}
Throwable first = failure.getFirstCounterExample().getExceptionCause();
if (exceptionsDiffer(first, failure.getMinimalCounterexample().getExceptionCause())) {
msg += "\n " + FAILURE_REASON_HAS_CHANGED_DURING_SHRINKING;
StringBuilder secondaryTrace = new StringBuilder();
traceBuilder.append("\n Initial value: ").append(valueToString(failure.getFirstCounterExample(), secondaryTrace));
if (first == null) {
traceBuilder.append("\n Initially property was falsified without exceptions");
traceBuilder.append(secondaryTrace);
} else {
traceBuilder.append(secondaryTrace);
appendTrace(traceBuilder, "Initially failed because of ", first);
}
}
return msg + traceBuilder;
}