1
package org.apache.maven.surefire.junit;
4
* Licensed to the Apache Software Foundation (ASF) under one
5
* or more contributor license agreements. See the NOTICE file
6
* distributed with this work for additional information
7
* regarding copyright ownership. The ASF licenses this file
8
* to you under the Apache License, Version 2.0 (the
9
* "License"); you may not use this file except in compliance
10
* with the License. You may obtain a copy of the License at
12
* http://www.apache.org/licenses/LICENSE-2.0
14
* Unless required by applicable law or agreed to in writing,
15
* software distributed under the License is distributed on an
16
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
* KIND, either express or implied. See the License for the
18
* specific language governing permissions and limitations
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;
41
* @author Kristian Rosenvold
43
public class JUnit3Provider
44
extends AbstractProvider
46
private final ClassLoader testClassLoader;
48
private final DirectoryScanner directoryScanner;
50
private final PojoAndJUnit3Checker testChecker;
52
private final JUnit3TestChecker jUnit3TestChecker;
54
private final JUnit3Reflector reflector;
56
private final ProviderParameters providerParameters;
58
private TestsToRun testsToRun;
60
public JUnit3Provider( ProviderParameters booterParameters )
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 ); // Todo; use reflector
70
public RunResult invoke( Object forkTestSet )
71
throws TestSetFailedException, ReporterException
73
if ( testsToRun == null )
75
testsToRun = forkTestSet == null ? scanClassPath() : TestsToRun.fromClass( (Class) forkTestSet );
78
ReporterFactory reporterFactory = providerParameters.getReporterFactory();
79
final RunListener reporter = reporterFactory.createReporter();
80
ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporter );
82
final String smClassName = System.getProperty( "surefire.security.manager" );
83
if ( smClassName != null )
85
SecurityManager securityManager =
86
(SecurityManager) ReflectionUtils.instantiate( this.getClass().getClassLoader(), smClassName );
87
System.setSecurityManager( securityManager );
90
for ( Iterator iter = testsToRun.iterator(); iter.hasNext(); )
92
Class clazz = (Class) iter.next();
93
SurefireTestSet surefireTestSet = createTestSet( clazz );
94
executeTestSet( surefireTestSet, reporter, testClassLoader );
97
return reporterFactory.close();
100
private SurefireTestSet createTestSet( Class clazz )
101
throws TestSetFailedException
103
return reflector.isJUnit3Available() && jUnit3TestChecker.accept( clazz )
104
? new JUnitTestSet( clazz, reflector )
105
: (SurefireTestSet) new PojoTestSet( clazz );
109
private void executeTestSet( SurefireTestSet testSet, RunListener reporter, ClassLoader classLoader )
110
throws ReporterException, TestSetFailedException
113
ReportEntry report = new SimpleReportEntry( this.getClass().getName(), testSet.getName() );
115
reporter.testSetStarting( report );
117
testSet.execute( reporter, classLoader );
119
reporter.testSetCompleted( report );
122
private TestsToRun scanClassPath()
124
return directoryScanner.locateTestClasses( testClassLoader, testChecker );
127
public Iterator getSuites()
129
testsToRun = scanClassPath();
130
return testsToRun.iterator();