From efcab84834f2148f1aff7443b7aacfba9f95f612 Mon Sep 17 00:00:00 2001 From: Valery Yatsynovich Date: Tue, 21 May 2019 12:40:30 +0300 Subject: [PATCH] Add support of BeforeStep/AfterStep lifecycle steps --- .../monitoring/JUnitDescriptionGenerator.java | 34 ++++++++++++++----- .../JUnitDescriptionGeneratorTest.java | 9 +++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGenerator.java b/src/main/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGenerator.java index 2b409723..ec3d53a0 100644 --- a/src/main/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGenerator.java +++ b/src/main/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGenerator.java @@ -100,7 +100,7 @@ public Description createDescriptionFrom(Lifecycle lifecycle, PerformableScenari private void addScenarioSteps(Lifecycle lifecycle, ScenarioType scenarioType, Scenario scenario, Description scenarioDescription) { addBeforeOrAfterScenarioStep(scenarioType, Stage.BEFORE, scenarioDescription, BEFORE_SCENARIO_STEP_NAME); addSteps(scenarioDescription, lifecycle.getBeforeSteps(Scope.SCENARIO)); - addSteps(scenarioDescription, scenario.getSteps()); + addScenarioSteps(lifecycle, scenarioDescription, scenario); addSteps(scenarioDescription, lifecycle.getAfterSteps(Scope.SCENARIO, Outcome.ANY)); addBeforeOrAfterScenarioStep(scenarioType, Stage.AFTER, scenarioDescription, AFTER_SCENARIO_STEP_NAME); } @@ -113,6 +113,20 @@ private void addBeforeOrAfterScenarioStep(ScenarioType scenarioType, Stage stage addBeforeOrAfterStep(stage, beforeOrAfterSteps, description, stepName); } + private void addScenarioSteps(Lifecycle lifecycle, Description scenarioDescription, Scenario scenario) { + List beforeSteps = lifecycle.getBeforeSteps(Scope.STEP); + List afterSteps = lifecycle.getAfterSteps(Scope.STEP); + previousNonAndStep = null; + String tempPreviousNonAndStep = null; + for (String scenarioStep : scenario.getSteps()) { + addSteps(scenarioDescription, beforeSteps); + previousNonAndStep = tempPreviousNonAndStep; + addStep(scenarioDescription, scenarioStep); + tempPreviousNonAndStep = previousNonAndStep; + addSteps(scenarioDescription, afterSteps); + } + } + private void addBeforeOrAfterStep(Stage stage, List beforeOrAfterSteps, Description description, String stepName) { @@ -181,13 +195,17 @@ private void insertDescriptionForExamples(Lifecycle lifecycle, PerformableScenar private void addSteps(Description description, List steps) { previousNonAndStep = null; for (String stringStep : steps) { - String stringStepOneLine = stripLinebreaks(stringStep); - StepCandidate matchingStep = findMatchingStep(stringStep); - if (matchingStep == null) { - addNonExistingStep(description, stringStepOneLine, stringStep); - } else { - addExistingStep(description, stringStepOneLine, matchingStep); - } + addStep(description, stringStep); + } + } + + private void addStep(Description description, String step) { + String stringStepOneLine = stripLinebreaks(step); + StepCandidate matchingStep = findMatchingStep(step); + if (matchingStep == null) { + addNonExistingStep(description, stringStepOneLine, step); + } else { + addExistingStep(description, stringStepOneLine, matchingStep); } } diff --git a/src/test/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGeneratorTest.java b/src/test/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGeneratorTest.java index 0c3c3842..dca22203 100644 --- a/src/test/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGeneratorTest.java +++ b/src/test/java/com/github/valfirst/jbehave/junit/monitoring/JUnitDescriptionGeneratorTest.java @@ -134,7 +134,7 @@ public void shouldGenerateDescriptionForStory() { Scenario scenario = createScenario(step1, step2); Story story = createStory(lifecycle, scenario); List storyDescriptions = createDescriptionFrom(story); - assertEquals(6, generator.getTestCases()); + assertEquals(10, generator.getTestCases()); assertEquals(1, storyDescriptions.size()); Description storyDescription = storyDescriptions.get(0); assertEquals(Description.createSuiteDescription(story.getName()), storyDescription); @@ -146,8 +146,12 @@ public void shouldGenerateDescriptionForStory() { Description scenarioDescription = storyDescription.getChildren().get(1); List scenarioLevelDescriptions = asList( Description.createTestDescription(STEPS_TYPE, "Then before SCENARIO"), + Description.createTestDescription(STEPS_TYPE, "Then before STEP"), Description.createTestDescription(STEPS_TYPE, step1), + Description.createTestDescription(STEPS_TYPE, "Then after STEP"), + Description.createTestDescription(STEPS_TYPE, "Then before STEP\u200B"), Description.createTestDescription(Object.class, "And step with table param:"), + Description.createTestDescription(STEPS_TYPE, "Then after STEP\u200B"), Description.createTestDescription(STEPS_TYPE, "Then after ANY SCENARIO")); assertEquals(scenarioLevelDescriptions, scenarioDescription.getChildren()); } @@ -414,11 +418,12 @@ private List createBeforeLifecycleSteps() { private List createAfterLifecycleSteps() { List steps = new ArrayList<>(); - for (Scope scope : Scope.values()) { + for (Scope scope : new Scope[] { Scope.SCENARIO, Scope.STORY }) { for (Outcome outcome : Outcome.values()) { steps.add(new Steps(scope, outcome, singletonList("Then after " + outcome + " " + scope))); } } + steps.add(new Steps(Scope.STEP, Outcome.ANY, singletonList("Then after "+ Scope.STEP))); return steps; }