private Optional<String> determineTestClassName(UniqueId uniqueId) { Segment runnerSegment = uniqueId.getSegments().get(1); // skip engine node if (SEGMENT_TYPE_RUNNER.equals(runnerSegment.getType())) { return Optional.of(runnerSegment.getValue()); } logger.warn( () -> format("Unresolvable Unique ID (%s): Unique ID segment after engine segment must be of type \"" + SEGMENT_TYPE_RUNNER + "\"", uniqueId)); return Optional.empty(); }
/** * Attempt to resolve all segments for the supplied unique ID. */ private Deque<TestDescriptor> resolveAllSegments(UniqueId uniqueId) { List<Segment> segments = uniqueId.getSegments(); Deque<TestDescriptor> resolvedDescriptors = new LinkedList<>(); resolvedDescriptors.addFirst(this.engineDescriptor); for (int index = 1; index < segments.size() && resolvedDescriptors.size() == index; index++) { Segment segment = segments.get(index); TestDescriptor parent = resolvedDescriptors.getLast(); UniqueId partialUniqueId = parent.getUniqueId().append(segment); Optional<TestDescriptor> resolvedDescriptor = findTestDescriptorByUniqueId(partialUniqueId); if (!resolvedDescriptor.isPresent()) { // @formatter:off resolvedDescriptor = this.resolvers.stream() .map(resolver -> resolver.resolveUniqueId(segment, parent)) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); // @formatter:on resolvedDescriptor.ifPresent(parent::addChild); } resolvedDescriptor.ifPresent(resolvedDescriptors::addLast); } return resolvedDescriptors; }
private void handleResolvedDescriptorsForUniqueId(UniqueId uniqueId, Deque<TestDescriptor> resolvedDescriptors) { List<Segment> segments = uniqueId.getSegments(); int numSegmentsToResolve = segments.size() - 1; int numSegmentsResolved = resolvedDescriptors.size() - 1; if (numSegmentsResolved == 0) { logger.warn(() -> format("Unique ID '%s' could not be resolved.", uniqueId)); } else if (numSegmentsResolved != numSegmentsToResolve) { if (resolvedDescriptors.getLast() instanceof Filterable) { ((Filterable) resolvedDescriptors.getLast()).getDynamicDescendantFilter().allow(uniqueId); } else { logger.warn(() -> { List<Segment> unresolved = segments.subList(1, segments.size()); // Remove engine ID unresolved = unresolved.subList(numSegmentsResolved, unresolved.size()); // Remove resolved segments return format("Unique ID '%s' could only be partially resolved. " + "All resolved segments will be executed; however, the " + "following segments could not be resolved: %s", uniqueId, unresolved); }); } } else { resolveChildren(resolvedDescriptors.getLast()); } }
/** * Format and return the string representation of the supplied {@code UniqueId}. */ String format(UniqueId uniqueId) { // @formatter:off return uniqueId.getSegments().stream() .map(this::describe) .collect(joining(String.valueOf(this.segmentDelimiter))); // @formatter:on }
private void handleResolvedDescriptorsForUniqueId(UniqueId uniqueId, Deque<TestDescriptor> resolvedDescriptors) { List<Segment> segments = uniqueId.getSegments(); int numSegmentsToResolve = segments.size() - 1; int numSegmentsResolved = resolvedDescriptors.size() - 1; if (numSegmentsResolved == 0) { logger.warn(() -> String.format("Unique ID '%s' could not be resolved.", uniqueId)); } else if (numSegmentsResolved != numSegmentsToResolve) { logger.warn(() -> { List<Segment> unresolved = segments.subList(1, segments.size()); // Remove engine ID unresolved = unresolved.subList(numSegmentsResolved, unresolved.size()); // Remove resolved segments return String.format("Unique ID '%s' could only be partially resolved. " + "All resolved segments will be executed; however, the " + "following segments could not be resolved: %s", uniqueId, unresolved); }); } else { resolveChildren(resolvedDescriptors.getLast()); } }
/** * Attempt to resolve all segments for the supplied unique ID. */ private Deque<TestDescriptor> resolveAllSegments(UniqueId uniqueId) { List<Segment> segments = uniqueId.getSegments(); Deque<TestDescriptor> resolvedDescriptors = new LinkedList<>(); resolvedDescriptors.addFirst(this.engineDescriptor); for (int index = 1; index < segments.size() && resolvedDescriptors.size() == index; index++) { Segment segment = segments.get(index); TestDescriptor parent = resolvedDescriptors.getLast(); UniqueId partialUniqueId = parent.getUniqueId().append(segment); Optional<TestDescriptor> resolvedDescriptor = findTestDescriptorByUniqueId(partialUniqueId); if (!resolvedDescriptor.isPresent()) { resolvedDescriptor = this.resolvers.stream().map(resolver -> resolver.resolveUniqueId(segment, parent)) .filter(Optional::isPresent).map(Optional::get).findFirst(); resolvedDescriptor.ifPresent(parent::addChild); } resolvedDescriptor.ifPresent(resolvedDescriptors::addLast); } return resolvedDescriptors; }
private void writeXmlReportInCaseOfRoot(TestIdentifier testIdentifier) { if (isRoot(testIdentifier)) { String rootName = UniqueId.parse(testIdentifier.getUniqueId()).getSegments().get(0).getValue(); writeXmlReportSafely(testIdentifier, rootName); } }
@Example void plainProperty() { Method method = TestHelper.getMethod(TestContainer.class, "plainProperty"); UniqueId uniqueId = JqwikUniqueIDs.appendProperty(UniqueId.forEngine(JqwikTestEngine.ENGINE_ID), method); ContainerClassDescriptor classDescriptor = buildContainerDescriptor(TestContainer.class); Optional<TestDescriptor> descriptor = resolver.resolveUniqueId(uniqueId.getSegments().get(1), classDescriptor); PropertyMethodDescriptor propertyMethodDescriptor = (PropertyMethodDescriptor) descriptor.get(); assertThat(propertyMethodDescriptor.getLabel()).isEqualTo("plainProperty"); assertDefaultConfigurationProperties(propertyMethodDescriptor); }
public static Condition<ExecutionEvent> uniqueIdSubstring(String uniqueIdSubstring) { Predicate<UniqueId.Segment> predicate = segment -> { String text = segment.getType() + ":" + segment.getValue(); return text.contains(uniqueIdSubstring); }; return new Condition<>( byTestDescriptor( where(TestDescriptor::getUniqueId, uniqueId -> uniqueId.getSegments().stream().anyMatch(predicate))), "descriptor with uniqueId substring \"%s\"", uniqueIdSubstring); }
@Example void propertyWithParams() { Method method = TestHelper.getMethod(TestContainer.class, "propertyWithParams"); UniqueId uniqueId = JqwikUniqueIDs.appendProperty(UniqueId.forEngine(JqwikTestEngine.ENGINE_ID), method); ContainerClassDescriptor classDescriptor = buildContainerDescriptor(TestContainer.class); Optional<TestDescriptor> descriptor = resolver.resolveUniqueId(uniqueId.getSegments().get(1), classDescriptor); assertThat(descriptor).isPresent(); PropertyMethodDescriptor propertyMethodDescriptor = (PropertyMethodDescriptor) descriptor.get(); assertThat(propertyMethodDescriptor.getLabel()).isEqualTo("propertyWithParams"); }