Esempio n. 1
0
        public ReportElements.StepDefinitionReport GenerateReport()
        {
            report = new ReportElements.StepDefinitionReport();
            report.ProjectName = specFlowProject.ProjectSettings.ProjectName;
            report.GeneratedAt = DateTime.Now.ToString("g", CultureInfo.InvariantCulture);
            report.ShowBindingsWithoutInsance = ReportParameters.ShowBindingsWithoutInsance;

            stepDefByBinding = new Dictionary<BindingInfo, StepDefinition>();
            bindingByStepDef = new Dictionary<StepDefinition, BindingInfo>();

            foreach (var bindingInfo in bindings)
            {
                var stepDefinition = new StepDefinition();
                stepDefinition.Binding = new Binding { MethodReference = bindingInfo.MethodReference };
                stepDefinition.Type = bindingInfo.BindingType;

                stepDefByBinding.Add(bindingInfo, stepDefinition);
                bindingByStepDef.Add(stepDefinition, bindingInfo);
                report.StepDefinitions.Add(stepDefinition);
            }

            foreach (var feature in parsedFeatures)
            {
                var featureRef = new FeatureRef { FilePath = feature.SourceFile, Name = feature.Title };
                if (feature.Background != null)
                {
                    var scenarioRef = new ScenarioRef { Name = "Background" };
                    AddStepInstances(featureRef, scenarioRef, feature.Background.Steps, false);
                }

                foreach (var scenario in feature.Scenarios)
                {
                    var scenarioRef = new ScenarioRef { Name = scenario.Title, SourceFileLine = scenario.FilePosition == null ? -1 : scenario.FilePosition.Line };
                    if (scenario is ScenarioOutline)
                    {
                        ScenarioSteps firstExampleSteps = CreateFirstExampleScenarioSteps((ScenarioOutline) scenario);
                        AddStepInstances(featureRef, scenarioRef, firstExampleSteps, true);
                    }
                    else
                    {
                        AddStepInstances(featureRef, scenarioRef, scenario.Steps, false);
                    }
                }
            }

            foreach (var stepDefinition in report.StepDefinitions)
            {
                if (stepDefinition.ScenarioStep == null)
                {
                    CreateSampleStep(stepDefinition);
                }

                if (stepDefinition.Instances.Count == 0)
                {
                    stepDefinition.Instances = null;
                }
            }

            return report;
        }
Esempio n. 2
0
        public ReportElements.StepDefinitionReport GenerateReport()
        {
            report             = new ReportElements.StepDefinitionReport();
            report.ProjectName = specFlowProject.ProjectSettings.ProjectName;
            report.GeneratedAt = DateTime.Now.ToString("g", CultureInfo.InvariantCulture);
            report.ShowBindingsWithoutInsance = ReportParameters.ShowBindingsWithoutInsance;

            stepDefByBinding = new Dictionary <BindingInfo, StepDefinition>();
            bindingByStepDef = new Dictionary <StepDefinition, BindingInfo>();

            foreach (var bindingInfo in bindings)
            {
                var stepDefinition = new StepDefinition();
                stepDefinition.Binding = new Binding {
                    MethodReference = bindingInfo.MethodReference
                };
                stepDefinition.Type = bindingInfo.BindingType;

                stepDefByBinding.Add(bindingInfo, stepDefinition);
                bindingByStepDef.Add(stepDefinition, bindingInfo);
                report.StepDefinitions.Add(stepDefinition);
            }

            foreach (var specflowDocument in parsedSpecFlowDocuments)
            {
                var feature    = specflowDocument.SpecFlowFeature;
                var featureRef = new FeatureRef {
                    FilePath = specflowDocument.SourceFilePath, Name = feature.Name
                };
                if (feature.Background != null)
                {
                    var scenarioRef = new ScenarioRef {
                        Name = "Background"
                    };
                    AddStepInstances(featureRef, scenarioRef, feature.Background.Steps, false);
                }

                foreach (var scenario in feature.ScenarioDefinitions)
                {
                    var scenarioRef = new ScenarioRef {
                        Name = scenario.Name, SourceFileLine = scenario.Location == null ? -1 : scenario.Location.Line
                    };
                    if (scenario is ScenarioOutline)
                    {
                        var firstExampleSteps = CreateFirstExampleScenarioSteps((ScenarioOutline)scenario);
                        AddStepInstances(featureRef, scenarioRef, firstExampleSteps, true);
                    }
                    else
                    {
                        AddStepInstances(featureRef, scenarioRef, scenario.Steps, false);
                    }
                }
            }

            foreach (var stepDefinition in report.StepDefinitions)
            {
                if (stepDefinition.ScenarioStep == null)
                {
                    CreateSampleStep(stepDefinition);
                }

                if (stepDefinition.Instances.Count == 0)
                {
                    stepDefinition.Instances = null;
                }

                //if(stepDefinition.ScenarioStep.ScenarioBlock == 0)
                //{
                //    stepDefinition.ScenarioStep.ScenarioBlock = (Parser.ScenarioBlock)Enum.Parse(typeof (Parser.ScenarioBlock), stepDefinition.Type);
                //}

                //if(stepDefinition.ScenarioStep.StepKeyword == 0)
                //{
                //    stepDefinition.ScenarioStep.StepKeyword = (StepKeyword)Enum.Parse(typeof(StepKeyword), stepDefinition.Type);
                //}
            }

            return(report);
        }
