TestExecutionResult getStoredResultOrSuccessful(TestDescriptor testDescriptor) { List<TestExecutionResult> testExecutionResults = executionResults.get(testDescriptor); if (testExecutionResults == null) { return successful(); } if (testExecutionResults.size() == 1) { return testExecutionResults.get(0); } // @formatter:off List<Throwable> failures = testExecutionResults .stream() .map(TestExecutionResult::getThrowable) .map(Optional::get) .collect(toList()); // @formatter:on return failed(new MultipleFailuresError("", failures)); } }
/** * Asserts that <em>all</em> assertions contained in {@code asserts} do not fail. * Report a failure of at least one in a {@link MultipleFailuresError}. * * <p>Include {@code heading} in the exception's message string.</p> */ @API(Experimental) public static void assertAll(String heading, Executable... asserts) throws MultipleFailuresError { MultipleFailuresError multipleFailuresError = new MultipleFailuresError(heading); for (Executable executable : asserts) { try { executable.execute(); } catch (AssertionError assertionError) { multipleFailuresError.addFailure(assertionError); } catch (Throwable t) { throw ExceptionUtils.throwAsUncheckedException(t); } } if (multipleFailuresError.hasFailures()) { throw multipleFailuresError; } }
} catch (Throwable t) { if (t instanceof MultipleFailuresError) { failures.addAll(((MultipleFailuresError) t).getFailures()); } else { failures.add(t); throw new MultipleFailuresError("Multiple query validations failed", failures);
@Override public String getMessage() { int failureCount = this.failures.size(); if (failureCount == 0) { return this.heading; } // @formatter:off StringBuilder builder = new StringBuilder(this.heading) .append(" (") .append(failureCount).append(" ") .append(pluralize(failureCount, "failure", "failures")) .append(")") .append(EOL); // @formatter:on int lastIndex = failureCount - 1; for (Throwable failure : this.failures.subList(0, lastIndex)) { builder.append("\t").append(nullSafeMessage(failure)).append(EOL); } builder.append('\t').append(nullSafeMessage(this.failures.get(lastIndex))); return builder.toString(); }
private static String nullSafeMessage(Throwable failure) { if (isBlank(failure.getMessage())) { return "<no message> in " + failure.getClass().getName(); } return failure.getMessage(); }
} catch (Throwable t) { if (t instanceof MultipleFailuresError) { failures.addAll(((MultipleFailuresError) t).getFailures()); } else { failures.add(t); throw new MultipleFailuresError("Multiple query validations failed", failures);
public MultipleFailuresError(String heading, List<? extends Throwable> failures) { this.heading = isBlank(heading) ? "Multiple Failures" : heading.trim(); this.failures = new ArrayList<Throwable>(); for (Throwable failure : failures) { if (failure == null) { throw new NullPointerException("failures must not contain null elements"); } this.failures.add(failure); } }
static void assertAll(String heading, Stream<Executable> executables) { Preconditions.notNull(executables, "executables stream must not be null"); List<Throwable> failures = executables // .peek(executable -> Preconditions.notNull(executable, "individual executables must not be null"))// .map(executable -> { try { executable.execute(); return null; } catch (Throwable t) { BlacklistedExceptions.rethrowIfBlacklisted(t); return t; } }) // .filter(Objects::nonNull) // .collect(Collectors.toList()); if (!failures.isEmpty()) { MultipleFailuresError multipleFailuresError = new MultipleFailuresError(heading, failures); failures.forEach(multipleFailuresError::addSuppressed); throw multipleFailuresError; } }
@Override public void validate(String query) { validations--; List<Throwable> tryFailures = new ArrayList<>(); boolean failed = true; for (int i = 0; i < statements.size(); i++) { try { statements.get(i).validate(query); statements.remove(i); failed = false; break; } catch (Throwable t) { tryFailures.add(t); } } if (failed) { failures.addAll(tryFailures); } if (validations == 0 && !failures.isEmpty()) { throw new MultipleFailuresError("Multiple query validations failed", failures); } }
@Override public void validate(String query) { validations--; List<Throwable> tryFailures = new ArrayList<>(); boolean failed = true; for (int i = 0; i < statements.size(); i++) { try { statements.get(i).validate(query); statements.remove(i); failed = false; break; } catch (Throwable t) { tryFailures.add(t); } } if (failed) { failures.addAll(tryFailures); } if (validations == 0 && !failures.isEmpty()) { throw new MultipleFailuresError("Multiple query validations failed", failures); } }