org.apache.maven.surefire.junit.JUnit3Provider Maven / Gradle / Ivy
package org.apache.maven.surefire.junit;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.surefire.common.junit3.JUnit3Reflector;
import org.apache.maven.surefire.common.junit3.JUnit3TestChecker;
import org.apache.maven.surefire.providerapi.AbstractProvider;
import org.apache.maven.surefire.providerapi.ProviderParameters;
import org.apache.maven.surefire.report.ConsoleOutputCapture;
import org.apache.maven.surefire.report.ConsoleOutputReceiver;
import org.apache.maven.surefire.report.ReporterFactory;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.report.SimpleReportEntry;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.apache.maven.surefire.util.ReflectionUtils;
import org.apache.maven.surefire.util.RunOrderCalculator;
import org.apache.maven.surefire.util.ScanResult;
import org.apache.maven.surefire.util.TestsToRun;
import java.util.Map;
import static org.apache.maven.surefire.util.internal.ObjectUtils.systemProps;
/**
* @author Kristian Rosenvold
*/
public class JUnit3Provider
extends AbstractProvider
{
private final ClassLoader testClassLoader;
private final PojoAndJUnit3Checker testChecker;
private final JUnit3TestChecker jUnit3TestChecker;
private final JUnit3Reflector reflector;
private final ProviderParameters providerParameters;
private final RunOrderCalculator runOrderCalculator;
private final ScanResult scanResult;
private TestsToRun testsToRun;
public JUnit3Provider( ProviderParameters booterParameters )
{
this.providerParameters = booterParameters;
testClassLoader = booterParameters.getTestClassLoader();
scanResult = booterParameters.getScanResult();
runOrderCalculator = booterParameters.getRunOrderCalculator();
reflector = new JUnit3Reflector( testClassLoader );
jUnit3TestChecker = new JUnit3TestChecker( testClassLoader );
testChecker = new PojoAndJUnit3Checker( jUnit3TestChecker ); // Todo; use reflector
}
@Override
public RunResult invoke( Object forkTestSet )
throws TestSetFailedException
{
if ( testsToRun == null )
{
if ( forkTestSet instanceof TestsToRun )
{
testsToRun = (TestsToRun) forkTestSet;
}
else if ( forkTestSet instanceof Class )
{
testsToRun = TestsToRun.fromClass( (Class>) forkTestSet );
}
else
{
testsToRun = scanClassPath();
}
}
ReporterFactory reporterFactory = providerParameters.getReporterFactory();
RunResult runResult;
try
{
final RunListener reporter = reporterFactory.createReporter();
ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) reporter );
final Map systemProperties = systemProps();
final String smClassName = systemProperties.get( "surefire.security.manager" );
if ( smClassName != null )
{
SecurityManager securityManager =
ReflectionUtils.instantiate( getClass().getClassLoader(), smClassName, SecurityManager.class );
System.setSecurityManager( securityManager );
}
for ( Class> clazz : testsToRun )
{
SurefireTestSet surefireTestSet = createTestSet( clazz );
executeTestSet( surefireTestSet, reporter, testClassLoader, systemProperties );
}
}
finally
{
runResult = reporterFactory.close();
}
return runResult;
}
private SurefireTestSet createTestSet( Class> clazz )
throws TestSetFailedException
{
return reflector.isJUnit3Available() && jUnit3TestChecker.accept( clazz )
? new JUnitTestSet( clazz, reflector )
: new PojoTestSet( clazz );
}
private void executeTestSet( SurefireTestSet testSet, RunListener reporter, ClassLoader classLoader,
Map systemProperties )
throws TestSetFailedException
{
SimpleReportEntry report = new SimpleReportEntry( getClass().getName(), testSet.getName(), systemProperties );
reporter.testSetStarting( report );
testSet.execute( reporter, classLoader );
reporter.testSetCompleted( report );
}
private TestsToRun scanClassPath()
{
final TestsToRun testsToRun = scanResult.applyFilter( testChecker, testClassLoader );
return runOrderCalculator.orderTestClasses( testsToRun );
}
@Override
public Iterable> getSuites()
{
testsToRun = scanClassPath();
return testsToRun;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy