StoryControls.java

  1. package org.jbehave.core.embedder;

  2. import java.text.DecimalFormat;
  3. import java.text.NumberFormat;
  4. import java.util.Optional;

  5. import org.apache.commons.lang3.builder.ToStringBuilder;
  6. import org.apache.commons.lang3.builder.ToStringStyle;

  7. /**
  8.  * Holds flags used to control story execution flow.
  9.  * <ul>
  10.  * <li>{@link StoryControls#storyIndexFormat} story index format using {@link DecimalFormat}.
  11.  * Default value: " [0]" (minimum one integer digit in square brackets)</li>
  12.  * </ul>
  13.  */
  14. public class StoryControls {

  15.     private boolean dryRun = false;
  16.     private boolean resetStateBeforeStory = true;
  17.     private boolean resetStateBeforeScenario = true;
  18.     private boolean skipScenariosAfterFailure = false;
  19.     private boolean skipBeforeAndAfterScenarioStepsIfGivenStory = false;
  20.     private boolean ignoreMetaFiltersIfGivenStory = false;
  21.     private boolean metaByRow = false;
  22.     private String storyMetaPrefix = "";
  23.     private String scenarioMetaPrefix = "";
  24.     private boolean skipStoryIfGivenStoryFailed = false;
  25.     private NumberFormat storyIndexFormat;
  26.     private final ThreadLocal<StoryControls> currentStoryControls = ThreadLocal
  27.             .withInitial(() -> new StoryControls(this));

  28.     public StoryControls(StoryControls storyControls) {
  29.         dryRun = storyControls.dryRun;
  30.         resetStateBeforeStory = storyControls.resetStateBeforeStory;
  31.         resetStateBeforeScenario = storyControls.resetStateBeforeScenario;
  32.         skipScenariosAfterFailure = storyControls.skipScenariosAfterFailure;
  33.         skipBeforeAndAfterScenarioStepsIfGivenStory = storyControls.skipBeforeAndAfterScenarioStepsIfGivenStory;
  34.         ignoreMetaFiltersIfGivenStory = storyControls.ignoreMetaFiltersIfGivenStory;
  35.         metaByRow = storyControls.metaByRow;
  36.         storyMetaPrefix = storyControls.storyMetaPrefix;
  37.         scenarioMetaPrefix = storyControls.scenarioMetaPrefix;
  38.         skipStoryIfGivenStoryFailed = storyControls.skipStoryIfGivenStoryFailed;
  39.         storyIndexFormat = storyControls.storyIndexFormat;
  40.         // should not be used
  41.         currentStoryControls.set(null);
  42.     }

  43.     public StoryControls() {
  44.     }
  45.    
  46.     public StoryControls currentStoryControls() {
  47.         return currentStoryControls.get();
  48.     }

  49.     public boolean dryRun() {
  50.         return currentStoryControls().dryRun;
  51.     }

  52.     public boolean resetStateBeforeStory() {
  53.         return currentStoryControls().resetStateBeforeStory;
  54.     }

  55.     public boolean resetStateBeforeScenario() {
  56.         return currentStoryControls().resetStateBeforeScenario;
  57.     }
  58.    
  59.     public void resetCurrentStoryControls() {
  60.         currentStoryControls.remove();
  61.     }

  62.     public boolean skipScenariosAfterFailure() {
  63.         return currentStoryControls().skipScenariosAfterFailure;
  64.     }

  65.     public boolean skipBeforeAndAfterScenarioStepsIfGivenStory() {
  66.         return currentStoryControls().skipBeforeAndAfterScenarioStepsIfGivenStory;
  67.     }

  68.     public boolean ignoreMetaFiltersIfGivenStory() {
  69.         return currentStoryControls().ignoreMetaFiltersIfGivenStory;
  70.     }

  71.     public boolean metaByRow() {
  72.         return currentStoryControls().metaByRow;
  73.     }

  74.     public String storyMetaPrefix() {
  75.         return currentStoryControls().storyMetaPrefix;
  76.     }

  77.     public String scenarioMetaPrefix() {
  78.         return currentStoryControls().scenarioMetaPrefix;
  79.     }

  80.     public boolean skipStoryIfGivenStoryFailed() {
  81.         return currentStoryControls().skipStoryIfGivenStoryFailed;
  82.     }

  83.     public NumberFormat storyIndexFormat() {
  84.         return Optional.ofNullable(currentStoryControls().storyIndexFormat).orElseGet(() -> new DecimalFormat(" [0]"));
  85.     }

  86.     public StoryControls doDryRun(boolean dryRun) {
  87.         this.dryRun = dryRun;
  88.         return this;
  89.     }

  90.     public StoryControls doResetStateBeforeScenario(boolean resetStateBeforeScenario) {
  91.         this.resetStateBeforeScenario = resetStateBeforeScenario;
  92.         return this;
  93.     }

  94.     public StoryControls doResetStateBeforeStory(boolean resetStateBeforeStory) {
  95.         this.resetStateBeforeStory = resetStateBeforeStory;
  96.         return this;
  97.     }
  98.    
  99.     public StoryControls doSkipScenariosAfterFailure(boolean skipScenariosAfterFailure) {
  100.         this.skipScenariosAfterFailure = skipScenariosAfterFailure;
  101.         return this;
  102.     }

  103.     public StoryControls doSkipBeforeAndAfterScenarioStepsIfGivenStory(
  104.             boolean skipBeforeAndAfterScenarioStepsIfGivenStory) {
  105.         this.skipBeforeAndAfterScenarioStepsIfGivenStory = skipBeforeAndAfterScenarioStepsIfGivenStory;
  106.         return this;
  107.     }

  108.     public StoryControls doIgnoreMetaFiltersIfGivenStory(
  109.             boolean ignoreMetaFiltersIfGivenStory) {
  110.         this.ignoreMetaFiltersIfGivenStory = ignoreMetaFiltersIfGivenStory;
  111.         return this;
  112.     }

  113.     public StoryControls doMetaByRow(boolean metaByRow) {
  114.         this.metaByRow = metaByRow;
  115.         return this;
  116.     }

  117.     public StoryControls useStoryMetaPrefix(String storyMetaPrefix) {
  118.         this.storyMetaPrefix = storyMetaPrefix;
  119.         return this;        
  120.     }

  121.     public StoryControls useScenarioMetaPrefix(String scenarioMetaPrefix) {
  122.         this.scenarioMetaPrefix = scenarioMetaPrefix;
  123.         return this;        
  124.     }

  125.     public StoryControls doSkipStoryIfGivenStoryFailed(boolean skipStoryIfGivenStoryFailed) {
  126.         this.skipStoryIfGivenStoryFailed = skipStoryIfGivenStoryFailed;
  127.         return this;
  128.     }

  129.     public StoryControls useStoryIndexFormat(NumberFormat storyIndexFormat) {
  130.         this.storyIndexFormat = storyIndexFormat;
  131.         return this;
  132.     }

  133.     @Override
  134.     public String toString() {
  135.         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  136.     }

  137. }