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