StoryControls.java
package org.jbehave.core.embedder;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Optional;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* Holds flags used to control story execution flow.
* <ul>
* <li>{@link StoryControls#storyIndexFormat} story index format using {@link DecimalFormat}.
* Default value: " [0]" (minimum one integer digit in square brackets)</li>
* </ul>
*/
public class StoryControls {
private boolean dryRun = false;
private boolean resetStateBeforeStory = true;
private boolean resetStateBeforeScenario = true;
private boolean skipScenariosAfterFailure = false;
private boolean skipBeforeAndAfterScenarioStepsIfGivenStory = false;
private boolean ignoreMetaFiltersIfGivenStory = false;
private boolean metaByRow = false;
private String storyMetaPrefix = "";
private String scenarioMetaPrefix = "";
private boolean skipStoryIfGivenStoryFailed = false;
private NumberFormat storyIndexFormat;
private final ThreadLocal<StoryControls> currentStoryControls = ThreadLocal
.withInitial(() -> new StoryControls(this));
public StoryControls(StoryControls storyControls) {
dryRun = storyControls.dryRun;
resetStateBeforeStory = storyControls.resetStateBeforeStory;
resetStateBeforeScenario = storyControls.resetStateBeforeScenario;
skipScenariosAfterFailure = storyControls.skipScenariosAfterFailure;
skipBeforeAndAfterScenarioStepsIfGivenStory = storyControls.skipBeforeAndAfterScenarioStepsIfGivenStory;
ignoreMetaFiltersIfGivenStory = storyControls.ignoreMetaFiltersIfGivenStory;
metaByRow = storyControls.metaByRow;
storyMetaPrefix = storyControls.storyMetaPrefix;
scenarioMetaPrefix = storyControls.scenarioMetaPrefix;
skipStoryIfGivenStoryFailed = storyControls.skipStoryIfGivenStoryFailed;
storyIndexFormat = storyControls.storyIndexFormat;
// should not be used
currentStoryControls.set(null);
}
public StoryControls() {
}
public StoryControls currentStoryControls() {
return currentStoryControls.get();
}
public boolean dryRun() {
return currentStoryControls().dryRun;
}
public boolean resetStateBeforeStory() {
return currentStoryControls().resetStateBeforeStory;
}
public boolean resetStateBeforeScenario() {
return currentStoryControls().resetStateBeforeScenario;
}
public void resetCurrentStoryControls() {
currentStoryControls.remove();
}
public boolean skipScenariosAfterFailure() {
return currentStoryControls().skipScenariosAfterFailure;
}
public boolean skipBeforeAndAfterScenarioStepsIfGivenStory() {
return currentStoryControls().skipBeforeAndAfterScenarioStepsIfGivenStory;
}
public boolean ignoreMetaFiltersIfGivenStory() {
return currentStoryControls().ignoreMetaFiltersIfGivenStory;
}
public boolean metaByRow() {
return currentStoryControls().metaByRow;
}
public String storyMetaPrefix() {
return currentStoryControls().storyMetaPrefix;
}
public String scenarioMetaPrefix() {
return currentStoryControls().scenarioMetaPrefix;
}
public boolean skipStoryIfGivenStoryFailed() {
return currentStoryControls().skipStoryIfGivenStoryFailed;
}
public NumberFormat storyIndexFormat() {
return Optional.ofNullable(currentStoryControls().storyIndexFormat).orElseGet(() -> new DecimalFormat(" [0]"));
}
public StoryControls doDryRun(boolean dryRun) {
this.dryRun = dryRun;
return this;
}
public StoryControls doResetStateBeforeScenario(boolean resetStateBeforeScenario) {
this.resetStateBeforeScenario = resetStateBeforeScenario;
return this;
}
public StoryControls doResetStateBeforeStory(boolean resetStateBeforeStory) {
this.resetStateBeforeStory = resetStateBeforeStory;
return this;
}
public StoryControls doSkipScenariosAfterFailure(boolean skipScenariosAfterFailure) {
this.skipScenariosAfterFailure = skipScenariosAfterFailure;
return this;
}
public StoryControls doSkipBeforeAndAfterScenarioStepsIfGivenStory(
boolean skipBeforeAndAfterScenarioStepsIfGivenStory) {
this.skipBeforeAndAfterScenarioStepsIfGivenStory = skipBeforeAndAfterScenarioStepsIfGivenStory;
return this;
}
public StoryControls doIgnoreMetaFiltersIfGivenStory(
boolean ignoreMetaFiltersIfGivenStory) {
this.ignoreMetaFiltersIfGivenStory = ignoreMetaFiltersIfGivenStory;
return this;
}
public StoryControls doMetaByRow(boolean metaByRow) {
this.metaByRow = metaByRow;
return this;
}
public StoryControls useStoryMetaPrefix(String storyMetaPrefix) {
this.storyMetaPrefix = storyMetaPrefix;
return this;
}
public StoryControls useScenarioMetaPrefix(String scenarioMetaPrefix) {
this.scenarioMetaPrefix = scenarioMetaPrefix;
return this;
}
public StoryControls doSkipStoryIfGivenStoryFailed(boolean skipStoryIfGivenStoryFailed) {
this.skipStoryIfGivenStoryFailed = skipStoryIfGivenStoryFailed;
return this;
}
public StoryControls useStoryIndexFormat(NumberFormat storyIndexFormat) {
this.storyIndexFormat = storyIndexFormat;
return this;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}