From b6a12436fb3a91eb549a93e85204a94d78dad33b Mon Sep 17 00:00:00 2001 From: Vasil Vasilev Date: Wed, 7 Aug 2024 16:49:54 +0200 Subject: [PATCH] Show the `displayName` of dynamic tests in the sbt output and in the xml test reports - The displayName of dynamic tests is never null or blank. - https://junit.org/junit5/docs/current/api/org.junit.jupiter.api/org/junit/jupiter/api/DynamicTest.html#dynamicTest(java.lang.String,org.junit.jupiter.api.function.Executable) --- .../junit/jupiter/internal/Configuration.java | 6 ++-- .../jupiter/internal/event/TaskName.java | 5 ++-- .../internal/event/DispatcherSampleTests.java | 9 ++++-- .../internal/event/DispatcherTest.java | 11 ++++++-- .../jupiter/internal/event/TaskNameTest.java | 28 ++++++++++++++++--- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/Configuration.java b/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/Configuration.java index 2118159..7ef76ba 100644 --- a/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/Configuration.java +++ b/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/Configuration.java @@ -350,7 +350,7 @@ private String toName(TestIdentifier identifier) { name = VINTAGE_ENGINE.equals(testEngine) ? toVintageName(identifier, lastSegment) - : toName(lastSegment); + : toName(identifier, lastSegment); } return name; @@ -359,7 +359,7 @@ private String toName(TestIdentifier identifier) { /* * Formats a test segment from junit-jupiter. */ - private String toName(Segment segment) { + private String toName(TestIdentifier identifier, Segment segment) { String name; @@ -377,7 +377,7 @@ private String toName(Segment segment) { name = colorTheme.testFactory().format("#" + segment.getValue()); break; case "dynamic-test": - name = colorTheme.dynamicTest().format(":" + segment.getValue()); + name = colorTheme.dynamicTest().format(":" + identifier.getDisplayName()); break; case "test-template": name = colorTheme.testTemplate().format("#" + segment.getValue()); diff --git a/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/event/TaskName.java b/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/event/TaskName.java index 6b0f6c8..fc17c02 100644 --- a/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/event/TaskName.java +++ b/src/library/src/main/java/com/github/sbt/junit/jupiter/internal/event/TaskName.java @@ -101,7 +101,7 @@ static TaskName of(String testSuite, TestIdentifier identifier) { MethodSource methodSource = (MethodSource) testSource; result.nestedSuiteId = nestedSuiteId(testSuite, methodSource.getClassName()); - result.invocation = invocation(UniqueId.parse(identifier.getUniqueId())); + result.invocation = invocation(identifier, UniqueId.parse(identifier.getUniqueId())); result.testName = testName(methodSource.getMethodName(), methodSource.getMethodParameterTypes()); } @@ -159,7 +159,7 @@ static String testName(String methodName, String methodParameterTypes) { * @param id The unique test identifier. * @return A string representation of the current invocation (might be {@code null}). */ - static String invocation(UniqueId id) { + static String invocation(TestIdentifier identifier, UniqueId id) { List segments = id.getSegments(); @@ -169,6 +169,7 @@ static String invocation(UniqueId id) { switch (last.getType()) { case "dynamic-test": + return identifier.getDisplayName(); case "test-template-invocation": return last.getValue().replace("#", ""); } diff --git a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherSampleTests.java b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherSampleTests.java index 6b74aea..3959835 100644 --- a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherSampleTests.java +++ b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherSampleTests.java @@ -20,13 +20,14 @@ import static org.junit.jupiter.api.DynamicTest.dynamicTest; +import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestFactory; import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.function.Executable; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -45,7 +46,11 @@ static class DynamicTests { @TestFactory Collection test() { - return Collections.singletonList(dynamicTest("1st dynamic test", () -> {})); + final Executable dummy = () -> {}; + return Arrays.asList( + dynamicTest("1st dynamic test", dummy), + dynamicTest("2nd dynamic test", dummy), + dynamicTest("3rd dynamic test", dummy)); } } diff --git a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherTest.java b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherTest.java index baf0d0a..104622b 100644 --- a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherTest.java +++ b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/DispatcherTest.java @@ -32,6 +32,7 @@ import com.github.sbt.junit.jupiter.internal.event.DispatcherSampleTests.NestedTests; import com.github.sbt.junit.jupiter.internal.event.DispatcherSampleTests.ParameterizedTests; import com.github.sbt.junit.jupiter.internal.event.DispatcherSampleTests.SingleParamTests; +import java.util.Arrays; import java.util.List; import junit.TestRunner; import org.hamcrest.FeatureMatcher; @@ -121,12 +122,16 @@ public void shouldReportDynamicTests() { List result = testRunner.eventHandler().byStatus(Status.Success); String suiteName = ".event.DispatcherSampleTests$DynamicTests"; - String testName = "test():1"; + List testNames = + Arrays.asList( + "test():1st dynamic test", "test():2nd dynamic test", "test():3rd dynamic test"); - assertThat(result, hasSize(1)); + assertThat(result, hasSize(3)); assertThat(result, hasItem(fullyQualifiedName(endsWith(suiteName)))); assertThat(result, hasItem(selector(instanceOf(TestSelector.class)))); - assertThat(result, hasItem(selector(testName(equalTo(testName))))); + for (String testName : testNames) { + assertThat(result, hasItem(selector(testName(equalTo(testName))))); + } } @Test diff --git a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/TaskNameTest.java b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/TaskNameTest.java index cddbeb8..1eac10d 100644 --- a/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/TaskNameTest.java +++ b/src/library/src/test/java/com/github/sbt/junit/jupiter/internal/event/TaskNameTest.java @@ -24,7 +24,10 @@ import org.junit.Test; import org.junit.experimental.runners.Enclosed; +import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.UniqueId; +import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor; +import org.junit.platform.launcher.TestIdentifier; import org.junit.runner.RunWith; /** @author Michael Aichler */ @@ -98,9 +101,11 @@ public static class InvocationTest { public void shouldFindDynamicTest() { UniqueId id = UniqueId.root("method", "someTestMethod").append("dynamic-test", "#1"); + TestDescriptor descriptor = new DummyTestDescriptor(id, "myDynamicTest"); + TestIdentifier identifier = TestIdentifier.from(descriptor); - String result = TaskName.invocation(id); - assertThat(result, equalTo("1")); + String result = TaskName.invocation(identifier, id); + assertThat(result, equalTo("myDynamicTest")); } @Test @@ -108,8 +113,10 @@ public void shouldFindTestTemplateInvocation() { UniqueId id = UniqueId.root("method", "someTestMethod").append("test-template-invocation", "#1"); + TestDescriptor descriptor = new DummyTestDescriptor(id, "myTestTemplateInvocation"); + TestIdentifier identifier = TestIdentifier.from(descriptor); - String result = TaskName.invocation(id); + String result = TaskName.invocation(identifier, id); assertThat(result, equalTo("1")); } @@ -117,9 +124,22 @@ public void shouldFindTestTemplateInvocation() { public void shouldReturnNullOtherwise() { UniqueId id = UniqueId.root("method", "someTestMethod"); + TestDescriptor descriptor = new DummyTestDescriptor(id, "someTestMethod"); + TestIdentifier identifier = TestIdentifier.from(descriptor); - String result = TaskName.invocation(id); + String result = TaskName.invocation(identifier, id); assertThat(result, nullValue()); } } + + private static class DummyTestDescriptor extends AbstractTestDescriptor { + protected DummyTestDescriptor(UniqueId uniqueId, String displayName) { + super(uniqueId, displayName); + } + + @Override + public Type getType() { + return Type.CONTAINER_AND_TEST; + } + } }