All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vast.surefire.scalatest19.ScalaTestProvider Maven / Gradle / Ivy

package com.vast.surefire.scalatest19;

import com.vast.surefire.scalatest19.filters.MethodAnnotationScanner;
import com.vast.surefire.scalatest19.filters.ScalaTestScanner;
import org.apache.maven.surefire.providerapi.AbstractProvider;
import org.apache.maven.surefire.providerapi.ProviderParameters;
import org.apache.maven.surefire.report.ReporterException;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.apache.maven.surefire.util.ScannerFilter;
import org.apache.maven.surefire.util.TestsToRun;
import org.scalatest.SurefireRunner;

import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author David Pratt ([email protected])
 */
public class ScalaTestProvider extends AbstractProvider {

    private final ProviderParameters providerParameters;
    private final ParametersParser parametersParser;
    private final Class junitAnnotation;

    public ScalaTestProvider(ProviderParameters providerParameters) {
        this.providerParameters = providerParameters;
        this.parametersParser = new ParametersParser(providerParameters.getProviderProperties());

        Class annoClass;
        try {
            annoClass = providerParameters.getTestClassLoader().loadClass("org.junit.Test");
        } catch(ClassNotFoundException e) {
            annoClass = null;
        }
        junitAnnotation = annoClass;
    }

    @Override
    public Iterator getSuites() {
        throw new UnsupportedOperationException("Non-default forking is not supported with this provider.");
    }

    @Override
    public RunResult invoke(Object forkTestSet) throws TestSetFailedException, ReporterException, InvocationTargetException {
        SurefireRunner.run(getScalaTests(), getJunitTests(), providerParameters.getReporterFactory(),
                providerParameters.getTestClassLoader(), parametersParser.shouldExecuteParallel(), parametersParser.getThreadCount());
        return providerParameters.getReporterFactory().close();
    }

    private List getScalaTests() {
        return scanClasspath(new ScalaTestScanner());
    }

    private List getJunitTests() {
        return scanClasspath(new MethodAnnotationScanner(junitAnnotation));
    }

    private List scanClasspath(ScannerFilter filter) {
        TestsToRun testsToRun= providerParameters
                .getRunOrderCalculator()
                .orderTestClasses(providerParameters.getScanResult().applyFilter(filter, providerParameters.getTestClassLoader()));
        ArrayList retval = new ArrayList();
        for (Class aTestsToRun : testsToRun) {
            retval.add(aTestsToRun.getName());
        }
        return retval;
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy