1 package org.apache.maven.plugin.surefire;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
23 import org.apache.maven.surefire.booter.ClasspathConfiguration;
24 import org.apache.maven.surefire.booter.ProviderConfiguration;
25 import org.apache.maven.surefire.booter.StartupConfiguration;
26 import org.apache.maven.surefire.booter.SurefireExecutionException;
27 import org.apache.maven.surefire.suite.RunResult;
28 import org.apache.maven.surefire.testset.TestSetFailedException;
29 import org.apache.maven.surefire.util.DefaultScanResult;
30
31 import javax.annotation.Nonnull;
32 import java.lang.reflect.InvocationTargetException;
33 import java.util.Map;
34
35 import static org.apache.maven.surefire.booter.ProviderFactory.invokeProvider;
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class InPluginVMSurefireStarter
50 {
51 private final StartupConfiguration startupConfig;
52 private final StartupReportConfiguration startupReportConfig;
53 private final ProviderConfiguration providerConfig;
54 private final ConsoleLogger consoleLogger;
55
56 public InPluginVMSurefireStarter( @Nonnull StartupConfiguration startupConfig,
57 @Nonnull ProviderConfiguration providerConfig,
58 @Nonnull StartupReportConfiguration startupReportConfig,
59 @Nonnull ConsoleLogger consoleLogger )
60 {
61 this.startupConfig = startupConfig;
62 this.startupReportConfig = startupReportConfig;
63 this.providerConfig = providerConfig;
64 this.consoleLogger = consoleLogger;
65 }
66
67 public RunResult runSuitesInProcess( @Nonnull DefaultScanResult scanResult )
68 throws SurefireExecutionException, TestSetFailedException
69 {
70
71
72
73 Map<String, String> providerProperties = providerConfig.getProviderProperties();
74 scanResult.writeTo( providerProperties );
75
76 startupConfig.writeSurefireTestClasspathProperty();
77 ClassLoader testClassLoader = startupConfig.getClasspathConfiguration()
78 .toRealPath( ClasspathConfiguration.class )
79 .createMergedClassLoader();
80
81 CommonReflector surefireReflector = new CommonReflector( testClassLoader );
82
83 Object factory = surefireReflector.createReportingReporterFactory( startupReportConfig, consoleLogger );
84
85 try
86 {
87 return invokeProvider( null, testClassLoader, factory, providerConfig, false, startupConfig, true );
88 }
89 catch ( InvocationTargetException e )
90 {
91 throw new SurefireExecutionException( "Exception in provider", e.getTargetException() );
92 }
93 }
94
95 }