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.surefire.booter.ProviderConfiguration;
23  import org.apache.maven.surefire.booter.ProviderFactory;
24  import org.apache.maven.surefire.booter.StartupConfiguration;
25  import org.apache.maven.surefire.booter.SurefireExecutionException;
26  import org.apache.maven.surefire.suite.RunResult;
27  import org.apache.maven.surefire.testset.TestSetFailedException;
28  import org.apache.maven.surefire.util.DefaultScanResult;
29  
30  import javax.annotation.Nonnull;
31  import java.lang.reflect.InvocationTargetException;
32  import java.util.Map;
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  public class InPluginVMSurefireStarter
47  {
48  
49      private final StartupConfiguration startupConfiguration;
50  
51      private final StartupReportConfiguration startupReportConfiguration;
52  
53      private final ProviderConfiguration providerConfiguration;
54  
55      public InPluginVMSurefireStarter( @Nonnull StartupConfiguration startupConfiguration,
56                                        @Nonnull ProviderConfiguration providerConfiguration,
57                                        @Nonnull StartupReportConfiguration startupReportConfiguration )
58      {
59          this.startupConfiguration = startupConfiguration;
60          this.startupReportConfiguration = startupReportConfiguration;
61          this.providerConfiguration = providerConfiguration;
62      }
63  
64      public RunResult runSuitesInProcess( @Nonnull DefaultScanResult scanResult )
65          throws SurefireExecutionException, TestSetFailedException
66      {
67          
68          
69  
70          Map<String, String> providerProperties = providerConfiguration.getProviderProperties();
71          scanResult.writeTo( providerProperties );
72  
73          startupConfiguration.writeSurefireTestClasspathProperty();
74          ClassLoader testsClassLoader = startupConfiguration.getClasspathConfiguration().createMergedClassLoader();
75  
76          CommonReflector surefireReflector = new CommonReflector( testsClassLoader );
77  
78          final Object factory = surefireReflector.createReportingReporterFactory( startupReportConfiguration );
79  
80          try
81          {
82              return ProviderFactory.invokeProvider( null, testsClassLoader, factory,
83                                                     providerConfiguration, false, startupConfiguration, true );
84          }
85          catch ( InvocationTargetException e )
86          {
87              throw new SurefireExecutionException( "Exception in provider", e.getTargetException() );
88          }
89      }
90  
91  }