Skip to content

Commit 53f3232

Browse files
authored
Merge pull request #3749 from kriegfrj/3746-regression-test
[junit-platform] Regression test for #3746
2 parents 9b541a2 + fc7e5a2 commit 53f3232

File tree

1 file changed

+85
-14
lines changed

1 file changed

+85
-14
lines changed

biz.aQute.tester.test/test/aQute/tester/bundle/engine/test/BundleEngineTest.java

Lines changed: 85 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static aQute.tester.bundle.engine.BundleEngine.CHECK_UNRESOLVED;
44
import static org.assertj.core.api.Assertions.allOf;
5+
import static org.assertj.core.api.Assertions.assertThat;
56
import static org.assertj.core.api.Assertions.assertThatThrownBy;
67
import static org.junit.platform.commons.util.FunctionUtils.where;
78
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
@@ -22,9 +23,12 @@
2223

2324
import java.io.PrintWriter;
2425
import java.lang.reflect.Method;
26+
import java.util.ArrayList;
2527
import java.util.List;
2628
import java.util.function.Supplier;
29+
import java.util.stream.Collectors;
2730

31+
import org.assertj.core.api.AutoCloseableSoftAssertions;
2832
import org.assertj.core.api.Condition;
2933
import org.junit.jupiter.api.AfterEach;
3034
import org.junit.jupiter.api.BeforeEach;
@@ -40,6 +44,7 @@
4044
import org.junit.platform.engine.TestEngine;
4145
import org.junit.platform.engine.TestExecutionResult;
4246
import org.junit.platform.engine.UniqueId;
47+
import org.junit.platform.engine.discovery.ClassSelector;
4348
import org.junit.platform.engine.support.descriptor.EngineDescriptor;
4449
import org.junit.platform.testkit.engine.EngineTestKit;
4550
import org.junit.platform.testkit.engine.EngineTestKit.Builder;
@@ -119,6 +124,14 @@ public void setUp(TestInfo info) {
119124
}
120125
}
121126

