package net.serenitybdd.integration.jenkins; import net.serenitybdd.integration.jenkins.environment.rules.ApplicativeTestRule; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static java.util.Arrays.asList; public class TestEnvironment { private final JenkinsInstance instance; private final List<ApplicativeTestRule<JenkinsInstance>> rulesToBeAppliedBeforeJenkinsStart = newArrayList(); private final List<ApplicativeTestRule<JenkinsInstance>> rulesToBeAppliedAfterJenkinsStart = newArrayList(); public TestEnvironment(JenkinsInstance instance) { this.instance = instance; } public JenkinsInstance create() { return instance.beforeStartApply(rulesToBeAppliedBeforeJenkinsStart).afterStartApply(rulesToBeAppliedAfterJenkinsStart); } public <ATR extends ApplicativeTestRule<JenkinsInstance>> TestEnvironment beforeStart(ATR... rules) { return beforeStart(asList(rules)); } public <ATR extends ApplicativeTestRule<JenkinsInstance>> TestEnvironment afterStart(ATR... rules) { return afterStart(asList(rules)); } public <ATR extends ApplicativeTestRule<JenkinsInstance>> TestEnvironment beforeStart(List<ATR> rules) { this.rulesToBeAppliedBeforeJenkinsStart.addAll(rules); return this; } public <ATR extends ApplicativeTestRule<JenkinsInstance>> TestEnvironment afterStart(List<ATR> rules) { this.rulesToBeAppliedAfterJenkinsStart.addAll(rules); return this; } }