1 package org.apache.maven.surefire.junit;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Iterator;
23 import org.apache.maven.surefire.common.junit3.JUnit3Reflector;
24 import org.apache.maven.surefire.common.junit3.JUnit3TestChecker;
25 import org.apache.maven.surefire.providerapi.AbstractProvider;
26 import org.apache.maven.surefire.providerapi.ProviderParameters;
27 import org.apache.maven.surefire.report.ConsoleOutputCapture;
28 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
29 import org.apache.maven.surefire.report.ReportEntry;
30 import org.apache.maven.surefire.report.ReporterException;
31 import org.apache.maven.surefire.report.ReporterFactory;
32 import org.apache.maven.surefire.report.RunListener;
33 import org.apache.maven.surefire.report.SimpleReportEntry;
34 import org.apache.maven.surefire.suite.RunResult;
35 import org.apache.maven.surefire.testset.TestSetFailedException;
36 import org.apache.maven.surefire.util.DirectoryScanner;
37 import org.apache.maven.surefire.util.ReflectionUtils;
38 import org.apache.maven.surefire.util.TestsToRun;
39
40
41
42
43 public class JUnit3Provider
44 extends AbstractProvider
45 {
46 private final ClassLoader testClassLoader;
47
48 private final DirectoryScanner directoryScanner;
49
50 private final PojoAndJUnit3Checker testChecker;
51
52 private final JUnit3TestChecker jUnit3TestChecker;
53
54 private final JUnit3Reflector reflector;
55
56 private final ProviderParameters providerParameters;
57
58 private TestsToRun testsToRun;
59
60 public JUnit3Provider( ProviderParameters booterParameters )
61 {
62 this.providerParameters = booterParameters;
63 this.testClassLoader = booterParameters.getTestClassLoader();
64 this.directoryScanner = booterParameters.getDirectoryScanner();
65 this.reflector = new JUnit3Reflector( testClassLoader );
66 jUnit3TestChecker = new JUnit3TestChecker( testClassLoader );
67 this.testChecker = new PojoAndJUnit3Checker( jUnit3TestChecker );
68 }
69
70 public RunResult invoke( Object forkTestSet )
71 throws TestSetFailedException, ReporterException
72 {
73 if ( testsToRun == null )
74 {
75 testsToRun = forkTestSet == null ? scanClassPath() : TestsToRun.fromClass( (Class) forkTestSet );
76 }
77
78 ReporterFactory reporterFactory = providerParameters.getReporterFactory();
79 final RunListener reporter = reporterFactory.createReporter();
80 ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporter );
81
82 final String smClassName = System.getProperty( "surefire.security.manager" );
83 if ( smClassName != null )
84 {
85 SecurityManager securityManager =
86 (SecurityManager) ReflectionUtils.instantiate( this.getClass().getClassLoader(), smClassName );
87 System.setSecurityManager( securityManager );
88 }
89
90 for ( Iterator iter = testsToRun.iterator(); iter.hasNext(); )
91 {
92 Class clazz = (Class) iter.next();
93 SurefireTestSet surefireTestSet = createTestSet( clazz );
94 executeTestSet( surefireTestSet, reporter, testClassLoader );
95 }
96
97 return reporterFactory.close();
98 }
99
100 private SurefireTestSet createTestSet( Class clazz )
101 throws TestSetFailedException
102 {
103 return reflector.isJUnit3Available() && jUnit3TestChecker.accept( clazz )
104 ? new JUnitTestSet( clazz, reflector )
105 : (SurefireTestSet) new PojoTestSet( clazz );
106
107 }
108
109 private void executeTestSet( SurefireTestSet testSet, RunListener reporter, ClassLoader classLoader )
110 throws ReporterException, TestSetFailedException
111 {
112
113 ReportEntry report = new SimpleReportEntry( this.getClass().getName(), testSet.getName() );
114
115 reporter.testSetStarting( report );
116
117 testSet.execute( reporter, classLoader );
118
119 reporter.testSetCompleted( report );
120 }
121
122 private TestsToRun scanClassPath()
123 {
124 return directoryScanner.locateTestClasses( testClassLoader, testChecker );
125 }
126
127 public Iterator getSuites()
128 {
129 testsToRun = scanClassPath();
130 return testsToRun.iterator();
131 }
132 }