func checkCircularReferencing(conceptDictionary *gauge.ConceptDictionary, concept *gauge.Step, traversedSteps map[string]string) *ParseError { if traversedSteps == nil { traversedSteps = make(map[string]string, 0) } currentConceptFileName := conceptDictionary.Search(concept.Value).FileName traversedSteps[concept.Value] = currentConceptFileName for _, step := range concept.ConceptSteps { if fileName, exists := traversedSteps[step.Value]; exists { return &ParseError{LineNo: step.LineNo, Message: fmt.Sprintf("%s: The concept \"%s\" references a higher concept > %s: \"%s\"", currentConceptFileName, concept.LineText, fileName, step.LineText), } } if step.IsConcept { if err := checkCircularReferencing(conceptDictionary, step, traversedSteps); err != nil { return err } } } delete(traversedSteps, concept.Value) return nil }
func processConceptStep(spec *gauge.Specification, step *gauge.Step, conceptDictionary *gauge.ConceptDictionary) { if conceptFromDictionary := conceptDictionary.Search(step.Value); conceptFromDictionary != nil { createConceptStep(spec, conceptFromDictionary.ConceptStep, step) } }