blob: a898ef45b7a57929d4483a3271f1d9090d24ee90 [file] [log] [blame]
/*
* 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.
*/
package org.apache.maven.surefire.its.fixture;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.shared.verifier.VerificationException;
/**
* Encapsulate all needed features to start a surefire run
* <br>
* Also includes thread-safe access to the extracted resource
* files
*
* @author Kristian Rosenvold -
*/
public final class SurefireLauncher {
private final MavenLauncher mavenLauncher;
private final String surefireVersion = System.getProperty("surefire.version");
public SurefireLauncher(MavenLauncher mavenLauncher) {
this.mavenLauncher = mavenLauncher;
reset();
}
public MavenLauncher maven() {
return mavenLauncher;
}
String getTestMethodName() {
return mavenLauncher.getTestMethodName();
}
public void reset() {
mavenLauncher.reset();
for (String s : getInitialGoals()) {
mavenLauncher.addGoal(s);
}
}
public SurefireLauncher getSubProjectLauncher(String subProject) {
return new SurefireLauncher(mavenLauncher.getSubProjectLauncher(subProject));
}
public OutputValidator getSubProjectValidator(String subProject) throws VerificationException {
return mavenLauncher.getSubProjectValidator(subProject);
}
private SurefireLauncher addEnvVar(String key, String value) {
mavenLauncher.addEnvVar(key, value);
return this;
}
public SurefireLauncher setMavenOpts(String opts) {
return addEnvVar("MAVEN_OPTS", opts);
}
private List<String> getInitialGoals() {
List<String> goals = new ArrayList<>();
goals.add("-Dsurefire.version=" + surefireVersion);
String jacocoAgent = System.getProperty("jacoco.agent", "");
// Remove unnecessary backslash escaping for Windows, see https://github.com/jacoco/jacoco/issues/1559
jacocoAgent = jacocoAgent.replace("\\\\", "\\");
// Remove quotes which will cause a syntax error raised by cmd.exe because of quote escaping
jacocoAgent = jacocoAgent.replace("\"", "");
goals.add("-Djacoco.agent=" + jacocoAgent);
goals.add("-nsu");
return goals;
}
public SurefireLauncher showErrorStackTraces() {
mavenLauncher.showErrorStackTraces();
return this;
}
public SurefireLauncher debugLogging() {
mavenLauncher.debugLogging();
return this;
}
@SuppressWarnings("UnusedDeclaration")
public SurefireLauncher debugSurefireFork() {
mavenLauncher.sysProp("maven.surefire.debug", "true");
return this;
}
public SurefireLauncher failNever() {
mavenLauncher.failNever();
return this;
}
public SurefireLauncher groups(String groups) {
mavenLauncher.sysProp("groups", groups);
return this;
}
public SurefireLauncher addGoal(String goal) {
mavenLauncher.addGoal(goal);
return this;
}
public OutputValidator executeTest() {
return mavenLauncher.execute("test");
}
public OutputValidator executeInstall() {
return mavenLauncher.execute("install");
}
public FailsafeOutputValidator executeVerify() {
OutputValidator verify = execute("verify");
return new FailsafeOutputValidator(verify);
}
public OutputValidator execute(String goal) {
return mavenLauncher.execute(goal);
}
public OutputValidator executeSurefireReport() {
return mavenLauncher.execute("surefire-report:report");
}
public OutputValidator executeCurrentGoals() {
return mavenLauncher.executeCurrentGoals();
}
public SurefireLauncher printSummary(boolean printsummary) {
mavenLauncher.sysProp("printSummary", printsummary);
return this;
}
public SurefireLauncher redirectToFile(boolean redirect) {
mavenLauncher.sysProp("maven.test.redirectTestOutputToFile", redirect);
return this;
}
public SurefireLauncher forkOnce() {
return forkCount(1).reuseForks(true);
}
public SurefireLauncher forkNever() {
return forkCount(0);
}
public SurefireLauncher forkAlways() {
return forkCount(1).reuseForks(false);
}
public SurefireLauncher forkPerThread(int threadCount) {
return forkCount(threadCount).reuseForks(true);
}
public SurefireLauncher threadCount(int threadCount) {
mavenLauncher.sysProp("threadCount", threadCount);
return this;
}
public SurefireLauncher forkCount(int forkCount) {
mavenLauncher.sysProp("forkCount", forkCount);
return this;
}
public SurefireLauncher reuseForks(boolean reuseForks) {
mavenLauncher.sysProp("reuseForks", reuseForks);
return this;
}
public SurefireLauncher runOrder(String runOrder) {
mavenLauncher.sysProp("surefire.runOrder", runOrder);
return this;
}
public SurefireLauncher runOrderRandomSeed(String runOrderRandomSeed) {
mavenLauncher.sysProp("surefire.runOrder.random.seed", runOrderRandomSeed);
return this;
}
public SurefireLauncher failIfNoTests(boolean fail) {
mavenLauncher.sysProp("failIfNoTests", fail);
return this;
}
public SurefireLauncher mavenTestFailureIgnore(boolean fail) {
mavenLauncher.sysProp("maven.test.failure.ignore", fail);
return this;
}
public SurefireLauncher failIfNoSpecifiedTests(boolean fail) {
mavenLauncher.sysProp("surefire.failIfNoSpecifiedTests", fail);
return this;
}
public SurefireLauncher useSystemClassLoader(boolean useSystemClassLoader) {
mavenLauncher.sysProp("useSystemClassLoader", useSystemClassLoader);
return this;
}
public SurefireLauncher activateProfile(String profile) {
mavenLauncher.activateProfile(profile);
return this;
}
public SurefireLauncher disablePerCoreThreadCount() {
mavenLauncher.sysProp("perCoreThreadCount", false);
return this;
}
public SurefireLauncher disableParallelOptimization() {
mavenLauncher.sysProp("parallelOptimized", "false");
return this;
}
public SurefireLauncher parallel(String parallel) {
mavenLauncher.sysProp("parallel", parallel);
return this;
}
public SurefireLauncher parallelSuites() {
return parallel("suites");
}
public SurefireLauncher parallelClasses() {
return parallel("classes");
}
public SurefireLauncher parallelMethods() {
return parallel("methods");
}
public SurefireLauncher parallelBoth() {
return parallel("both");
}
public SurefireLauncher parallelSuitesAndClasses() {
return parallel("suitesAndClasses");
}
public SurefireLauncher parallelSuitesAndMethods() {
return parallel("suitesAndMethods");
}
public SurefireLauncher parallelClassesAndMethods() {
return parallel("classesAndMethods");
}
public SurefireLauncher parallelAll() {
return parallel("all");
}
public SurefireLauncher useUnlimitedThreads() {
mavenLauncher.sysProp("useUnlimitedThreads", true);
return this;
}
public SurefireLauncher threadCountSuites(int count) {
mavenLauncher.sysProp("threadCountSuites", count);
return this;
}
public SurefireLauncher threadCountClasses(int count) {
mavenLauncher.sysProp("threadCountClasses", count);
return this;
}
public SurefireLauncher threadCountMethods(int count) {
mavenLauncher.sysProp("threadCountMethods", count);
return this;
}
public SurefireLauncher parallelTestsTimeoutInSeconds(double timeout) {
mavenLauncher.sysProp("surefire.parallel.timeout", timeout);
return this;
}
public SurefireLauncher parallelTestsTimeoutForcedInSeconds(double timeout) {
mavenLauncher.sysProp("surefire.parallel.forcedTimeout", timeout);
return this;
}
public SurefireLauncher argLine(String value) {
mavenLauncher.sysProp("argLine", value);
return this;
}
public SurefireLauncher sysProp(String variable, String value) {
mavenLauncher.sysProp(variable, value);
return this;
}
public SurefireLauncher setJUnitVersion(String version) {
mavenLauncher.sysProp("junit.version", version);
return this;
}
public SurefireLauncher setGroups(String groups) {
mavenLauncher.sysProp("groups", groups);
return this;
}
public SurefireLauncher setExcludedGroups(String excludedGroups) {
mavenLauncher.sysProp("excludedGroups", excludedGroups);
return this;
}
public File getUnpackedAt() {
return mavenLauncher.getUnpackedAt();
}
public SurefireLauncher addFailsafeReportOnlyGoal() {
mavenLauncher.addGoal(getReportPluginGoal(":failsafe-report-only"));
return this;
}
public SurefireLauncher addSurefireReportGoal() {
mavenLauncher.addGoal(getReportPluginGoal("report"));
return this;
}
public SurefireLauncher addSurefireReportOnlyGoal() {
mavenLauncher.addGoal(getReportPluginGoal("report-only"));
return this;
}
private String getReportPluginGoal(String goal) {
return "org.apache.maven.plugins:maven-surefire-report-plugin:" + surefireVersion + ":" + goal;
}
public SurefireLauncher setTestToRun(String basicTest) {
mavenLauncher.sysProp("test", basicTest);
return this;
}
public SurefireLauncher setForkJvm() {
mavenLauncher.setForkJvm(true);
return this;
}
public SurefireLauncher setLogFileName(String logFileName) {
mavenLauncher.setLogFileName(logFileName);
return this;
}
}