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.extensions.SurefireConsoleOutputReporter;
23 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
24 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
25 import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
26 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
27 import org.apache.maven.surefire.booter.SurefireReflector;
28 import org.apache.maven.surefire.util.SurefireReflectionException;
29
30 import javax.annotation.Nonnull;
31 import java.io.File;
32 import java.lang.reflect.Constructor;
33
34 import static org.apache.maven.surefire.util.ReflectionUtils.getConstructor;
35 import static org.apache.maven.surefire.util.ReflectionUtils.instantiateObject;
36 import static org.apache.maven.surefire.util.ReflectionUtils.newInstance;
37
38
39
40
41 public class CommonReflector
42 {
43 private final Class<?> startupReportConfiguration;
44 private final Class<?> consoleLogger;
45 private final Class<?> statelessTestsetReporter;
46 private final Class<?> consoleOutputReporter;
47 private final Class<?> statelessTestsetInfoReporter;
48 private final ClassLoader surefireClassLoader;
49
50 public CommonReflector( @Nonnull ClassLoader surefireClassLoader )
51 {
52 this.surefireClassLoader = surefireClassLoader;
53
54 try
55 {
56 startupReportConfiguration = surefireClassLoader.loadClass( StartupReportConfiguration.class.getName() );
57 consoleLogger = surefireClassLoader.loadClass( ConsoleLogger.class.getName() );
58 statelessTestsetReporter = surefireClassLoader.loadClass( SurefireStatelessReporter.class.getName() );
59 consoleOutputReporter = surefireClassLoader.loadClass( SurefireConsoleOutputReporter.class.getName() );
60 statelessTestsetInfoReporter =
61 surefireClassLoader.loadClass( SurefireStatelessTestsetInfoReporter.class.getName() );
62 }
63 catch ( ClassNotFoundException e )
64 {
65 throw new SurefireReflectionException( e );
66 }
67 }
68
69 public Object createReportingReporterFactory( @Nonnull StartupReportConfiguration startupReportConfiguration,
70 @Nonnull ConsoleLogger consoleLogger )
71 {
72 Class<?>[] args = { this.startupReportConfiguration, this.consoleLogger };
73 Object src = createStartupReportConfiguration( startupReportConfiguration );
74 Object logger = SurefireReflector.createConsoleLogger( consoleLogger, surefireClassLoader );
75 Object[] params = { src, logger };
76 return instantiateObject( DefaultReporterFactory.class.getName(), args, params, surefireClassLoader );
77 }
78
79 private Object createStartupReportConfiguration( @Nonnull StartupReportConfiguration reporterConfiguration )
80 {
81 Constructor<?> constructor = getConstructor( startupReportConfiguration, boolean.class, boolean.class,
82 String.class, boolean.class, File.class,
83 boolean.class, String.class, File.class, boolean.class,
84 int.class, String.class, String.class, boolean.class,
85 statelessTestsetReporter, consoleOutputReporter,
86 statelessTestsetInfoReporter );
87
88 Object[] params = { reporterConfiguration.isUseFile(), reporterConfiguration.isPrintSummary(),
89 reporterConfiguration.getReportFormat(), reporterConfiguration.isRedirectTestOutputToFile(),
90 reporterConfiguration.getReportsDirectory(),
91 reporterConfiguration.isTrimStackTrace(), reporterConfiguration.getReportNameSuffix(),
92 reporterConfiguration.getStatisticsFile(), reporterConfiguration.isRequiresRunHistory(),
93 reporterConfiguration.getRerunFailingTestsCount(), reporterConfiguration.getXsdSchemaLocation(),
94 reporterConfiguration.getEncoding().name(), reporterConfiguration.isForkMode(),
95 reporterConfiguration.getXmlReporter().clone( surefireClassLoader ),
96 reporterConfiguration.getConsoleOutputReporter().clone( surefireClassLoader ),
97 reporterConfiguration.getTestsetReporter().clone( surefireClassLoader )
98 };
99 return newInstance( constructor, params );
100 }
101 }