Skip to content

Commit d739292

Browse files
committed
Add @Suite classes via which issue is encountered to message
1 parent f1a0f9d commit d739292

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@
1010

1111
package org.junit.platform.suite.engine;
1212

13+
import static java.util.function.Predicate.isEqual;
14+
import static java.util.stream.Collectors.joining;
1315
import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation;
16+
import static org.junit.platform.commons.util.FunctionUtils.where;
1417
import static org.junit.platform.suite.commons.SuiteLauncherDiscoveryRequestBuilder.request;
1518

1619
import java.lang.reflect.Method;
1720
import java.util.List;
21+
import java.util.function.BiFunction;
22+
import java.util.function.Predicate;
1823

1924
import org.junit.platform.commons.JUnitException;
2025
import org.junit.platform.commons.support.ReflectionSupport;
@@ -27,6 +32,7 @@
2732
import org.junit.platform.engine.TestDescriptor;
2833
import org.junit.platform.engine.TestExecutionResult;
2934
import org.junit.platform.engine.UniqueId;
35+
import org.junit.platform.engine.UniqueId.Segment;
3036
import org.junit.platform.engine.discovery.DiscoverySelectors;
3137
import org.junit.platform.engine.reporting.OutputDirectoryProvider;
3238
import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor;
@@ -75,7 +81,7 @@ final class SuiteTestDescriptor extends AbstractTestDescriptor {
7581
this.failIfNoTests = getFailIfNoTests(suiteClass);
7682
this.suiteClass = suiteClass;
7783
this.lifecycleMethods = new LifecycleMethods(suiteClass, issueReporter);
78-
this.discoveryRequestBuilder.listener(new DiscoveryIssueForwardingListener(discoveryListener));
84+
this.discoveryRequestBuilder.listener(DiscoveryIssueForwardingListener.create(id, discoveryListener));
7985
}
8086

8187
private static Boolean getFailIfNoTests(Class<?> suiteClass) {
@@ -216,25 +222,43 @@ private static class LifecycleMethods {
216222

217223
private static class DiscoveryIssueForwardingListener implements LauncherDiscoveryListener {
218224

225+
private static final Predicate<Segment> SUITE_SEGMENTS = where(Segment::getType, isEqual(SEGMENT_TYPE));
226+
227+
static DiscoveryIssueForwardingListener create(UniqueId id, EngineDiscoveryListener discoveryListener) {
228+
boolean isNestedSuite = id.getSegments().stream().filter(SUITE_SEGMENTS).count() > 1;
229+
if (isNestedSuite) {
230+
return new DiscoveryIssueForwardingListener(discoveryListener, (__, issue) -> issue);
231+
}
232+
return new DiscoveryIssueForwardingListener(discoveryListener,
233+
(engineUniqueId, issue) -> issue.withMessage(message -> {
234+
String engineId = engineUniqueId.getLastSegment().getValue();
235+
if (SuiteEngineDescriptor.ENGINE_ID.equals(engineId)) {
236+
return message;
237+
}
238+
String suitePath = engineUniqueId.getSegments().stream() //
239+
.filter(SUITE_SEGMENTS) //
240+
.map(Segment::getValue) //
241+
.collect(joining(" > "));
242+
if (message.endsWith(".")) {
243+
message = message.substring(0, message.length() - 1);
244+
}
245+
return String.format("[%s] %s (via @Suite %s).", engineId, message, suitePath);
246+
}));
247+
}
248+
219249
private final EngineDiscoveryListener discoveryListener;
250+
private final BiFunction<UniqueId, DiscoveryIssue, DiscoveryIssue> issueTransformer;
220251

221-
DiscoveryIssueForwardingListener(EngineDiscoveryListener discoveryListener) {
252+
private DiscoveryIssueForwardingListener(EngineDiscoveryListener discoveryListener,
253+
BiFunction<UniqueId, DiscoveryIssue, DiscoveryIssue> issueTransformer) {
222254
this.discoveryListener = discoveryListener;
255+
this.issueTransformer = issueTransformer;
223256
}
224257

225258
@Override
226259
public void issueEncountered(UniqueId engineUniqueId, DiscoveryIssue issue) {
227-
String engineId = engineUniqueId.getLastSegment().getValue();
228-
if (!SuiteEngineDescriptor.ENGINE_ID.equals(engineId)) {
229-
issue = issue.withMessage(message -> {
230-
String prefix = String.format("[%s] ", engineId);
231-
if (message.startsWith(prefix)) {
232-
return message;
233-
}
234-
return prefix + message;
235-
});
236-
}
237-
discoveryListener.issueEncountered(engineUniqueId, issue);
260+
DiscoveryIssue transformedIssue = this.issueTransformer.apply(engineUniqueId, issue);
261+
this.discoveryListener.issueEncountered(engineUniqueId, transformedIssue);
238262
}
239263
}
240264
}

platform-tests/src/test/java/org/junit/platform/suite/engine/SuiteEngineTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.junit.platform.suite.engine.testsuites.EmptyDynamicTestWithFailIfNoTestFalseSuite;
6161
import org.junit.platform.suite.engine.testsuites.EmptyTestCaseSuite;
6262
import org.junit.platform.suite.engine.testsuites.EmptyTestCaseWithFailIfNoTestFalseSuite;
63+
import org.junit.platform.suite.engine.testsuites.ErroneousTestSuite;
6364
import org.junit.platform.suite.engine.testsuites.InheritedSuite;
6465
import org.junit.platform.suite.engine.testsuites.MultiEngineSuite;
6566
import org.junit.platform.suite.engine.testsuites.MultipleSuite;
@@ -602,7 +603,10 @@ void discoveryIssueOfNestedTestEnginesAreReported() throws Exception {
602603
assertThat(discoveryIssues).hasSize(1);
603604

604605
var issue = discoveryIssues.getFirst();
605-
assertThat(issue.message()).startsWith("[junit-jupiter] @BeforeAll method");
606+
assertThat(issue.message()) //
607+
.startsWith("[junit-jupiter] @BeforeAll method") //
608+
.endsWith(" (via @Suite %s > %s).".formatted(SuiteWithErroneousTestSuite.class.getName(),
609+
ErroneousTestSuite.class.getName()));
606610

607611
var method = ErroneousTestCase.class.getDeclaredMethod("nonStaticLifecycleMethod");
608612
assertThat(issue.source()).contains(MethodSource.from(method));

platform-tests/src/test/java/org/junit/platform/suite/engine/testsuites/ErroneousTestSuite.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616

1717
@Suite
1818
@SelectClasses(ErroneousTestCase.class)
19-
class ErroneousTestSuite {
19+
public class ErroneousTestSuite {
2020
}

0 commit comments

Comments
 (0)