private static Predicate<? super Throwable> createAbortedExecutionPredicate() { Predicate<Throwable> otaPredicate = TestAbortedException.class::isInstance; // Additionally support JUnit 4's AssumptionViolatedException? Class<?> clazz = ReflectionUtils.tryToLoadClass( "org.junit.internal.AssumptionViolatedException").toOptional().orElse(null); if (clazz != null) { return otaPredicate.or(clazz::isInstance); } // Else just OTA's TestAbortedException return otaPredicate; }
private Optional<Class<?>> loadTestClass(String className, UniqueId uniqueId) { // @formatter:off return ReflectionUtils.tryToLoadClass(className) .ifFailure(cause -> logger.warn(cause, () -> format("Unresolvable Unique ID (%s): Unknown class %s", uniqueId, className))) .toOptional(); // @formatter:on }
@Override public Serializable apply(Description description) { // @formatter:off return tryToReadFieldValue(Description.class, fieldName, description) .andThenTry(Serializable.class::cast) .ifFailure(cause -> logger.warn(cause, () -> format("Could not read unique ID for Description; using display name instead: %s", description))) .toOptional() .orElseGet(description::getDisplayName); // @formatter:on }
@Override public Optional<TestDescriptor> resolveUniqueId(UniqueId.Segment segment, TestDescriptor parent) { if (!segment.getType().equals(getSegmentType())) { return Optional.empty(); } if (!requiredParentType().isInstance(parent)) { return Optional.empty(); } String className = getClassName(parent, segment.getValue()); Optional<Class<?>> optionalContainerClass = ReflectionUtils.tryToLoadClass(className).toOptional(); if (!optionalContainerClass.isPresent()) { return Optional.empty(); } Class<?> containerClass = optionalContainerClass.get(); if (!isPotentialCandidate(containerClass)) { return Optional.empty(); } UniqueId uniqueId = createUniqueId(containerClass, parent); return Optional.of(resolveClass(containerClass, uniqueId)); }