Skip to content

Commit 34c802c

Browse files
committed
prevent re-evaluation of suite classes
1 parent 3d9917d commit 34c802c

File tree

2 files changed

+75
-41
lines changed

2 files changed

+75
-41
lines changed
Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package org.pitest.testapi.execute;
22

3-
import java.util.ArrayList;
4-
import java.util.Collection;
5-
import java.util.HashSet;
63
import java.util.List;
7-
import java.util.Set;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.Stream;
6+
import java.util.stream.StreamSupport;
87

98
import org.pitest.testapi.Configuration;
109
import org.pitest.testapi.NullExecutionListener;
@@ -13,7 +12,6 @@
1312

1413
/**
1514
* Scans classes to discover TestUnits
16-
*
1715
*/
1816
public class FindTestUnits {
1917

@@ -30,42 +28,11 @@ public FindTestUnits(Configuration config, TestUnitExecutionListener listener) {
3028
}
3129

3230
public List<TestUnit> findTestUnitsForAllSuppliedClasses(Iterable<Class<?>> classes) {
33-
final List<TestUnit> testUnits = new ArrayList<>();
34-
35-
for (final Class<?> c : classes) {
36-
final Collection<TestUnit> testUnitsFromClass = getTestUnits(c);
37-
testUnits.addAll(testUnitsFromClass);
38-
}
39-
40-
return testUnits;
41-
42-
}
43-
44-
private Collection<TestUnit> getTestUnits(final Class<?> suiteClass) {
45-
final List<TestUnit> tus = new ArrayList<>();
46-
final Set<Class<?>> visitedClasses = new HashSet<>();
47-
findTestUnits(tus, visitedClasses, suiteClass);
48-
return tus;
49-
}
50-
51-
private void findTestUnits(final List<TestUnit> tus,
52-
final Set<Class<?>> visitedClasses, final Class<?> suiteClass) {
53-
visitedClasses.add(suiteClass);
54-
final Collection<Class<?>> tcs = this.config.testSuiteFinder().apply(
55-
suiteClass);
56-
57-
for (final Class<?> tc : tcs) {
58-
if (!visitedClasses.contains(tc)) {
59-
findTestUnits(tus, visitedClasses, tc);
60-
}
61-
}
62-
63-
final List<TestUnit> testsInThisClass = this.config.testUnitFinder()
64-
.findTestUnits(suiteClass, listener);
65-
if (!testsInThisClass.isEmpty()) {
66-
tus.addAll(testsInThisClass);
67-
}
68-
31+
return StreamSupport.stream(classes.spliterator(), false)
32+
.flatMap(c -> Stream.concat(Stream.of(c), this.config.testSuiteFinder().apply(c).stream()))
33+
.distinct()
34+
.flatMap(c -> this.config.testUnitFinder().findTestUnits(c, listener).stream())
35+
.collect(Collectors.toList());
6936
}
7037

7138
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.pitest.testapi.execute;
2+
3+
import org.junit.Test;
4+
import org.pitest.help.PitHelpError;
5+
import org.pitest.testapi.Configuration;
6+
import org.pitest.testapi.Description;
7+
import org.pitest.testapi.ResultCollector;
8+
import org.pitest.testapi.TestSuiteFinder;
9+
import org.pitest.testapi.TestUnit;
10+
import org.pitest.testapi.TestUnitFinder;
11+
12+
import java.util.List;
13+
import java.util.Optional;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
17+
public class FindTestUnitsTest {
18+
19+
@Test
20+
public void doesNotDuplicateTestsWhenClassesReintroducedViaSuite() {
21+
Configuration config = new Configuration() {
22+
@Override
23+
public TestUnitFinder testUnitFinder() {
24+
return (c,n) -> {
25+
if (c.getName().contains("ATest")) {
26+
return List.of(new FakeTestUnit());
27+
}
28+
return List.of();
29+
};
30+
}
31+
32+
@Override
33+
public TestSuiteFinder testSuiteFinder() {
34+
return c -> List.of(ATest.class, ATest2.class);
35+
}
36+
37+
@Override
38+
public Optional<PitHelpError> verifyEnvironment() {
39+
return Optional.empty();
40+
}
41+
};
42+
FindTestUnits underTest = new FindTestUnits(config);
43+
44+
List<TestUnit> actual = underTest.findTestUnitsForAllSuppliedClasses(List.of(ATest2.class, ATest.class));
45+
assertThat(actual).hasSize(2);
46+
}
47+
}
48+
49+
class ATest {
50+
51+
}
52+
53+
class ATest2 {
54+
55+
}
56+
57+
class FakeTestUnit implements TestUnit {
58+
@Override
59+
public void execute(ResultCollector rc) {
60+
61+
}
62+
63+
@Override
64+
public Description getDescription() {
65+
return null;
66+
}
67+
}

0 commit comments

Comments
 (0)