func (executor *specExecutor) resolveToProtoStepItem(step *parser.Step) *gauge_messages.ProtoItem { protoStepItem := parser.ConvertToProtoItem(step) paramResolver := new(parser.ParamResolver) parameters := paramResolver.GetResolvedParams(step, nil, executor.dataTableLookup()) updateProtoStepParameters(protoStepItem.Step, parameters) return protoStepItem }
func (executor *specExecutor) resolveToProtoItem(item parser.Item) *gauge_messages.ProtoItem { var protoItem *gauge_messages.ProtoItem switch item.Kind() { case parser.StepKind: if (item.(*parser.Step)).IsConcept { concept := item.(*parser.Step) protoItem = executor.resolveToProtoConceptItem(*concept) } else { protoItem = executor.resolveToProtoStepItem(item.(*parser.Step)) } break default: protoItem = parser.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 (executor *specExecutor) resolveToProtoConceptItem(concept parser.Step) *gauge_messages.ProtoItem { paramResolver := new(parser.ParamResolver) parser.PopulateConceptDynamicParams(&concept, executor.dataTableLookup()) protoConceptItem := parser.ConvertToProtoItem(&concept) 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] = executor.resolveToProtoConceptItem(*step) } else { stepParameters := paramResolver.GetResolvedParams(step, &concept, executor.dataTableLookup()) updateProtoStepParameters(protoConceptItem.Concept.Steps[stepIndex].Step, stepParameters) } } return protoConceptItem }