Skip to content

Commit

Permalink
JBEHAVE-1514 Rename StepDefinitionLevel to ExecutionType
Browse files Browse the repository at this point in the history
  • Loading branch information
uarlouski committed Oct 27, 2021
1 parent cede925 commit 2b4eb2a
Show file tree
Hide file tree
Showing 11 changed files with 160 additions and 159 deletions.
8 changes: 4 additions & 4 deletions distribution/src/site/content/migration-paths.html
Expand Up @@ -43,10 +43,10 @@ <h2>From 4.x to 5.0</h2>
<li>Replace StoryReporter hooks:</li>
<ul>
<li>StoryReporter#beforeStep(String) with StoryReporter#beforeStep(Step)</li>
<li>StoryReporter#beforeStorySteps(Stage) with StoryReporter#beforeStorySteps(Stage, StepDefinitionLevel)</li>
<li>StoryReporter#afterStorySteps(Stage) with StoryReporter#afterStorySteps(Stage, StepDefinitionLevel)</li>
<li>StoryReporter#beforeScenarioSteps(Stage) with StoryReporter#beforeScenarioSteps(Stage, StepDefinitionLevel)</li>
<li>StoryReporter#afterScenarioSteps(Stage) with StoryReporter#afterScenarioSteps(Stage, StepDefinitionLevel)</li>
<li>StoryReporter#beforeStorySteps(Stage) with StoryReporter#beforeStorySteps(Stage, Lifecycle.ExecutionType)</li>
<li>StoryReporter#afterStorySteps(Stage) with StoryReporter#afterStorySteps(Stage, Lifecycle.ExecutionType)</li>
<li>StoryReporter#beforeScenarioSteps(Stage) with StoryReporter#beforeScenarioSteps(Stage, Lifecycle.ExecutionType)</li>
<li>StoryReporter#afterScenarioSteps(Stage) with StoryReporter#afterScenarioSteps(Stage, Lifecycle.ExecutionType)</li>
</ul>
</ul>

Expand Down
Expand Up @@ -28,14 +28,14 @@
import org.jbehave.core.model.GivenStories;
import org.jbehave.core.model.GivenStory;
import org.jbehave.core.model.Lifecycle;
import org.jbehave.core.model.Lifecycle.ExecutionType;
import org.jbehave.core.model.Meta;
import org.jbehave.core.model.Scenario;
import org.jbehave.core.model.Story;
import org.jbehave.core.model.StoryDuration;
import org.jbehave.core.reporters.ConcurrentStoryReporter;
import org.jbehave.core.reporters.DelegatingStoryReporter;
import org.jbehave.core.reporters.StoryReporter;
import org.jbehave.core.reporters.StoryReporter.StepDefinitionLevel;
import org.jbehave.core.steps.AbstractStepResult;
import org.jbehave.core.steps.PendingStepMethodGenerator;
import org.jbehave.core.steps.Step;
Expand Down Expand Up @@ -94,8 +94,8 @@ private PerformableStory performableStory(RunContext context, Story story, Map<S
Map<Stage, PerformableSteps> lifecycleSteps = context.lifecycleSteps(story.getLifecycle(), storyMeta,
Scope.STORY);

performableStory.addBeforeSteps(StepDefinitionLevel.SYSTEM, context.beforeStorySteps(storyMeta));
performableStory.addBeforeSteps(StepDefinitionLevel.USER, lifecycleSteps.get(Stage.BEFORE));
performableStory.addBeforeSteps(ExecutionType.SYSTEM, context.beforeStorySteps(storyMeta));
performableStory.addBeforeSteps(ExecutionType.USER, lifecycleSteps.get(Stage.BEFORE));
performableStory.addAll(performableScenarios(context, story, storyParameters, filteredStory));

// Add Given stories only if story contains non-filtered scenarios
Expand All @@ -106,8 +106,8 @@ private PerformableStory performableStory(RunContext context, Story story, Map<S
givenStoryParameters));
}

