Skip to content

Commit 1a66b58

Browse files
author
peng
committed
getFirstCyclicUID now returns optional
ramp up tests for it
1 parent b529e9c commit 1a66b58

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/EngineDiscoveryResultValidator.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212

1313
import java.util.ArrayDeque;
1414
import java.util.HashSet;
15+
import java.util.Optional;
1516
import java.util.Queue;
1617
import java.util.Set;
17-
import java.util.ArrayList;
1818

1919
import org.junit.platform.commons.util.Preconditions;
2020
import org.junit.platform.engine.TestDescriptor;
@@ -38,31 +38,31 @@ void validate(TestEngine testEngine, TestDescriptor root) {
3838
() -> String.format(
3939
"The discover() method for TestEngine with ID '%s' must return a non-null root TestDescriptor.",
4040
testEngine.getId()));
41-
ArrayList<UniqueId> cyclicUIDs = getCyclicUIDs(root);
42-
Preconditions.condition(cyclicUIDs.isEmpty(),
41+
Optional<UniqueId> cyclicUIDs = getFirstCyclicUID(root);
42+
Preconditions.condition(!cyclicUIDs.isPresent(),
4343
() -> String.format("The discover() method for TestEngine with ID '%s' returned a cyclic graph: "
44-
+ "Unique ID(s) '%s' enter a cycle",
44+
+ "Cycle found at unique ID '%s'",
4545
testEngine.getId(), cyclicUIDs));
4646
}
4747

4848
/**
4949
* @return {@code true} if the tree does <em>not</em> contain a cycle; else {@code false}.
5050
*/
5151
boolean isAcyclic(TestDescriptor root) {
52-
return getCyclicUIDs(root).isEmpty();
52+
return !getFirstCyclicUID(root).isPresent();
5353
}
5454

55-
ArrayList<UniqueId> getCyclicUIDs(TestDescriptor root) {
55+
Optional<UniqueId> getFirstCyclicUID(TestDescriptor root) {
5656
Set<UniqueId> visited = new HashSet<>();
57-
ArrayList<UniqueId> cyclic = new ArrayList<>();
57+
Optional<UniqueId> cyclic = Optional.empty();
5858
visited.add(root.getUniqueId());
5959
Queue<TestDescriptor> queue = new ArrayDeque<>();
6060
queue.add(root);
6161
while (!queue.isEmpty()) {
6262
for (TestDescriptor child : queue.remove().getChildren()) {
6363
UniqueId uid = child.getUniqueId();
6464
if (!visited.add(uid)) {
65-
cyclic.add(uid);
65+
cyclic = Optional.of(uid);
6666
return cyclic; // id already known: cycle detected!
6767
}
6868
if (child.isContainer()) {

platform-tests/src/test/java/org/junit/platform/launcher/core/EngineDiscoveryResultValidatorTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
package org.junit.platform.launcher.core;
1212

13+
import static org.junit.jupiter.api.Assertions.assertEquals;
1314
import static org.junit.jupiter.api.Assertions.assertFalse;
1415
import static org.junit.jupiter.api.Assertions.assertTrue;
1516

@@ -32,6 +33,7 @@ void detectCycleWithDoubleRoot() {
3233

3334
root.addChild(root);
3435
assertFalse(validator.isAcyclic(root));
36+
assertEquals(validator.getFirstCyclicUID(root).get(), UniqueId.forEngine("root"));
3537
}
3638

3739
@Test
@@ -46,6 +48,7 @@ void detectCycleWithDoubleGroup() {
4648

4749
group2.addChild(group1);
4850
assertFalse(validator.isAcyclic(root));
51+
assertEquals(validator.getFirstCyclicUID(root).get(), UniqueId.forEngine("root").append("group", "1"));
4952
}
5053

5154
@Test
@@ -64,6 +67,7 @@ void detectCycleWithDoubleTest() {
6467

6568
group2.addChild(test1);
6669
assertFalse(validator.isAcyclic(root));
70+
assertEquals(validator.getFirstCyclicUID(root).get(), UniqueId.forEngine("root").append("test", "1"));
6771
}
6872

6973
}

0 commit comments

Comments
 (0)