Skip to content

Commit 75b2932

Browse files
committed
Use technical name of parent as container name of test description
Prior to this commit the container name was determined from the JavaClassSource or JavaMethodSource of the test identifier instead of from the source of the parent identifier.
1 parent f7ed6ec commit 75b2932

File tree

4 files changed

+69
-64
lines changed

4 files changed

+69
-64
lines changed

junit-platform-runner/src/main/java/org/junit/platform/runner/JUnitPlatformTestTree.java

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Map.Entry;
2121
import java.util.Optional;
2222
import java.util.Set;
23+
import java.util.function.Function;
2324
import java.util.function.Predicate;
2425

2526
import org.junit.platform.commons.util.StringUtils;
@@ -38,15 +39,19 @@ class JUnitPlatformTestTree {
3839

3940
private final Map<TestIdentifier, Description> descriptions = new HashMap<>();
4041
private final TestPlan plan;
41-
private final boolean useTechnicalNames;
42+
private final Function<TestIdentifier, String> nameExtractor;
4243
private final Description suiteDescription;
4344

4445
JUnitPlatformTestTree(TestPlan plan, Class<?> testClass) {
4546
this.plan = plan;
46-
this.useTechnicalNames = testClass.isAnnotationPresent(UseTechnicalNames.class);
47+
this.nameExtractor = useTechnicalNames(testClass) ? this::getTechnicalName : TestIdentifier::getDisplayName;
4748
this.suiteDescription = generateSuiteDescription(plan, testClass);
4849
}
4950

51+
private static boolean useTechnicalNames(Class<?> testClass) {
52+
return testClass.isAnnotationPresent(UseTechnicalNames.class);
53+
}
54+
5055
Description getSuiteDescription() {
5156
return this.suiteDescription;
5257
}
@@ -80,45 +85,12 @@ private void buildDescription(TestIdentifier identifier, Description parent, Tes
8085
}
8186

8287
private Description createJUnit4Description(TestIdentifier identifier, TestPlan testPlan) {
88+
String name = nameExtractor.apply(identifier);
8389
if (identifier.isTest()) {
84-
String containerName;
85-
String name;
86-
87-
if (this.useTechnicalNames) {
88-
containerName = getTechnicalContainerName(identifier, testPlan);
89-
name = getTechnicalName(identifier);
90-
}
91-
else {
92-
containerName = testPlan.getParent(identifier).orElse(identifier).getDisplayName();
93-
name = identifier.getDisplayName();
94-
}
95-
90+
String containerName = testPlan.getParent(identifier).map(nameExtractor).orElse("<unrooted>");
9691
return Description.createTestDescription(containerName, name, identifier.getUniqueId());
9792
}
98-
else {
99-
String name = (this.useTechnicalNames ? getTechnicalName(identifier) : identifier.getDisplayName());
100-
return Description.createSuiteDescription(name, identifier.getUniqueId());
101-
}
102-
}
103-
104-
private String getTechnicalContainerName(TestIdentifier testIdentifier, TestPlan testPlan) {
105-
Optional<TestSource> optionalSource = testIdentifier.getSource();
106-
if (optionalSource.isPresent()) {
107-
TestSource source = optionalSource.get();
108-
if (source instanceof JavaClassSource) {
109-
return ((JavaClassSource) source).getJavaClass().getName();
110-
}
111-
else if (source instanceof JavaMethodSource) {
112-
return ((JavaMethodSource) source).getJavaClass().getName();
113-
}
114-
}
115-
116-
// Else fall back to display name of parent
117-
// @formatter:off
118-
return testPlan.getParent(testIdentifier)
119-
.map(TestIdentifier::getDisplayName)
120-
.orElse("<unrooted>");
121-
// @formatter:on
93+
return Description.createSuiteDescription(name, identifier.getUniqueId());
12294
}
12395

12496
private String getTechnicalName(TestIdentifier testIdentifier) {

platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/DummyTestDescriptor.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class DummyTestDescriptor extends AbstractTestDescriptor implements Node<
3030
this(uniqueId, displayName, null, runnable);
3131
}
3232

33-
DummyTestDescriptor(UniqueId uniqueId, String displayName, TestSource source, Runnable runnable) {
33+
public DummyTestDescriptor(UniqueId uniqueId, String displayName, TestSource source, Runnable runnable) {
3434
super(uniqueId, displayName);
3535
if (source != null) {
3636
setSource(source);
@@ -40,17 +40,17 @@ public class DummyTestDescriptor extends AbstractTestDescriptor implements Node<
4040

4141
@Override
4242
public boolean isTest() {
43-
return true;
43+
return !isContainer();
4444
}
4545

4646
@Override
4747
public boolean isContainer() {
48-
return false;
48+
return runnable == null;
4949
}
5050

5151
@Override
5252
public boolean isLeaf() {
53-
return !isContainer();
53+
return isTest();
5454
}
5555

5656
public void markSkipped(String reason) {
@@ -65,7 +65,9 @@ public SkipResult shouldBeSkipped(DummyEngineExecutionContext context) throws Ex
6565

6666
@Override
6767
public DummyEngineExecutionContext execute(DummyEngineExecutionContext context) {
68-
runnable.run();
68+
if (runnable != null) {
69+
runnable.run();
70+
}
6971
return context;
7072
}
7173

platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/DummyTestEngine.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.junit.platform.engine.EngineDiscoveryRequest;
1616
import org.junit.platform.engine.ExecutionRequest;
1717
import org.junit.platform.engine.TestDescriptor;
18+
import org.junit.platform.engine.TestSource;
1819
import org.junit.platform.engine.UniqueId;
1920
import org.junit.platform.engine.support.descriptor.JavaMethodSource;
2021

@@ -63,6 +64,13 @@ public DummyTestDescriptor addTest(String uniqueName, String displayName, Runnab
6364
return child;
6465
}
6566

67+
public DummyTestDescriptor addContainer(String uniqueName, String displayName, TestSource source) {
68+
UniqueId uniqueId = engineDescriptor.getUniqueId().append("container", uniqueName);
69+
DummyTestDescriptor container = new DummyTestDescriptor(uniqueId, displayName, source, null);
70+
engineDescriptor.addChild(container);
71+
return container;
72+
}
73+
6674
@Override
6775
public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) {
6876
return engineDescriptor;

platform-tests/src/test/java/org/junit/platform/runner/JUnitPlatformRunnerTests.java

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import static org.assertj.core.api.Assertions.fail;
1818
import static org.junit.jupiter.api.Assertions.assertAll;
1919
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertNull;
2021
import static org.junit.jupiter.api.Assertions.assertThrows;
2122
import static org.junit.jupiter.api.Assertions.assertTrue;
2223
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -36,7 +37,6 @@
3637
import static org.mockito.Mockito.when;
3738

3839
import java.lang.reflect.Method;
39-
import java.util.ArrayList;
4040
import java.util.List;
4141

4242
import org.junit.jupiter.api.Nested;
@@ -55,6 +55,9 @@
5555
import org.junit.platform.engine.discovery.UniqueIdSelector;
5656
import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor;
5757
import org.junit.platform.engine.support.descriptor.EngineDescriptor;
58+
import org.junit.platform.engine.support.descriptor.JavaClassSource;
59+
import org.junit.platform.engine.support.descriptor.JavaMethodSource;
60+
import org.junit.platform.engine.support.hierarchical.DummyTestDescriptor;
5861
import org.junit.platform.engine.support.hierarchical.DummyTestEngine;
5962
import org.junit.platform.engine.test.TestDescriptorStub;
6063
import org.junit.platform.engine.test.TestEngineStub;
@@ -388,53 +391,73 @@ void reportsIgnoredEventsForLeavesWhenContainerIsSkipped() throws Exception {
388391
class Descriptions {
389392

390393
@Test
391-
void descriptionForJavaMethodSource() throws Exception {
394+
void descriptionForJavaMethodAndClassSources() throws Exception {
392395
DummyTestEngine engine = new DummyTestEngine("dummy");
393396
Method failingTest = getClass().getDeclaredMethod("failingTest");
394-
engine.addTest(failingTest, () -> {
395-
});
397+
DummyTestDescriptor containerDescriptor = engine.addContainer("uniqueContainerName", "containerDisplayName",
398+
new JavaClassSource(getClass()));
399+
containerDescriptor.addChild(
400+
new DummyTestDescriptor(containerDescriptor.getUniqueId().append("test", "failingTest"),
401+
"testDisplayName", new JavaMethodSource(failingTest), () -> {
402+
}));
396403

397404
JUnitPlatform platformRunner = new JUnitPlatform(TestClass.class, createLauncher(engine));
398405

399-
ArrayList<Description> children = platformRunner.getDescription().getChildren();
406+
List<Description> children = platformRunner.getDescription().getChildren();
400407
assertEquals(1, children.size());
401408
Description engineDescription = children.get(0);
402409
assertEquals("dummy", engineDescription.getDisplayName());
403410

404-
children = engineDescription.getChildren();
405-
assertEquals(1, children.size());
406-
Description testDescription = children.get(0);
411+
Description containerDescription = getOnlyElement(engineDescription.getChildren());
412+
Description testDescription = getOnlyElement(containerDescription.getChildren());
413+
407414
// @formatter:off
408415
assertAll(
409-
() -> assertEquals("dummy", testDescription.getClassName(), "class name"),
410-
() -> assertEquals("failingTest", testDescription.getMethodName(), "method name"),
411-
() -> assertEquals("failingTest(dummy)", testDescription.getDisplayName(), "display name")
416+
() -> assertEquals("dummy", engineDescription.getDisplayName(), "engine display name"),
417+
() -> assertEquals("dummy", engineDescription.getClassName(), "engine class name"),
418+
() -> assertNull(engineDescription.getMethodName(), "engine method name"),
419+
() -> assertEquals("containerDisplayName", containerDescription.getDisplayName(), "container display name"),
420+
() -> assertEquals("containerDisplayName", containerDescription.getClassName(), "container class name"),
421+
() -> assertNull(containerDescription.getMethodName(), "container method name"),
422+
() -> assertEquals("testDisplayName(containerDisplayName)", testDescription.getDisplayName(), "test display name"),
423+
() -> assertEquals("containerDisplayName", testDescription.getClassName(), "test class name"),
424+
() -> assertEquals("testDisplayName", testDescription.getMethodName(), "test method name")
412425
);
413426
// @formatter:on
414427
}
415428

416429
@Test
417-
void descriptionForJavaMethodSourceUsingTechnicalNames() throws Exception {
430+
void descriptionForJavaMethodAndClassSourcesUsingTechnicalNames() throws Exception {
418431
DummyTestEngine engine = new DummyTestEngine("dummy");
419432
Method failingTest = getClass().getDeclaredMethod("failingTest");
420-
engine.addTest(failingTest, () -> {
421-
});
433+
DummyTestDescriptor containerDescriptor = engine.addContainer("uniqueContainerName", "containerDisplayName",
434+
new JavaClassSource(getClass()));
435+
containerDescriptor.addChild(
436+
new DummyTestDescriptor(containerDescriptor.getUniqueId().append("test", "failingTest"),
437+
"testDisplayName", new JavaMethodSource(failingTest), () -> {
438+
}));
422439

423440
JUnitPlatform platformRunner = new JUnitPlatform(TestClassWithTechnicalNames.class, createLauncher(engine));
424441

425-
ArrayList<Description> children = platformRunner.getDescription().getChildren();
442+
List<Description> children = platformRunner.getDescription().getChildren();
426443
assertEquals(1, children.size());
427444
Description engineDescription = children.get(0);
428445
assertEquals("dummy", engineDescription.getDisplayName());
429446

430-
children = engineDescription.getChildren();
431-
assertEquals(1, children.size());
432-
Description testDescription = children.get(0);
447+
Description containerDescription = getOnlyElement(engineDescription.getChildren());
448+
Description testDescription = getOnlyElement(containerDescription.getChildren());
449+
433450
// @formatter:off
434451
assertAll(
435-
() -> assertEquals(getClass().getName(), testDescription.getClassName(), "class name"),
436-
() -> assertEquals("failingTest", testDescription.getMethodName(), "method name"),
437-
() -> assertEquals("failingTest(" + getClass().getName() + ")", testDescription.getDisplayName(), "display name")
452+
() -> assertEquals("dummy", engineDescription.getDisplayName(), "engine display name"),
453+
() -> assertEquals("dummy", engineDescription.getClassName(), "engine class name"),
454+
() -> assertNull(engineDescription.getMethodName(), "engine method name"),
455+
() -> assertEquals(getClass().getName(), containerDescription.getDisplayName(), "container display name"),
456+
() -> assertEquals(getClass().getName(), containerDescription.getClassName(), "container class name"),
457+
() -> assertNull(containerDescription.getMethodName(), "container method name"),
458+
() -> assertEquals("failingTest(" + getClass().getName() + ")", testDescription.getDisplayName(), "test display name"),
459+
() -> assertEquals(getClass().getName(), testDescription.getClassName(), "test class name"),
460+
() -> assertEquals("failingTest", testDescription.getMethodName(), "test method name")
438461
);
439462
// @formatter:on
440463
}

0 commit comments

Comments
 (0)