performableStory.addAfterSteps(StepDefinitionLevel.USER, lifecycleSteps.get(Stage.AFTER));
performableStory.addAfterSteps(StepDefinitionLevel.SYSTEM, context.afterStorySteps(storyMeta));
performableStory.addAfterSteps(ExecutionType.USER, lifecycleSteps.get(Stage.AFTER));
performableStory.addAfterSteps(ExecutionType.SYSTEM, context.afterStorySteps(storyMeta));

}

Expand Down Expand Up @@ -203,13 +203,13 @@ private PerformableScenario performableScenario(RunContext context, Story story,

// run before scenario steps, if allowed
if (runBeforeAndAfterScenarioSteps) {
normalScenario.addBeforeSteps(StepDefinitionLevel.SYSTEM,
normalScenario.addBeforeSteps(ExecutionType.SYSTEM,
context.beforeScenarioSteps(storyAndScenarioMeta, ScenarioType.NORMAL));
}
performableScenario.useNormalScenario(normalScenario);
// after scenario steps, if allowed
if (runBeforeAndAfterScenarioSteps) {
normalScenario.addAfterSteps(StepDefinitionLevel.SYSTEM,
normalScenario.addAfterSteps(ExecutionType.SYSTEM,
context.afterScenarioSteps(storyAndScenarioMeta, ScenarioType.NORMAL));
}
}
Expand Down Expand Up @@ -242,11 +242,11 @@ private ExamplePerformableScenario exampleScenario(RunContext context, Story sto
ExamplePerformableScenario exampleScenario = new ExamplePerformableScenario(story, scenario, parameters,
exampleIndex);
exampleScenario.setStoryAndScenarioMeta(storyAndScenarioMeta);
exampleScenario.addBeforeSteps(StepDefinitionLevel.SYSTEM,
exampleScenario.addBeforeSteps(ExecutionType.SYSTEM,
context.beforeScenarioSteps(storyAndScenarioMeta, ScenarioType.EXAMPLE));
addStepsWithLifecycle(exampleScenario, context, story.getLifecycle(), parameters, scenario,
storyAndScenarioMeta);
exampleScenario.addAfterSteps(StepDefinitionLevel.SYSTEM,
exampleScenario.addAfterSteps(ExecutionType.SYSTEM,
context.afterScenarioSteps(storyAndScenarioMeta, ScenarioType.EXAMPLE));
return exampleScenario;
}
Expand All @@ -266,13 +266,13 @@ private void addStepsWithLifecycle(AbstractPerformableScenario performableScenar
Map<Stage, PerformableSteps> lifecycleSteps = context.lifecycleSteps(lifecycle, storyAndScenarioMeta,
Scope.SCENARIO);

performableScenario.addBeforeSteps(StepDefinitionLevel.SYSTEM, context.beforeScenarioSteps(storyAndScenarioMeta, ScenarioType.ANY));
performableScenario.addBeforeSteps(StepDefinitionLevel.USER, lifecycleSteps.get(Stage.BEFORE));
performableScenario.addBeforeSteps(ExecutionType.SYSTEM, context.beforeScenarioSteps(storyAndScenarioMeta, ScenarioType.ANY));
performableScenario.addBeforeSteps(ExecutionType.USER, lifecycleSteps.get(Stage.BEFORE));
addMetaParameters(parameters, storyAndScenarioMeta);
performableScenario.setGivenStories(performableGivenStories(context, scenario.getGivenStories(), parameters));
performableScenario.addSteps(context.scenarioSteps(lifecycle, storyAndScenarioMeta, scenario, parameters));
performableScenario.addAfterSteps(StepDefinitionLevel.USER, lifecycleSteps.get(Stage.AFTER));
performableScenario.addAfterSteps(StepDefinitionLevel.SYSTEM, context.afterScenarioSteps(storyAndScenarioMeta, ScenarioType.ANY));
performableScenario.addAfterSteps(ExecutionType.USER, lifecycleSteps.get(Stage.AFTER));
performableScenario.addAfterSteps(ExecutionType.SYSTEM, context.afterScenarioSteps(storyAndScenarioMeta, ScenarioType.ANY));
}

private PerformableGivenStories performableGivenStories(RunContext context, GivenStories givenStories,
Expand Down Expand Up @@ -884,7 +884,7 @@ public static enum Status {
public static abstract class PerformableEntity implements Performable {

private PerformableGivenStories givenStories;
private final Map<Stage, Map<StepDefinitionLevel, PerformableSteps>> stageSteps;
private final Map<Stage, Map<ExecutionType, PerformableSteps>> stageSteps;
private final LifecycleStepsExecutionHook beforeHook;
private final LifecycleStepsExecutionHook afterHook;

Expand All @@ -899,44 +899,44 @@ public void setGivenStories(PerformableGivenStories givenStories) {
this.givenStories = givenStories;
}

public void addBeforeSteps(StepDefinitionLevel level, PerformableSteps beforeSteps) {
getBeforeSteps(level).add(beforeSteps);
public void addBeforeSteps(Lifecycle.ExecutionType type, PerformableSteps beforeSteps) {
getBeforeSteps(type).add(beforeSteps);
}

public void addAfterSteps(StepDefinitionLevel level, PerformableSteps afterSteps) {
getAfterSteps(level).add(afterSteps);
public void addAfterSteps(Lifecycle.ExecutionType type, PerformableSteps afterSteps) {
getAfterSteps(type).add(afterSteps);
}

protected void performBeforeSteps(RunContext context) throws InterruptedException {
performSteps(context, Stage.BEFORE, StepDefinitionLevel.SYSTEM);
performSteps(context, Stage.BEFORE, StepDefinitionLevel.USER);
performSteps(context, Stage.BEFORE, ExecutionType.SYSTEM);
performSteps(context, Stage.BEFORE, ExecutionType.USER);
}

protected void performAfterSteps(RunContext context) throws InterruptedException {
performSteps(context, Stage.AFTER, StepDefinitionLevel.USER);
performSteps(context, Stage.AFTER, StepDefinitionLevel.SYSTEM);
performSteps(context, Stage.AFTER, ExecutionType.USER);
performSteps(context, Stage.AFTER, ExecutionType.SYSTEM);
}

protected PerformableSteps getBeforeSteps(StepDefinitionLevel level) {
return getPerformableSteps(Stage.BEFORE, level);
protected PerformableSteps getBeforeSteps(Lifecycle.ExecutionType type) {
return getPerformableSteps(Stage.BEFORE, type);
}

protected PerformableSteps getAfterSteps(StepDefinitionLevel level) {
return getPerformableSteps(Stage.AFTER, level);
protected PerformableSteps getAfterSteps(Lifecycle.ExecutionType type) {
return getPerformableSteps(Stage.AFTER, type);
}

private PerformableSteps getPerformableSteps(Stage stage, StepDefinitionLevel level) {
Map<StepDefinitionLevel, PerformableSteps> steps = stageSteps.computeIfAbsent(stage,
t -> new EnumMap<>(StepDefinitionLevel.class));
return steps.computeIfAbsent(level, s -> new PerformableSteps());
private PerformableSteps getPerformableSteps(Stage stage, Lifecycle.ExecutionType type) {
Map<ExecutionType, PerformableSteps> steps = stageSteps.computeIfAbsent(stage,
t -> new EnumMap<>(ExecutionType.class));
return steps.computeIfAbsent(type, s -> new PerformableSteps());
}

private void performSteps(RunContext context, Stage stage, StepDefinitionLevel level)
private void performSteps(RunContext context, Stage stage, Lifecycle.ExecutionType type)
throws InterruptedException {
StoryReporter reporter = context.reporter();
this.beforeHook.perform(reporter, stage, level);
getPerformableSteps(stage, level).perform(context);
this.afterHook.perform(reporter, stage, level);
this.beforeHook.perform(reporter, stage, type);
getPerformableSteps(stage, type).perform(context);
this.afterHook.perform(reporter, stage, type);
}

public PerformableGivenStories getGivenStories() {
Expand All @@ -946,7 +946,7 @@ public PerformableGivenStories getGivenStories() {
}

private interface LifecycleStepsExecutionHook {
void perform(StoryReporter reporter, Stage stage, StepDefinitionLevel level);
void perform(StoryReporter reporter, Stage stage, Lifecycle.ExecutionType type);
}

public static class PerformableStory extends PerformableEntity {
Expand Down Expand Up @@ -1234,11 +1234,11 @@ protected void perform(PerformableSteps performableSteps, RunContext context, Co

@Override
public void reportFailures(FailureContext context) {
getBeforeSteps(StepDefinitionLevel.SYSTEM).reportFailures(context);
getBeforeSteps(StepDefinitionLevel.USER).reportFailures(context);
getBeforeSteps(ExecutionType.SYSTEM).reportFailures(context);
getBeforeSteps(ExecutionType.USER).reportFailures(context);
steps.reportFailures(context);
getAfterSteps(StepDefinitionLevel.USER).reportFailures(context);
getAfterSteps(StepDefinitionLevel.SYSTEM).reportFailures(context);
getAfterSteps(ExecutionType.USER).reportFailures(context);
getAfterSteps(ExecutionType.SYSTEM).reportFailures(context);
}

protected void resetStateIfConfigured(RunContext context) {
Expand Down
13 changes: 13 additions & 0 deletions jbehave-core/src/main/java/org/jbehave/core/model/Lifecycle.java
Expand Up @@ -196,4 +196,17 @@ public String toString() {

}

public enum ExecutionType {

/**
* Represents steps declared in Lifecycle section: composite ones and steps annotated with @Given, @When, @Then
*/
USER,

/**
* Represents steps annotated with @BeforeScenario, @AfterScenario, @BeforeStory, @AfterStory
*/
SYSTEM;
}

}
Expand Up @@ -11,6 +11,7 @@
import org.jbehave.core.model.ExamplesTable;
import org.jbehave.core.model.GivenStories;
import org.jbehave.core.model.Lifecycle;
import org.jbehave.core.model.Lifecycle.ExecutionType;
import org.jbehave.core.model.Narrative;
import org.jbehave.core.model.OutcomesTable;
import org.jbehave.core.model.Scenario;
Expand Down Expand Up @@ -76,10 +77,10 @@ public class ConcurrentStoryReporter implements StoryReporter {
afterStory = StoryReporter.class.getMethod("afterStory", Boolean.TYPE);
narrative = StoryReporter.class.getMethod("narrative", Narrative.class);
lifecycle = StoryReporter.class.getMethod("lifecycle", Lifecycle.class);
beforeStorySteps = StoryReporter.class.getMethod("beforeStorySteps", Stage.class, StepDefinitionLevel.class);
afterStorySteps = StoryReporter.class.getMethod("afterStorySteps", Stage.class, StepDefinitionLevel.class);
beforeScenarioSteps = StoryReporter.class.getMethod("beforeScenarioSteps", Stage.class, StepDefinitionLevel.class);
afterScenarioSteps = StoryReporter.class.getMethod("afterScenarioSteps", Stage.class, StepDefinitionLevel.class);
beforeStorySteps = StoryReporter.class.getMethod("beforeStorySteps", Stage.class, ExecutionType.class);
afterStorySteps = StoryReporter.class.getMethod("afterStorySteps", Stage.class, ExecutionType.class);
beforeScenarioSteps = StoryReporter.class.getMethod("beforeScenarioSteps", Stage.class, ExecutionType.class);
afterScenarioSteps = StoryReporter.class.getMethod("afterScenarioSteps", Stage.class, ExecutionType.class);
beforeComposedSteps = StoryReporter.class.getMethod("beforeComposedSteps");
afterComposedSteps = StoryReporter.class.getMethod("afterComposedSteps");
scenarioExcluded = StoryReporter.class.getMethod("scenarioExcluded", Scenario.class, String.class);
Expand Down Expand Up @@ -160,13 +161,13 @@ public void lifecycle(Lifecycle lifecycle) {
}

@Override
public void beforeStorySteps(Stage stage, StepDefinitionLevel level) {
perform(reporter -> reporter.beforeStorySteps(stage, level), beforeStorySteps, stage, level);
public void beforeStorySteps(Stage stage, Lifecycle.ExecutionType type) {
perform(reporter -> reporter.beforeStorySteps(stage, type), beforeStorySteps, stage, type);
}

@Override
public void afterStorySteps(Stage stage, StepDefinitionLevel level) {
perform(reporter -> reporter.afterStorySteps(stage, level), afterStorySteps, stage, level);
public void afterStorySteps(Stage stage, Lifecycle.ExecutionType type) {
perform(reporter -> reporter.afterStorySteps(stage, type), afterStorySteps, stage, type);
}

@Override
Expand All @@ -180,13 +181,13 @@ public void afterComposedSteps() {
}

@Override
public void beforeScenarioSteps(Stage stage, StepDefinitionLevel level) {
perform(reporter -> reporter.beforeScenarioSteps(stage, level), beforeScenarioSteps, stage, level);
public void beforeScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
perform(reporter -> reporter.beforeScenarioSteps(stage, type), beforeScenarioSteps, stage, type);
}

@Override
public void afterScenarioSteps(Stage stage, StepDefinitionLevel level) {
perform(reporter -> reporter.afterScenarioSteps(stage, level), afterScenarioSteps, stage, level);
public void afterScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
perform(reporter -> reporter.afterScenarioSteps(stage, type), afterScenarioSteps, stage, type);
}

@Override
Expand Down
Expand Up @@ -100,13 +100,13 @@ public void lifecycle(Lifecycle lifecycle) {
}

@Override
public void beforeScenarioSteps(Stage stage, StepDefinitionLevel level) {
delegate(reporter -> reporter.beforeScenarioSteps(stage, level));
public void beforeScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
delegate(reporter -> reporter.beforeScenarioSteps(stage, type));
}

@Override
public void afterScenarioSteps(Stage stage, StepDefinitionLevel level) {
delegate(reporter -> reporter.afterScenarioSteps(stage, level));
public void afterScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
delegate(reporter -> reporter.afterScenarioSteps(stage, type));
}

@Override
Expand All @@ -120,13 +120,13 @@ public void afterComposedSteps() {
}

@Override
public void beforeStorySteps(Stage stage, StepDefinitionLevel level) {
delegate(reporter -> reporter.beforeStorySteps(stage, level));
public void beforeStorySteps(Stage stage, Lifecycle.ExecutionType type) {
delegate(reporter -> reporter.beforeStorySteps(stage, type));
}

@Override
public void afterStorySteps(Stage stage, StepDefinitionLevel level) {
delegate(reporter -> reporter.afterStorySteps(stage, level));
public void afterStorySteps(Stage stage, Lifecycle.ExecutionType type) {
delegate(reporter -> reporter.afterStorySteps(stage, type));
}

@Override
Expand Down
Expand Up @@ -97,19 +97,19 @@ public void lifecycle(Lifecycle lifecycle) {
}

@Override
public void beforeStorySteps(Stage stage, StepDefinitionLevel level) {
public void beforeStorySteps(Stage stage, Lifecycle.ExecutionType type) {
}

@Override
public void afterStorySteps(Stage stage, StepDefinitionLevel level) {
public void afterStorySteps(Stage stage, Lifecycle.ExecutionType type) {
}

@Override
public void beforeScenarioSteps(Stage stage, StepDefinitionLevel level) {
public void beforeScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
}

@Override
public void afterScenarioSteps(Stage stage, StepDefinitionLevel level) {
public void afterScenarioSteps(Stage stage, Lifecycle.ExecutionType type) {
}

@Override
Expand Down

0 comments on commit 2b4eb2a

Please sign in to comment.