127+
protected void startLaunchpadNoEngines() {
128+
builder = new LaunchpadBuilder();
129+
builder.bndrun("bundleenginetest-noengines.bndrun")
130+
.excludeExport("aQute.tester.bundle.engine")
131+
.excludeExport("aQute.tester.bundle.engine.discovery");
132+
startLaunchpad();
133+
}
134+
122135
protected void startLaunchpad() {
123136
if (DEBUG) {
124137
builder.debug();
@@ -174,11 +187,7 @@ public void outsideOfFramework_hasInitializationError() throws Exception {
174187
@Test
175188
@Tag(CUSTOM_LAUNCH)
176189
public void withNoEngines_reportsMissingEngines_andSkipsMainTests() throws Exception {
177-
builder = new LaunchpadBuilder();
178-
builder = builder.bndrun("bundleenginetest-noengines.bndrun")
179-
.excludeExport("aQute.tester.bundle.engine")
180-
.excludeExport("aQute.tester.bundle.engine.discovery");
181-
startLaunchpad();
190+
startLaunchpadNoEngines();
182191

183192
Bundle testBundle = testBundler.startTestBundle(JUnit4Test.class);
184193

@@ -270,11 +279,7 @@ public void execute(ExecutionRequest request) {
270279
@Test
271280
@Tag(CUSTOM_LAUNCH)
272281
public void withEngineWithServiceSpecCommentsAndWhitespace_loadsEngine() throws Exception {
273-
builder = new LaunchpadBuilder();
274-
builder.bndrun("bundleenginetest-noengines.bndrun")
275-
.excludeExport("aQute.tester.bundle.engine")
276-
.excludeExport("aQute.tester.bundle.engine.discovery");
277-
startLaunchpad();
282+
startLaunchpadNoEngines();
278283

279284
Bundle engineBundle = testBundler.bundleWithEE()
280285
.includeResource("META-INF/services/" + TestEngine.class.getName())
@@ -1126,10 +1131,9 @@ public void testClass_withBothJUnit3And4_raisesAnError() {
11261131
.debug(debugStr)
11271132
.assertThatEvents()
11281133
.haveExactly(1,
1129-
event(uniqueIdSubstring(test.getSymbolicName()), testClass(JUnit3And4Test.class),
1130-
finishedWithFailure(instanceOf(JUnitException.class),
1131-
message(
1132-
x -> x.matches("^(?si).*TestCase.*JUnit 4 annotations.*annotations will be ignored.*$")))));
1134+
event(uniqueIdSubstring(test.getSymbolicName()), testClass(JUnit3And4Test.class), finishedWithFailure(
1135+
instanceOf(JUnitException.class),
1136+
message(x -> x.matches("^(?si).*TestCase.*JUnit 4 annotations.*annotations will be ignored.*$")))));
11331137

11341138
}
11351139

@@ -1178,4 +1182,71 @@ public void testClass_withBothJUnit3AndOtherJUnit_doesntRaiseAnError() {
11781182
.assertThatEvents()
11791183
.haveExactly(0, finishedWithFailure(instanceOf(JUnitException.class)));
11801184
}
1185+
1186+
public static class SubEngine implements TestEngine {
1187+
1188+
static EngineDiscoveryRequest request;
1189+
1190+
@Override
1191+
public String getId() {
1192+
return "sub-engine";
1193+
}
1194+
1195+
@Override
1196+
public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) {
1197+
request = discoveryRequest;
1198+
return null;
1199+
}
1200+
1201+
@Override
1202+
public void execute(ExecutionRequest request) {}
1203+
}
1204+
1205+
@Test
1206+
@Tag(CUSTOM_LAUNCH)
1207+
public void subRequest_resolvesAndRemovesBundleSelectors() throws Exception {
1208+
startLaunchpadNoEngines();
1209+
1210+
Bundle engineBundle = testBundler.bundleWithEE()
1211+
.includeResource("META-INF/services/" + TestEngine.class.getName())
1212+
.literal(SubEngine.class.getName())
1213+
.addResource(SubEngine.class)
1214+
.start();
1215+
Bundle testBundle = startTestBundle(JUnit4Test.class);
1216+
1217+
EngineDiscoveryRequest request;
1218+
1219+
synchronized (SubEngine.class) {
1220+
SubEngine.request = null;
1221+
1222+
engineInFramework()
1223+
.selectors(selectBundle(testBundle))
1224+
.execute()
1225+
.all()
1226+
.debug(debugStr);
1227+
request = SubEngine.request;
1228+
}
1229+
assertThat(request).isNotNull();
1230+
1231+
Class<?> junit4TestInBundle = testBundle.loadClass(JUnit4Test.class.getName());
1232+
1233+
List<Class<?>> selectedClasses = new ArrayList<>();
1234+
1235+
try (AutoCloseableSoftAssertions softly = new AutoCloseableSoftAssertions()) {
1236+
softly.assertThat(request.getSelectorsByType(BundleSelector.class)).as("should remove BundleSelectors")
1237+
.isEmpty();
1238+
List<DiscoverySelector> selectors = request.getSelectorsByType(DiscoverySelector.class);
1239+
softly.assertThat(selectors)
1240+
.as("size")
1241+
.hasSize(1);
1242+
List<Class<?>> actualClasses = selectors.stream()
1243+
.filter(ClassSelector.class::isInstance)
1244+
.map(ClassSelector.class::cast)
1245+
.map(classSelector -> classSelector.getJavaClass())
1246+
.collect(Collectors.toList());
1247+
softly.assertThat(actualClasses)
1248+
.as("classes")
1249+
.containsExactlyInAnyOrder(junit4TestInBundle);
1250+
}
1251+
}
11811252
}

0 commit comments

Comments
 (0)