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