github.com/getgauge/gauge@v1.6.9/execution/result/conceptResult.go (about)

     1  /*----------------------------------------------------------------
     2   *  Copyright (c) ThoughtWorks, Inc.
     3   *  Licensed under the Apache License, Version 2.0
     4   *  See LICENSE in the project root for license information.
     5   *----------------------------------------------------------------*/
     6  
     7  package result
     8  
     9  import "github.com/getgauge/gauge-proto/go/gauge_messages"
    10  
    11  // ConceptResult represents result of a concept execution
    12  type ConceptResult struct {
    13  	ProtoConcept *gauge_messages.ProtoConcept
    14  }
    15  
    16  // NewConceptResult creates a ConceptResult with given ProtoConcept
    17  func NewConceptResult(con *gauge_messages.ProtoConcept) *ConceptResult {
    18  	return &ConceptResult{ProtoConcept: con}
    19  }
    20  
    21  // SetFailure sets the conceptResult as failed
    22  func (conceptResult *ConceptResult) SetFailure() {
    23  	conceptResult.ProtoConcept.ConceptExecutionResult.ExecutionResult.Failed = true
    24  }
    25  
    26  // GetFailed returns the state of the concept result
    27  func (conceptResult *ConceptResult) GetFailed() bool {
    28  	return conceptResult.ProtoConcept.GetConceptExecutionResult().GetExecutionResult().GetFailed()
    29  }
    30  
    31  // GetRecoverable returns the state of the concept result
    32  func (conceptResult *ConceptResult) GetRecoverable() bool {
    33  	return conceptResult.ProtoConcept.GetConceptExecutionResult().GetExecutionResult().GetRecoverableError()
    34  }
    35  
    36  // ExecTime returns the time taken for concept execution
    37  func (conceptResult *ConceptResult) ExecTime() int64 {
    38  	return conceptResult.ProtoConcept.GetConceptExecutionResult().GetExecutionResult().GetExecutionTime()
    39  }
    40  
    41  // SetConceptExecResult sets the conceptExecResult as result of concept execution as well as result of ConceptStep
    42  func (conceptResult *ConceptResult) SetConceptExecResult(conceptExecResult *gauge_messages.ProtoStepExecutionResult) {
    43  	conceptResult.ProtoConcept.ConceptExecutionResult = conceptExecResult
    44  	conceptResult.ProtoConcept.ConceptStep.StepExecutionResult = conceptExecResult
    45  }
    46  
    47  // UpdateConceptExecResult sets the result of Concept execution
    48  func (conceptResult *ConceptResult) UpdateConceptExecResult() {
    49  	var failed, recoverable bool
    50  	protoConcept := conceptResult.ProtoConcept
    51  	var conceptExecutionTime int64
    52  	for _, step := range protoConcept.GetSteps() {
    53  		if step.GetItemType() == gauge_messages.ProtoItem_Concept {
    54  			stepExecResult := step.GetConcept().GetConceptExecutionResult().GetExecutionResult()
    55  			conceptExecutionTime += stepExecResult.GetExecutionTime()
    56  			if step.GetConcept().GetConceptExecutionResult().GetExecutionResult().GetFailed() {
    57  				failed = true
    58  				conceptExecutionResult := &gauge_messages.ProtoStepExecutionResult{ExecutionResult: step.GetConcept().GetConceptExecutionResult().GetExecutionResult(), Skipped: false}
    59  				conceptExecutionResult.ExecutionResult.ExecutionTime = conceptExecutionTime
    60  				protoConcept.ConceptExecutionResult = conceptExecutionResult
    61  				protoConcept.ConceptStep.StepExecutionResult = conceptExecutionResult
    62  				recoverable = step.GetConcept().GetConceptExecutionResult().GetExecutionResult().GetRecoverableError()
    63  				if !recoverable {
    64  					return
    65  				}
    66  			}
    67  		} else if step.GetItemType() == gauge_messages.ProtoItem_Step {
    68  			stepExecResult := step.GetStep().GetStepExecutionResult().GetExecutionResult()
    69  			conceptExecutionTime += stepExecResult.GetExecutionTime()
    70  			if stepExecResult.GetFailed() {
    71  				failed = true
    72  				conceptExecutionResult := &gauge_messages.ProtoStepExecutionResult{ExecutionResult: stepExecResult, Skipped: false}
    73  				conceptExecutionResult.ExecutionResult.ExecutionTime = conceptExecutionTime
    74  				protoConcept.ConceptExecutionResult = conceptExecutionResult
    75  				protoConcept.ConceptStep.StepExecutionResult = conceptExecutionResult
    76  				recoverable = step.GetStep().GetStepExecutionResult().GetExecutionResult().GetRecoverableError()
    77  				if !recoverable {
    78  					return
    79  				}
    80  			}
    81  		}
    82  	}
    83  
    84  	conceptResult.SetConceptExecResult(&gauge_messages.ProtoStepExecutionResult{ExecutionResult: &gauge_messages.ProtoExecutionResult{RecoverableError: recoverable, Failed: failed, ExecutionTime: conceptExecutionTime}})
    85  	protoConcept.ConceptStep.StepExecutionResult.Skipped = false
    86  }
    87  
    88  func (conceptResult *ConceptResult) GetPreHook() []*gauge_messages.ProtoHookFailure {
    89  	return nil
    90  }
    91  
    92  func (conceptResult *ConceptResult) GetPostHook() []*gauge_messages.ProtoHookFailure {
    93  	return nil
    94  }
    95  
    96  func (conceptResult *ConceptResult) AddPreHook(_ ...*gauge_messages.ProtoHookFailure) {
    97  }
    98  
    99  func (conceptResult *ConceptResult) AddPostHook(_ ...*gauge_messages.ProtoHookFailure) {
   100  }
   101  
   102  func (conceptResult *ConceptResult) Item() interface{} {
   103  	return conceptResult.ProtoConcept
   104  }