Esempio n. 3
0
        private void AddStepInstances(FeatureRef featureRef, ScenarioRef scenarioRef, IEnumerable <Step> scenarioSteps, bool fromScenarioOutline)
        {
            var specFlowSteps = scenarioSteps.Cast <SpecFlowStep>();

            foreach (var scenarioStep in specFlowSteps)
            {
                string currentBlock = scenarioStep.ScenarioBlock.ToString();

                bool found = false;

                foreach (var bindingInfo in bindings)
                {
                    if (bindingInfo.BindingType != currentBlock && bindingInfo.BindingType != "StepDefinition")
                    {
                        continue;
                    }

                    var match = bindingInfo.Regex.Match(scenarioStep.Text);
                    if (!match.Success)
                    {
                        continue;
                    }

                    Instance instance = new Instance
                    {
                        FromScenarioOutline = fromScenarioOutline,
                        ScenarioStep        = CloneTo(scenarioStep, scenarioStep.ScenarioBlock.ToString(), scenarioStep.Text),
                        FeatureRef          = featureRef,
                        ScenarioRef         = scenarioRef
                    };
                    var regexArgs = match.Groups.Cast <Group>().Skip(1).Select(g => g.Value).ToArray();
                    if (regexArgs.Length > 0)
                    {
                        instance.Parameters = new List <Parameter>();
                        for (int i = 0; i < Math.Min(regexArgs.Length, bindingInfo.ParameterNames.Length); i++)
                        {
                            instance.Parameters.Add(new Parameter {
                                Name = bindingInfo.ParameterNames[i], Value = regexArgs[i]
                            });
                        }
                    }

                    var stepDefinition = stepDefByBinding[bindingInfo];
                    stepDefinition.Instances.Add(instance);

                    if (stepDefinition.ScenarioStep == null)
                    {
                        var sampleText = GetSampleText(bindingInfo, scenarioStep.Text, match);
                        stepDefinition.ScenarioStep = CloneTo(scenarioStep, currentBlock, sampleText);
                    }

                    found = true;
                    break;
                }

                if (!found)
                {
                    var stepDefinition =
                        stepDefsWithNoBinding.FirstOrDefault(sd => sd.ScenarioStep.Text.Equals(scenarioStep.Text));

                    if (stepDefinition == null)
                    {
                        stepDefinition              = new StepDefinition();
                        stepDefinition.Type         = currentBlock;
                        stepDefinition.ScenarioStep = CloneTo(scenarioStep, currentBlock, scenarioStep.Text);
                        stepDefsWithNoBinding.Add(stepDefinition);
                        report.StepDefinitions.Add(stepDefinition);
                    }

                    Instance instance = new Instance
                    {
                        FromScenarioOutline = fromScenarioOutline,
                        ScenarioStep        = CloneTo(scenarioStep, scenarioStep.ScenarioBlock.ToString(), scenarioStep.Text),
                        FeatureRef          = featureRef,
                        ScenarioRef         = scenarioRef
                    };
                    stepDefinition.Instances.Add(instance);
                }
            }
        }