Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public void setNextStage(ExecutionStage stage) {
}

public Spec.ProtoExecutionResult execute(Spec.ProtoExecutionResult result) {
if (result.getFailed() || result.getSkipScenario()) {
return executeNext(result);
}
Spec.ProtoExecutionResult execResult = execute();
Spec.ProtoExecutionResult stageResult = mergeExecResults(result, execResult);
return executeNext(stageResult);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public Spec.ProtoExecutionResult execute() {
for (Hook hook : hooks) {
result = new TaggedHookExecutor(hook, info).execute();
totalHooksExecutionTime += result.getExecutionTime();
if (result.getFailed()) {
if (result.getFailed() || result.getSkipScenario()) {
return Spec.ProtoExecutionResult.newBuilder(result).setExecutionTime(totalHooksExecutionTime).build();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void setNextStage(ExecutionStage stage) {
}

public Spec.ProtoExecutionResult execute(Spec.ProtoExecutionResult previousStageResult) {
if (previousStageResult.getFailed()) {
if (previousStageResult.getFailed() || previousStageResult.getSkipScenario()) {
return executeNext(previousStageResult);
}
Spec.ProtoExecutionResult stageResult = executeStep();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.thoughtworks.gauge.execution;

import gauge.messages.Spec;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertTrue;

public class HookExecutionStageTest {
@Test
public void shouldShortCircuitIfPreviousStageSkipped() {
HookExecutionStage stage = new HookExecutionStage(java.util.Collections.emptyList(), new com.thoughtworks.gauge.ClassInstanceManager());
Spec.ProtoExecutionResult previous = Spec.ProtoExecutionResult.newBuilder().setSkipScenario(true).build();
Spec.ProtoExecutionResult result = stage.execute(previous);
assertTrue(result.getSkipScenario());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -251,4 +251,18 @@ public Object table(Object table) {
public void skipScenarioStep() {
throw new com.thoughtworks.gauge.SkipScenarioException("skipping this scenario due to unmet condition");
}

@Test
public void shouldShortCircuitIfPreviousStageSkipped() {
Messages.ExecuteStepRequest executeStepRequest = Messages.ExecuteStepRequest.newBuilder()
.setParsedStepText("foo bar")
.setActualStepText("foo bar")
.build();
StepExecutionStage executionStage = new StepExecutionStage(
executeStepRequest, new ClassInstanceManager(), new ParameterParsingChain(), mock(StepRegistry.class)
);
Spec.ProtoExecutionResult previous = Spec.ProtoExecutionResult.newBuilder().setSkipScenario(true).build();
Spec.ProtoExecutionResult result = executionStage.execute(previous);
assertTrue(result.getSkipScenario());
}
}
Loading