From 1381a3de097f09b6c7be45d06e35185a6360b911 Mon Sep 17 00:00:00 2001 From: Juliette de Rancourt Date: Mon, 26 Jun 2023 19:23:39 +0200 Subject: [PATCH] Create new `TestDescriptor.getAncestors()` method --- .../junit/platform/engine/TestDescriptor.java | 20 ++++++++++++ ...ckTracePruningEngineExecutionListener.java | 21 ++---------- .../AbstractTestDescriptorTests.java | 32 +++++++++++++++++-- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/TestDescriptor.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/TestDescriptor.java index b16a8d4319e2..7dfcecc644ca 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/TestDescriptor.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/TestDescriptor.java @@ -106,6 +106,26 @@ default String getLegacyReportingName() { */ Set getChildren(); + /** + * Get the immutable set of all ancestors of this descriptor. + * + *

An ancestors is the parent of this descriptor or the parent + * of one of its parents, recursively. + * + * @see #getParent() + */ + @API(status = STABLE, since = "5.10") + default Set getAncestors() { + if (!getParent().isPresent()) { + return Collections.emptySet(); + } + TestDescriptor parent = getParent().get(); + Set ancestors = new LinkedHashSet<>(); + ancestors.add(parent); + ancestors.addAll(parent.getAncestors()); + return Collections.unmodifiableSet(ancestors); + } + /** * Get the immutable set of all descendants of this descriptor. * diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/StackTracePruningEngineExecutionListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/StackTracePruningEngineExecutionListener.java index 06d8b6a97207..c183fdb683b8 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/StackTracePruningEngineExecutionListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/StackTracePruningEngineExecutionListener.java @@ -10,11 +10,9 @@ package org.junit.platform.launcher.core; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import org.junit.platform.commons.util.ExceptionUtils; @@ -49,9 +47,10 @@ public void executionFinished(TestDescriptor testDescriptor, TestExecutionResult } private static List getTestClassNames(TestDescriptor testDescriptor) { - return findAllParentDescriptors(testDescriptor) // + return testDescriptor.getAncestors() // .stream() // - .map(TestDescriptor::getSource).filter(Optional::isPresent) // + .map(TestDescriptor::getSource) // + .filter(Optional::isPresent) // .map(Optional::get) // .map(source -> { if (source instanceof ClassSource) { @@ -68,18 +67,4 @@ else if (source instanceof MethodSource) { .collect(Collectors.toList()); } - private static Set findAllParentDescriptors(TestDescriptor testDescriptor) { - return findParentDescriptors(testDescriptor, new HashSet<>()); - } - - private static Set findParentDescriptors(TestDescriptor testDescriptor, - Set visitedDescriptors) { - if (testDescriptor.isRoot()) { - return visitedDescriptors; - } - TestDescriptor parent = testDescriptor.getParent().get(); - visitedDescriptors.add(parent); - return findParentDescriptors(parent, visitedDescriptors); - } - } diff --git a/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptorTests.java b/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptorTests.java index abbc0f1e9f69..97d5614470d7 100644 --- a/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptorTests.java +++ b/platform-tests/src/test/java/org/junit/platform/engine/support/descriptor/AbstractTestDescriptorTests.java @@ -10,6 +10,7 @@ package org.junit.platform.engine.support.descriptor; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertSame; @@ -34,15 +35,18 @@ class AbstractTestDescriptorTests { private EngineDescriptor engineDescriptor; + private GroupDescriptor group1; + private GroupDescriptor group11; + private LeafDescriptor leaf111; @BeforeEach void initTree() { engineDescriptor = new EngineDescriptor(UniqueId.forEngine("testEngine"), "testEngine"); - var group1 = new GroupDescriptor(UniqueId.root("group", "group1")); + group1 = new GroupDescriptor(UniqueId.root("group", "group1")); engineDescriptor.addChild(group1); var group2 = new GroupDescriptor(UniqueId.root("group", "group2")); engineDescriptor.addChild(group2); - var group11 = new GroupDescriptor(UniqueId.root("group", "group1-1")); + group11 = new GroupDescriptor(UniqueId.root("group", "group1-1")); group1.addChild(group11); group1.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf1-1"))); @@ -50,7 +54,8 @@ void initTree() { group2.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf2-1"))); - group11.addChild(new LeafDescriptor(UniqueId.root("leaf", "leaf11-1"))); + leaf111 = new LeafDescriptor(UniqueId.root("leaf", "leaf11-1")); + group11.addChild(leaf111); } @Test @@ -133,6 +138,27 @@ void pruneGroup() { assertFalse(visited.contains(UniqueId.root("group", "group1"))); } + @Test + void getAncestors() { + assertThat(getAncestorsUniqueIds(engineDescriptor)).isEmpty(); + + assertThat(getAncestorsUniqueIds(group1)).containsExactly( // + UniqueId.forEngine("testEngine")); + + assertThat(getAncestorsUniqueIds(group11)).containsExactly( // + UniqueId.root("group", "group1"), // + UniqueId.forEngine("testEngine")); + + assertThat(getAncestorsUniqueIds(leaf111)).containsExactly( // + UniqueId.root("group", "group1-1"), // + UniqueId.root("group", "group1"), // + UniqueId.forEngine("testEngine")); + } + + private List getAncestorsUniqueIds(TestDescriptor descriptor) { + return descriptor.getAncestors().stream().map(TestDescriptor::getUniqueId).toList(); + } + } class GroupDescriptor extends AbstractTestDescriptor {