TestingResearchIllinois/NonDex

View on GitHub
nondex-gradle-plugin/plugin/src/main/java/edu/illinois/nondex/gradle/internal/CleanRun.java

Summary

Maintainability
A
3 hrs
Test Coverage
package edu.illinois.nondex.gradle.internal;

import edu.illinois.nondex.common.Configuration;
import edu.illinois.nondex.common.Level;
import edu.illinois.nondex.common.Logger;
import edu.illinois.nondex.common.Utils;
import edu.illinois.nondex.gradle.tasks.AbstractNonDexTest;
import org.gradle.api.file.FileCollection;
import org.gradle.api.file.FileTree;
import org.gradle.api.internal.tasks.testing.JvmTestExecutionSpec;
import org.gradle.api.internal.tasks.testing.TestExecuter;
import org.gradle.api.internal.tasks.testing.TestFramework;
import org.gradle.process.JavaForkOptions;
import org.gradle.util.GradleVersion;
import org.gradle.util.Path;

import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class CleanRun {

    protected Configuration configuration;
    protected final String executionId;
    protected JvmTestExecutionSpec originalSpec;
    protected AbstractNonDexTest nondexTestTask;
    private final TestExecuter<JvmTestExecutionSpec> delegate;
    private NonDexTestProcessor nondexTestProcessor;

    protected CleanRun(AbstractNonDexTest nondexTestTask, TestExecuter<JvmTestExecutionSpec> delegate, JvmTestExecutionSpec originalSpec,
                       NonDexTestProcessor nondexTestProcessor, String executionId, String nondexDir) {
        this.nondexTestTask = nondexTestTask;
        this.delegate = delegate;
        this.nondexTestProcessor = nondexTestProcessor;
        this.executionId = executionId;
        this.configuration = new Configuration(executionId, nondexDir);
        this.originalSpec = this.createJvmExecutionSpecWithArgs(setupArgline(), originalSpec);
    }

    public CleanRun(AbstractNonDexTest nondexTestTask, TestExecuter<JvmTestExecutionSpec> delegate, JvmTestExecutionSpec originalSpec,
                    NonDexTestProcessor nondexTestProcessor, String nondexDir) {
        this(nondexTestTask, delegate, originalSpec, nondexTestProcessor, "clean_" + Utils.getFreshExecutionId(), nondexDir);
    }

    public Configuration getConfiguration() {
        return this.configuration;
    }

    public NonDexTestProcessor run() {
        Logger.getGlobal().log(Level.CONFIG, this.configuration.toString());
        this.delegate.execute(this.originalSpec, this.nondexTestProcessor);
        this.setFailures();
        return this.nondexTestProcessor;
    }

    private void setFailures() {
        Set<String> failingTests = this.nondexTestProcessor.getFailingTests();
        this.configuration.setFailures(failingTests);
    }

    protected JvmTestExecutionSpec createJvmExecutionSpecWithArgs(List<String> args, JvmTestExecutionSpec originalSpec) {
        JavaForkOptions option = originalSpec.getJavaForkOptions();
        option.setAllJvmArgs(args);
        GradleVersion curGradleVersion = GradleVersion.current().getBaseVersion();
        try {
            if (curGradleVersion.compareTo(GradleVersion.version("8.0")) >= 0) {
                return JvmTestExecutionSpec.class.getConstructor(new Class[]{
                    TestFramework.class,
                    Iterable.class,
                    Iterable.class,
                    FileTree.class,
                    Boolean.class,
                    FileCollection.class,
                    String.class,
                    Path.class,
                    Long.class,
                    JavaForkOptions.class,
                    Integer.class,
                    Set.class,
                    Boolean.class
                }).newInstance(originalSpec.getTestFramework(),
                    originalSpec.getClasspath(),
                    originalSpec.getModulePath(),
                    originalSpec.getCandidateClassFiles(),
                    originalSpec.isScanForTestClasses(),
                    originalSpec.getTestClassesDirs(),
                    originalSpec.getPath(),
                    originalSpec.getIdentityPath(),
                    originalSpec.getForkEvery(),
                    option,
                    originalSpec.getMaxParallelForks(),
                    originalSpec.getPreviousFailedTestClasses(),
                    originalSpec.getTestIsModule());
            } else if (curGradleVersion.compareTo(GradleVersion.version("6.4")) >= 0) {
                return JvmTestExecutionSpec.class.getConstructor(new Class[]{
                    TestFramework.class,
                    Iterable.class,
                    Iterable.class,
                    FileTree.class,
                    Boolean.class,
                    FileCollection.class,
                    String.class,
                    Path.class,
                    Long.class,
                    JavaForkOptions.class,
                    Integer.class,
                    Set.class
                }).newInstance(originalSpec.getTestFramework(),
                    originalSpec.getClasspath(),
                    originalSpec.getModulePath(),
                    originalSpec.getCandidateClassFiles(),
                    originalSpec.isScanForTestClasses(),
                    originalSpec.getTestClassesDirs(),
                    originalSpec.getPath(),
                    originalSpec.getIdentityPath(),
                    originalSpec.getForkEvery(),
                    option,
                    originalSpec.getMaxParallelForks(),
                    originalSpec.getPreviousFailedTestClasses());
            } else {
                return JvmTestExecutionSpec.class.getConstructor(new Class[]{
                    TestFramework.class,
                    Iterable.class,
                    FileTree.class,
                    Boolean.class,
                    FileCollection.class,
                    String.class,
                    Path.class,
                    Long.class,
                    JavaForkOptions.class,
                    Integer.class,
                    Set.class
                }).newInstance(originalSpec.getTestFramework(),
                    originalSpec.getClasspath(),
                    originalSpec.getCandidateClassFiles(),
                    originalSpec.isScanForTestClasses(),
                    originalSpec.getTestClassesDirs(),
                    originalSpec.getPath(),
                    originalSpec.getIdentityPath(),
                    originalSpec.getForkEvery(),
                    option,
                    originalSpec.getMaxParallelForks(),
                    originalSpec.getPreviousFailedTestClasses());
            } 
        } catch (Exception e) {
            return originalSpec;
        }
    }

    protected List<String> setupArgline() {
        List<String> argline = new LinkedList<>();
        argline.addAll(nondexTestTask.getOriginalArgLine());
        return argline;
    }
}