1 package org.apache.maven.surefire.junitcore;
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.StartupReportConfiguration;
23 import org.apache.maven.plugin.surefire.extensions.SurefireConsoleOutputReporter;
24 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessReporter;
25 import org.apache.maven.plugin.surefire.extensions.SurefireStatelessTestsetInfoReporter;
26 import org.apache.maven.plugin.surefire.log.api.NullConsoleLogger;
27 import org.apache.maven.plugin.surefire.report.DefaultReporterFactory;
28 import org.apache.maven.surefire.api.report.ConsoleOutputReceiver;
29 import org.apache.maven.surefire.api.report.DefaultDirectConsoleReporter;
30 import org.apache.maven.surefire.api.report.ReporterFactory;
31 import org.apache.maven.surefire.api.report.RunListener;
32 import org.apache.maven.surefire.api.testset.TestSetFailedException;
33 import org.junit.runner.Computer;
34 import org.junit.runner.JUnitCore;
35 import org.junit.runner.Result;
36
37 import java.io.File;
38 import java.util.HashMap;
39 import java.util.concurrent.ExecutionException;
40
41 import static org.apache.maven.surefire.junitcore.ConcurrentRunListener.createInstance;
42 import static org.apache.maven.surefire.api.report.ConsoleOutputCapture.startCapture;
43
44
45
46
47 public class JUnitCoreTester
48 {
49 private final Computer computer;
50
51 public JUnitCoreTester()
52 {
53 this( new Computer() );
54 }
55
56 public JUnitCoreTester( Computer computer )
57 {
58 this.computer = computer;
59 }
60
61 public Result run( boolean parallelClasses, Class<?>... classes )
62 throws TestSetFailedException, ExecutionException
63 {
64 ReporterFactory reporterManagerFactory = defaultNoXml();
65
66 try
67 {
68 final HashMap<String, TestSet> classMethodCounts = new HashMap<>();
69 RunListener reporter = createInstance( classMethodCounts, reporterManagerFactory, parallelClasses, false,
70 new DefaultDirectConsoleReporter( System.out ) );
71 startCapture( (ConsoleOutputReceiver) reporter );
72
73 JUnitCoreRunListener runListener = new JUnitCoreRunListener( reporter, classMethodCounts );
74 JUnitCore junitCore = new JUnitCore();
75
76 junitCore.addListener( runListener );
77 final Result run = junitCore.run( computer, classes );
78 junitCore.removeListener( runListener );
79 return run;
80 }
81 finally
82 {
83 reporterManagerFactory.close();
84 if ( computer instanceof ConfigurableParallelComputer )
85 {
86 ( (ConfigurableParallelComputer) computer ).close();
87 }
88 }
89 }
90
91
92
93
94
95
96 public static DefaultReporterFactory defaultNoXml()
97 {
98 return new DefaultReporterFactory( defaultStartupReportConfiguration(), new NullConsoleLogger() );
99 }
100
101
102
103
104
105
106 private static StartupReportConfiguration defaultStartupReportConfiguration()
107 {
108 File target = new File( "./target" );
109 File statisticsFile = new File( target, "TESTHASHxXML" );
110 return new StartupReportConfiguration( true, true, "PLAIN", false, target, false, null, statisticsFile,
111 false, 0, null, null, false, new SurefireStatelessReporter(), new SurefireConsoleOutputReporter(),
112 new SurefireStatelessTestsetInfoReporter() );
113 }
114 }