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.LauncherDiscoveryListener;
24 import org.junit.platform.launcher.LauncherDiscoveryRequest;
25 import org.junit.platform.launcher.TestExecutionListener;
26 import org.junit.platform.launcher.TestPlan;
27 import org.junit.platform.launcher.core.LauncherFactory;
28
29
30
31
32
33 class LazyLauncher implements Launcher, AutoCloseable {
34 private AutoCloseable launcherSession;
35
36 private Launcher launcher;
37
38 @Override
39 public void registerLauncherDiscoveryListeners(LauncherDiscoveryListener... listeners) {
40 launcher().registerLauncherDiscoveryListeners(listeners);
41 }
42
43 @Override
44 public void registerTestExecutionListeners(TestExecutionListener... testExecutionListeners) {
45 launcher().registerTestExecutionListeners(testExecutionListeners);
46 }
47
48 @Override
49 public TestPlan discover(LauncherDiscoveryRequest launcherDiscoveryRequest) {
50 return launcher().discover(launcherDiscoveryRequest);
51 }
52
53 @Override
54 public void execute(
55 LauncherDiscoveryRequest launcherDiscoveryRequest, TestExecutionListener... testExecutionListeners) {
56 launcher().execute(launcherDiscoveryRequest, testExecutionListeners);
57 }
58
59 @Override
60 public void execute(TestPlan testPlan, TestExecutionListener... listeners) {
61 launcher().execute(testPlan, listeners);
62 }
63
64 private Launcher launcher() {
65 if (launcher == null) {
66 try {
67 Class<?> sessionClass = Class.forName("org.junit.platform.launcher.LauncherSession");
68 launcherSession = ReflectionUtils.invokeGetter(LauncherFactory.class, null, "openSession");
69 launcher = ReflectionUtils.invokeGetter(sessionClass, launcherSession, "getLauncher");
70 } catch (ClassNotFoundException e) {
71 launcher = LauncherFactory.create();
72 }
73 }
74 return launcher;
75 }
76
77 @Override
78 public void close() throws Exception {
79 if (launcherSession != null) {
80 launcherSession.close();
81 launcherSession = null;
82 }
83 launcher = null;
84 }
85 }