1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.surefire.junitplatform;
20
21 import org.apache.maven.surefire.api.util.ReflectionUtils;
22 import org.junit.platform.launcher.Launcher;
23 import org.junit.platform.launcher.LauncherDiscoveryRequest;
24 import org.junit.platform.launcher.TestExecutionListener;
25 import org.junit.platform.launcher.TestPlan;
26 import org.junit.platform.launcher.core.LauncherFactory;
27
28
29
30
31
32 class LazyLauncher implements Launcher, AutoCloseable {
33 private AutoCloseable launcherSession;
34
35 private Launcher launcher;
36
37 @Override
38 public void registerTestExecutionListeners(TestExecutionListener... testExecutionListeners) {
39 launcher().registerTestExecutionListeners(testExecutionListeners);
40 }
41
42 @Override
43 public TestPlan discover(LauncherDiscoveryRequest launcherDiscoveryRequest) {
44 return launcher().discover(launcherDiscoveryRequest);
45 }
46
47 @Override
48 public void execute(
49 LauncherDiscoveryRequest launcherDiscoveryRequest, TestExecutionListener... testExecutionListeners) {
50 launcher().execute(launcherDiscoveryRequest, testExecutionListeners);
51 }
52
53 private Launcher launcher() {
54 if (launcher == null) {
55 try {
56 Class<?> sessionClass = Class.forName("org.junit.platform.launcher.LauncherSession");
57 launcherSession = ReflectionUtils.invokeGetter(LauncherFactory.class, null, "openSession");
58 launcher = ReflectionUtils.invokeGetter(sessionClass, launcherSession, "getLauncher");
59 } catch (ClassNotFoundException e) {
60 launcher = LauncherFactory.create();
61 }
62 }
63 return launcher;
64 }
65
66 @Override
67 public void close() throws Exception {
68 if (launcherSession != null) {
69 launcherSession.close();
70 launcherSession = null;
71 }
72 launcher = null;
73 }
74 }