@@ -73,18 +73,25 @@ func (e *scenarioExecutor) execute(i gauge.Item, r result.Result) {
7373 }
7474 e .notifyBeforeScenarioHook (scenarioResult )
7575
76- if ! scenarioResult .GetFailed () {
76+ if ! ( scenarioResult .GetFailed () || scenarioResult . GetSkippedScenario () ) {
7777 protoContexts := scenarioResult .ProtoScenario .GetContexts ()
7878 protoScenItems := scenarioResult .ProtoScenario .GetScenarioItems ()
7979 // context and steps are not appended together since sometime it cause the issue and the steps in step list and proto step list differs.
8080 // This is done to fix https://github.com/getgauge/gauge/issues/1629
8181 if e .executeSteps (e .contexts , protoContexts , scenarioResult ) {
82- e .executeSteps (scenario .Steps , protoScenItems , scenarioResult )
82+ if ! scenarioResult .GetSkippedScenario () {
83+ e .executeSteps (scenario .Steps , protoScenItems , scenarioResult )
84+ }
8385 }
8486 // teardowns are not appended to previous call to executeSteps to ensure they are run irrespective of context/step failure
8587 e .executeSteps (e .teardowns , scenarioResult .ProtoScenario .GetTearDownSteps (), scenarioResult )
8688 }
8789
90+ if scenarioResult .GetSkippedScenario () {
91+ e .skippedScenarioUpdateErrMap (i , r )
92+ setSkipInfoInResult (scenarioResult , scenario , e .errMap )
93+ }
94+
8895 e .notifyAfterScenarioHook (scenarioResult )
8996 scenarioResult .UpdateExecutionTime ()
9097}
@@ -123,6 +130,10 @@ func (e *scenarioExecutor) notifyBeforeScenarioHook(scenarioResult *result.Scena
123130 setScenarioFailure (e .currentExecutionInfo )
124131 handleHookFailure (scenarioResult , res , result .AddPreHook )
125132 }
133+ if res .GetSkipScenario () {
134+ scenarioResult .SetSkippedScenario ()
135+ scenarioResult .ProtoScenario .PreHookMessages = []string {res .ErrorMessage }
136+ }
126137 message .ScenarioExecutionStartingRequest .ScenarioResult = gauge .ConvertToProtoScenarioResult (scenarioResult )
127138 e .pluginHandler .NotifyPlugins (message )
128139}
@@ -205,6 +216,11 @@ func (e *scenarioExecutor) executeSteps(steps []*gauge.Step, protoItems []*gauge
205216 return false
206217 }
207218 }
219+ if scenarioResult .GetSkippedScenario () {
220+ // The step execution resulted in SkipScenario.
221+ // The rest of steps execution is skipped
222+ break ;
223+ }
208224 }
209225 }
210226 return true
@@ -222,6 +238,9 @@ func (e *scenarioExecutor) executeStep(step *gauge.Step, protoItem *gauge_messag
222238 se := & stepExecutor {runner : e .runner , pluginHandler : e .pluginHandler , currentExecutionInfo : e .currentExecutionInfo , stream : e .stream }
223239 res := se .executeStep (step , protoItem .GetStep ())
224240 protoItem .GetStep ().StepExecutionResult = res .ProtoStepExecResult ()
241+ if res .ProtoStepExecResult ().ExecutionResult .GetSkipScenario () {
242+ scenarioResult .SetSkippedScenario ()
243+ }
225244 failed = res .GetFailed ()
226245 recoverable = res .ProtoStepExecResult ().GetExecutionResult ().GetRecoverableError ()
227246 }
@@ -262,6 +281,11 @@ func (e *scenarioExecutor) executeConcept(item *gauge.Step, protoConcept *gauge_
262281
263282 return cptResult
264283 }
284+ if scenarioResult .GetSkippedScenario () {
285+ // The step execution resulted in SkipScenario.
286+ // The rest of steps execution is skipped
287+ break ;
288+ }
265289 }
266290 }
267291 cptResult .UpdateConceptExecResult ()
@@ -296,3 +320,15 @@ func setScenarioFailure(executionInfo *gauge_messages.ExecutionInfo) {
296320 setSpecFailure (executionInfo )
297321 executionInfo .CurrentScenario .IsFailed = true
298322}
323+
324+ func (e * scenarioExecutor ) skippedScenarioUpdateErrMap (i gauge.Item , r result.Result ) {
325+ scenario := i .(* gauge.Scenario )
326+ scenarioResult := r .(* result.ScenarioResult )
327+ if len (scenarioResult .ProtoScenario .PreHookMessages ) > 0 {
328+ e .errMap .ScenarioErrs [scenario ] = append ([]error {errors .New (scenarioResult .ProtoScenario .PreHookMessages [0 ])}, e .errMap .ScenarioErrs [scenario ]... )
329+ scenarioResult .ProtoScenario .SkipErrors = scenarioResult .ProtoScenario .PreHookMessages
330+ } else {
331+ e .errMap .ScenarioErrs [scenario ] = append ([]error {errors .New (e .currentExecutionInfo .CurrentStep .ErrorMessage )}, e .errMap .ScenarioErrs [scenario ]... )
332+ scenarioResult .ProtoScenario .SkipErrors = []string {e .currentExecutionInfo .CurrentStep .ErrorMessage }
333+ }
334+ }
0 commit comments