func (e *specExecutor) resolveToProtoStepItem(step *gauge.Step) *gauge_messages.ProtoItem { protoStepItem := gauge.ConvertToProtoItem(step) paramResolver := new(parser.ParamResolver) parameters := paramResolver.GetResolvedParams(step, nil, e.dataTableLookup()) updateProtoStepParameters(protoStepItem.Step, parameters) e.setSkipInfo(protoStepItem.Step, step) return protoStepItem }
func (e *specExecutor) resolveToProtoItem(item gauge.Item) *gauge_messages.ProtoItem { var protoItem *gauge_messages.ProtoItem switch item.Kind() { case gauge.StepKind: if (item.(*gauge.Step)).IsConcept { concept := item.(*gauge.Step) protoItem = e.resolveToProtoConceptItem(*concept) } else { protoItem = e.resolveToProtoStepItem(item.(*gauge.Step)) } break default: protoItem = gauge.ConvertToProtoItem(item) } return protoItem }
// Not passing pointer as we cannot modify the original concept step's lookup. This has to be populated for each iteration over data table. func (e *specExecutor) resolveToProtoConceptItem(concept gauge.Step) *gauge_messages.ProtoItem { paramResolver := new(parser.ParamResolver) parser.PopulateConceptDynamicParams(&concept, e.dataTableLookup()) protoConceptItem := gauge.ConvertToProtoItem(&concept) protoConceptItem.Concept.ConceptStep.StepExecutionResult = &gauge_messages.ProtoStepExecutionResult{} for stepIndex, step := range concept.ConceptSteps { // Need to reset parent as the step.parent is pointing to a concept whose lookup is not populated yet if step.IsConcept { step.Parent = &concept protoConceptItem.GetConcept().GetSteps()[stepIndex] = e.resolveToProtoConceptItem(*step) } else { stepParameters := paramResolver.GetResolvedParams(step, &concept, e.dataTableLookup()) updateProtoStepParameters(protoConceptItem.Concept.Steps[stepIndex].Step, stepParameters) e.setSkipInfo(protoConceptItem.Concept.Steps[stepIndex].Step, step) } } protoConceptItem.Concept.ConceptStep.StepExecutionResult.Skipped = proto.Bool(false) return protoConceptItem }