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 org.apache.maven.surefire.common.junit3.JUnit3Reflector;
23 import org.apache.maven.surefire.common.junit3.JUnit3TestChecker;
24 import org.apache.maven.surefire.providerapi.AbstractProvider;
25 import org.apache.maven.surefire.providerapi.ProviderParameters;
26 import org.apache.maven.surefire.report.RunListener;
27 import org.apache.maven.surefire.report.ReportEntry;
28 import org.apache.maven.surefire.report.ReporterException;
29 import org.apache.maven.surefire.report.ReporterFactory;
30 import org.apache.maven.surefire.report.SimpleReportEntry;
31 import org.apache.maven.surefire.suite.RunResult;
32 import org.apache.maven.surefire.testset.TestSetFailedException;
33 import org.apache.maven.surefire.util.DirectoryScanner;
34 import org.apache.maven.surefire.util.TestsToRun;
35
36 import java.util.Iterator;
37
38
39
40
41
42 public class JUnit3Provider
43 extends AbstractProvider
44 {
45 private final ClassLoader testClassLoader;
46
47 private final DirectoryScanner directoryScanner;
48
49 private final PojoAndJUnit3Checker testChecker;
50
51 private final JUnit3TestChecker jUnit3TestChecker;
52
53 private final JUnit3Reflector reflector;
54
55 private final ProviderParameters providerParameters;
56
57 private TestsToRun testsToRun;
58
59 public JUnit3Provider( ProviderParameters booterParameters )
60 {
61 this.providerParameters = booterParameters;
62 this.testClassLoader = booterParameters.getTestClassLoader();
63 this.directoryScanner = booterParameters.getDirectoryScanner();
64 this.reflector = new JUnit3Reflector( testClassLoader );
65 jUnit3TestChecker = new JUnit3TestChecker( testClassLoader );
66 this.testChecker = new PojoAndJUnit3Checker( jUnit3TestChecker );
67 }
68
69 public RunResult invoke( Object forkTestSet )
70 throws TestSetFailedException, ReporterException
71 {
72 if ( testsToRun == null )
73 {
74 testsToRun = forkTestSet == null ? scanClassPath() : TestsToRun.fromClass( (Class) forkTestSet );
75 }
76
77 ReporterFactory reporterFactory = providerParameters.getReporterFactory();
78
79 RunListener reporter = reporterFactory.createReporter();
80
81 for ( Iterator iter = testsToRun.iterator(); iter.hasNext(); )
82 {
83 Class clazz = (Class) iter.next();
84 SurefireTestSet surefireTestSet = createTestSet( clazz );
85 executeTestSet( surefireTestSet, reporter, testClassLoader );
86 }
87
88 return reporterFactory.close();
89 }
90
91 private SurefireTestSet createTestSet( Class clazz )
92 throws TestSetFailedException
93 {
94 return reflector.isJUnit3Available() && jUnit3TestChecker.accept( clazz )
95 ? new JUnitTestSet( clazz, reflector )
96 : (SurefireTestSet) new PojoTestSet( clazz );
97
98 }
99
100 private void executeTestSet( SurefireTestSet testSet, RunListener reporter, ClassLoader classLoader )
101 throws ReporterException, TestSetFailedException
102 {
103
104 ReportEntry report = new SimpleReportEntry( this.getClass().getName(), testSet.getName() );
105
106 reporter.testSetStarting( report );
107
108 testSet.execute( reporter, classLoader );
109
110 reporter.testSetCompleted( report );
111 }
112
113 private TestsToRun scanClassPath()
114 {
115 return directoryScanner.locateTestClasses( testClassLoader, testChecker );
116 }
117
118 public Iterator getSuites()
119 {
120 testsToRun = scanClassPath();
121 return testsToRun.iterator();
122 }
123
124 public Boolean isRunnable()
125 {
126 return Boolean.TRUE;
127 }
128 }