public GenerateStepDefinitionSkeletonForm(string featureTitle, StepInstance[] steps, Project specFlowProject, StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle, ProgrammingLanguage defaultLanguage, DTE dte)
        {
            this.dte = dte;
            InitializeComponent();

            stepsList.BeginUpdate();
            stepsList.Items.Clear();
            foreach (var step in steps)
            {
                stepsList.Items.Add(new ListItem(step), true);
            }
            stepsList.EndUpdate();

            classNameTextBox.Text = string.Format("{0} Steps", featureTitle).ToIdentifier();

            styleComboBox.BeginUpdate();
            var styles = Enum.GetValues(typeof (StepDefinitionSkeletonStyle)).Cast<StepDefinitionSkeletonStyle>()
                .Where(value => value != StepDefinitionSkeletonStyle.MethodNameRegex || defaultLanguage == ProgrammingLanguage.FSharp)
                .ToArray();
            styleComboBox.Items.Clear();
            styleComboBox.Items.AddRange(styles.Select(s => new StyleItem(s)).ToArray<object>());

            int selectedIndex = Array.IndexOf(styles, stepDefinitionSkeletonStyle);
            styleComboBox.SelectedIndex = selectedIndex < 0 ? 0 : selectedIndex;
            styleComboBox.EndUpdate();

            defaultFolder = Path.Combine(VsxHelper.GetProjectFolder(specFlowProject), "StepDefinitions");
            if (!Directory.Exists(defaultFolder))
                defaultFolder = VsxHelper.GetProjectFolder(specFlowProject);
        }
        public string GetBindingClassSkeleton(ProgrammingLanguage language, StepInstance[] stepInstances, string namespaceName, string className, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
        {
            var template = templateProvider.GetStepDefinitionClassTemplate(language);

            var bindings = string.Join(Environment.NewLine, GetOrderedSteps(stepInstances)
                .Select(si => GetStepDefinitionSkeleton(language, si, style, bindingCulture)).Distinct().ToArray()).TrimEnd();
            if (bindings.Length > 0)
                bindings = bindings.Indent(METHOD_INDENT);

            //{namespace}/{className}/{bindings}
            return ApplyTemplate(template, new { @namespace = namespaceName, className, bindings});
        }
            public override string GetStepDefinitionSkeleton(ProgrammingLanguage language, StepInstance stepInstance, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
            {
                if (getSkeleton != null)
                    return getSkeleton(stepInstance);

                if (usageIndex < stepDefinitionSkeletons.Length)
                {
                    return stepDefinitionSkeletons[usageIndex++];
                }

                return stepDefinitionSkeletons[stepDefinitionSkeletons.Length - 1];
            }
 public virtual string GetStepDefinitionSkeleton(ProgrammingLanguage language, StepInstance stepInstance, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
 {
     var withRegex = style == StepDefinitionSkeletonStyle.RegexAttribute;
     var template = templateProvider.GetStepDefinitionTemplate(language, withRegex);
     var analyzedStepText = Analyze(stepInstance, bindingCulture);
     //{attribute}/{regex}/{methodName}/{parameters}
     return ApplyTemplate(template, new
                                        {
                                            attribute = stepInstance.StepDefinitionType, 
                                            regex = withRegex ? GetRegex(analyzedStepText) : "", 
                                            methodName = GetMethodName(stepInstance, analyzedStepText, style, language), 
                                            parameters = string.Join(", ", analyzedStepText.Parameters.Select(p => ToDeclaration(language, p)).ToArray())
                                        });
 }
 private string GetMethodName(StepInstance stepInstance, AnalyzedStepText analyzedStepText, StepDefinitionSkeletonStyle style, ProgrammingLanguage language)
 {
     var keyword = LanguageHelper.GetDefaultKeyword(stepInstance.StepContext.Language, stepInstance.StepDefinitionType);
     switch (style)
     {
         case StepDefinitionSkeletonStyle.RegexAttribute:
             return keyword.ToIdentifier() + string.Concat(analyzedStepText.TextParts.ToArray()).ToIdentifier();
         case StepDefinitionSkeletonStyle.MethodNameUnderscores:
             return GetMatchingMethodName(keyword, analyzedStepText, stepInstance.StepContext.Language, AppendWordsUnderscored, "_{0}");
         case StepDefinitionSkeletonStyle.MethodNamePascalCase:
             return GetMatchingMethodName(keyword, analyzedStepText, stepInstance.StepContext.Language, AppendWordsPascalCase, "_{0}_");
         case StepDefinitionSkeletonStyle.MethodNameRegex:
             if (language != ProgrammingLanguage.FSharp)
                 goto case StepDefinitionSkeletonStyle.MethodNameUnderscores;
             return "``" + GetRegex(analyzedStepText) + "``";
         default:
             throw new NotSupportedException();
     }
 }
 public SpecFlowConfiguration(ConfigSource configSource,
                              ContainerRegistrationCollection customDependencies,
                              ContainerRegistrationCollection generatorCustomDependencies,
                              CultureInfo featureLanguage,
                              CultureInfo bindingCulture,
                              string unitTestProvider,
                              bool stopAtFirstError,
                              MissingOrPendingStepsOutcome missingOrPendingStepsOutcome,
                              bool traceSuccessfulSteps,
                              bool traceTimings,
                              TimeSpan minTracedDuration,
                              StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle,
                              List <string> additionalStepAssemblies,
                              List <PluginDescriptor> pluginDescriptors,
                              bool allowDebugGeneratedFiles,
                              bool allowRowTests,
                              bool markFeaturesParallelizable,
                              string[] skipParallelizableMarkerForTags)
 {
     ConfigSource                 = configSource;
     CustomDependencies           = customDependencies;
     GeneratorCustomDependencies  = generatorCustomDependencies;
     FeatureLanguage              = featureLanguage;
     BindingCulture               = bindingCulture;
     UnitTestProvider             = unitTestProvider;
     StopAtFirstError             = stopAtFirstError;
     MissingOrPendingStepsOutcome = missingOrPendingStepsOutcome;
     TraceSuccessfulSteps         = traceSuccessfulSteps;
     TraceTimings                 = traceTimings;
     MinTracedDuration            = minTracedDuration;
     StepDefinitionSkeletonStyle  = stepDefinitionSkeletonStyle;
     AdditionalStepAssemblies     = additionalStepAssemblies;
     Plugins = pluginDescriptors;
     AllowDebugGeneratedFiles        = allowDebugGeneratedFiles;
     AllowRowTests                   = allowRowTests;
     MarkFeaturesParallelizable      = markFeaturesParallelizable;
     SkipParallelizableMarkerForTags = skipParallelizableMarkerForTags;
 }
示例#7
0
 public SpecFlowConfiguration(ConfigSource configSource,
                              ContainerRegistrationCollection customDependencies,
                              ContainerRegistrationCollection generatorCustomDependencies,
                              CultureInfo featureLanguage,
                              CultureInfo bindingCulture,
                              bool stopAtFirstError,
                              MissingOrPendingStepsOutcome missingOrPendingStepsOutcome,
                              bool traceSuccessfulSteps,
                              bool traceTimings,
                              TimeSpan minTracedDuration,
                              StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle,
                              List <string> additionalStepAssemblies,
                              bool allowDebugGeneratedFiles,
                              bool allowRowTests,
                              string[] addNonParallelizableMarkerForTags,
                              ObsoleteBehavior obsoleteBehavior,
                              CucumberMessagesConfiguration cucumberMessagesConfiguration)
 {
     CucumberMessagesConfiguration = cucumberMessagesConfiguration;
     ConfigSource                      = configSource;
     CustomDependencies                = customDependencies;
     GeneratorCustomDependencies       = generatorCustomDependencies;
     FeatureLanguage                   = featureLanguage;
     BindingCulture                    = bindingCulture;
     StopAtFirstError                  = stopAtFirstError;
     MissingOrPendingStepsOutcome      = missingOrPendingStepsOutcome;
     TraceSuccessfulSteps              = traceSuccessfulSteps;
     TraceTimings                      = traceTimings;
     MinTracedDuration                 = minTracedDuration;
     StepDefinitionSkeletonStyle       = stepDefinitionSkeletonStyle;
     AdditionalStepAssemblies          = additionalStepAssemblies;
     AllowDebugGeneratedFiles          = allowDebugGeneratedFiles;
     AllowRowTests                     = allowRowTests;
     AddNonParallelizableMarkerForTags = addNonParallelizableMarkerForTags;
     ObsoleteBehavior                  = obsoleteBehavior;
 }
示例#8
0
        public string GetBindingClassSkeleton(ProgrammingLanguage language, StepInstance[] stepInstances, string namespaceName, string className, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
        {
            var template = templateProvider.GetStepDefinitionClassTemplate(language);

            var bindings = string.Join(Environment.NewLine, GetOrderedSteps(stepInstances)
                                       .Select(si => GetStepDefinitionSkeleton(language, si, style, bindingCulture)).Distinct().ToArray()).TrimEnd();

            if (bindings.Length > 0)
            {
                bindings = bindings.Indent(METHOD_INDENT);
            }

            //{namespace}/{className}/{bindings}
            return(ApplyTemplate(template, new { @namespace = namespaceName, className, bindings }));
        }
 protected bool Equals(RuntimeConfiguration other)
 {
     return(Equals(FeatureLanguage, other.FeatureLanguage) && Equals(ToolLanguage, other.ToolLanguage) && Equals(BindingCulture, other.BindingCulture) && string.Equals(RuntimeUnitTestProvider, other.RuntimeUnitTestProvider) && DetectAmbiguousMatches.Equals(other.DetectAmbiguousMatches) && StopAtFirstError.Equals(other.StopAtFirstError) && MissingOrPendingStepsOutcome.Equals(other.MissingOrPendingStepsOutcome) && TraceSuccessfulSteps.Equals(other.TraceSuccessfulSteps) && TraceTimings.Equals(other.TraceTimings) && MinTracedDuration.Equals(other.MinTracedDuration) && StepDefinitionSkeletonStyle.Equals(other.StepDefinitionSkeletonStyle) &&
            (AdditionalStepAssemblies ?? new List <string>()).SequenceEqual(other.AdditionalStepAssemblies ?? new List <string>()));
 }
 public StyleItem(StepDefinitionSkeletonStyle style)
 {
     Style = style;
 }
示例#11
0
        public GenerateStepDefinitionSkeletonForm(string featureTitle, StepInstance[] steps, Project specFlowProject, StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle, ProgrammingLanguage defaultLanguage, DTE dte)
        {
            this.dte = dte;
            InitializeComponent();

            stepsList.BeginUpdate();
            stepsList.Items.Clear();
            foreach (var step in steps)
            {
                stepsList.Items.Add(new ListItem(step), true);
            }
            stepsList.EndUpdate();

            classNameTextBox.Text = string.Format("{0} Steps", featureTitle).ToIdentifier();

            styleComboBox.BeginUpdate();
            var styles = Enum.GetValues(typeof(StepDefinitionSkeletonStyle)).Cast <StepDefinitionSkeletonStyle>()
                         .Where(value => value != StepDefinitionSkeletonStyle.MethodNameRegex || defaultLanguage == ProgrammingLanguage.FSharp)
                         .ToArray();

            styleComboBox.Items.Clear();
            styleComboBox.Items.AddRange(styles.Select(s => new StyleItem(s)).ToArray <object>());

            int selectedIndex = Array.IndexOf(styles, stepDefinitionSkeletonStyle);

            styleComboBox.SelectedIndex = selectedIndex < 0 ? 0 : selectedIndex;
            styleComboBox.EndUpdate();

            defaultFolder = Path.Combine(VsxHelper.GetProjectFolder(specFlowProject), "StepDefinitions");
            if (!Directory.Exists(defaultFolder))
            {
                var currentFeatureFilePath = dte.ActiveDocument.FullName;
                defaultFolder = Path.GetDirectoryName(currentFeatureFilePath);
            }
        }
        public SpecFlowConfiguration LoadJson(SpecFlowConfiguration specFlowConfiguration, string jsonContent)
        {
            if (String.IsNullOrWhiteSpace(jsonContent))
            {
                throw new ArgumentNullException(nameof(jsonContent));
            }

            var jsonConfig = JsonSerializer.Deserialize <JsonConfig>(jsonContent);

            ContainerRegistrationCollection containerRegistrationCollection          = specFlowConfiguration.CustomDependencies;
            ContainerRegistrationCollection generatorContainerRegistrationCollection = specFlowConfiguration.GeneratorCustomDependencies;
            CultureInfo featureLanguage  = specFlowConfiguration.FeatureLanguage;
            CultureInfo bindingCulture   = specFlowConfiguration.BindingCulture;
            bool        stopAtFirstError = specFlowConfiguration.StopAtFirstError;
            MissingOrPendingStepsOutcome missingOrPendingStepsOutcome = specFlowConfiguration.MissingOrPendingStepsOutcome;
            bool     traceSuccessfulSteps = specFlowConfiguration.TraceSuccessfulSteps;
            bool     traceTimings         = specFlowConfiguration.TraceTimings;
            TimeSpan minTracedDuration    = specFlowConfiguration.MinTracedDuration;
            StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle = specFlowConfiguration.StepDefinitionSkeletonStyle;
            List <string> additionalStepAssemblies   = specFlowConfiguration.AdditionalStepAssemblies;
            bool          allowRowTests              = specFlowConfiguration.AllowRowTests;
            bool          allowDebugGeneratedFiles   = specFlowConfiguration.AllowDebugGeneratedFiles;
            bool          markFeaturesParallelizable = specFlowConfiguration.MarkFeaturesParallelizable;

            string[]         skipParallelizableMarkerForTags = specFlowConfiguration.SkipParallelizableMarkerForTags;
            ObsoleteBehavior obsoleteBehavior = specFlowConfiguration.ObsoleteBehavior;

            if (jsonConfig.Language != null)
            {
                if (jsonConfig.Language.Feature.IsNotNullOrWhiteSpace())
                {
                    featureLanguage = CultureInfo.GetCultureInfo(jsonConfig.Language.Feature);
                }
            }

            if (jsonConfig.BindingCulture != null)
            {
                if (jsonConfig.BindingCulture.Name.IsNotNullOrWhiteSpace())
                {
                    bindingCulture = CultureInfo.GetCultureInfo(jsonConfig.BindingCulture.Name);
                }
            }

            if (jsonConfig.Runtime != null)
            {
                missingOrPendingStepsOutcome = jsonConfig.Runtime.MissingOrPendingStepsOutcome;
                stopAtFirstError             = jsonConfig.Runtime.StopAtFirstError;
                obsoleteBehavior             = jsonConfig.Runtime.ObsoleteBehavior;

                if (jsonConfig.Runtime.Dependencies != null)
                {
                    foreach (var runtimeDependency in jsonConfig.Runtime.Dependencies)
                    {
                        containerRegistrationCollection.Add(runtimeDependency.ImplementationType, runtimeDependency.InterfaceType);
                    }
                }
            }

            if (jsonConfig.Generator != null)
            {
                allowDebugGeneratedFiles        = jsonConfig.Generator.AllowDebugGeneratedFiles;
                allowRowTests                   = jsonConfig.Generator.AllowRowTests;
                markFeaturesParallelizable      = jsonConfig.Generator.MarkFeaturesParallelizable;
                skipParallelizableMarkerForTags = jsonConfig.Generator.SkipParallelizableMarkerForTags?.ToArray();
            }

            if (jsonConfig.Trace != null)
            {
                traceSuccessfulSteps        = jsonConfig.Trace.TraceSuccessfulSteps;
                traceTimings                = jsonConfig.Trace.TraceTimings;
                minTracedDuration           = jsonConfig.Trace.MinTracedDuration;
                stepDefinitionSkeletonStyle = jsonConfig.Trace.StepDefinitionSkeletonStyle;
            }

            if (jsonConfig.StepAssemblies != null)
            {
                foreach (var stepAssemblyEntry in jsonConfig.StepAssemblies)
                {
                    additionalStepAssemblies.Add(stepAssemblyEntry.Assembly);
                }
            }

            return(new SpecFlowConfiguration(ConfigSource.Json,
                                             containerRegistrationCollection,
                                             generatorContainerRegistrationCollection,
                                             featureLanguage,
                                             bindingCulture,
                                             stopAtFirstError,
                                             missingOrPendingStepsOutcome,
                                             traceSuccessfulSteps,
                                             traceTimings,
                                             minTracedDuration,
                                             stepDefinitionSkeletonStyle,
                                             additionalStepAssemblies,
                                             allowDebugGeneratedFiles,
                                             allowRowTests,
                                             markFeaturesParallelizable,
                                             skipParallelizableMarkerForTags,
                                             obsoleteBehavior));
        }
示例#13
0
 public StyleItem(StepDefinitionSkeletonStyle style)
 {
     Style = style;
 }
示例#14
0
        private string GetMethodName(StepInstance stepInstance, AnalyzedStepText analyzedStepText, StepDefinitionSkeletonStyle style, ProgrammingLanguage language)
        {
            var keyword = LanguageHelper.GetDefaultKeyword(stepInstance.StepContext.Language, stepInstance.StepDefinitionType);

            switch (style)
            {
            case StepDefinitionSkeletonStyle.RegexAttribute:
                return(keyword.ToIdentifier() + string.Concat(analyzedStepText.TextParts.ToArray()).ToIdentifier());

            case StepDefinitionSkeletonStyle.MethodNameUnderscores:
                return(GetMatchingMethodName(keyword, analyzedStepText, stepInstance.StepContext.Language, AppendWordsUnderscored, "_{0}"));

            case StepDefinitionSkeletonStyle.MethodNamePascalCase:
                return(GetMatchingMethodName(keyword, analyzedStepText, stepInstance.StepContext.Language, AppendWordsPascalCase, "_{0}_"));

            case StepDefinitionSkeletonStyle.MethodNameRegex:
                if (language != ProgrammingLanguage.FSharp)
                {
                    goto case StepDefinitionSkeletonStyle.MethodNameUnderscores;
                }
                return("``" + GetRegex(analyzedStepText) + "``");

            default:
                throw new NotSupportedException();
            }
        }
        public Configuration.SpecFlowConfiguration LoadAppConfig(Configuration.SpecFlowConfiguration specFlowConfiguration, ConfigurationSectionHandler configSection)
        {
            if (configSection == null)
            {
                throw new ArgumentNullException(nameof(configSection));
            }


            ContainerRegistrationCollection runtimeContainerRegistrationCollection   = specFlowConfiguration.CustomDependencies;
            ContainerRegistrationCollection generatorContainerRegistrationCollection = specFlowConfiguration.GeneratorCustomDependencies;
            CultureInfo featureLanguage  = specFlowConfiguration.FeatureLanguage;
            CultureInfo bindingCulture   = specFlowConfiguration.BindingCulture;
            bool        stopAtFirstError = specFlowConfiguration.StopAtFirstError;
            MissingOrPendingStepsOutcome missingOrPendingStepsOutcome = specFlowConfiguration.MissingOrPendingStepsOutcome;
            bool     traceSuccessfulSteps = specFlowConfiguration.TraceSuccessfulSteps;
            bool     traceTimings         = specFlowConfiguration.TraceTimings;
            TimeSpan minTracedDuration    = specFlowConfiguration.MinTracedDuration;
            StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle = specFlowConfiguration.StepDefinitionSkeletonStyle;
            List <string>    additionalStepAssemblies = specFlowConfiguration.AdditionalStepAssemblies;
            ObsoleteBehavior obsoleteBehavior         = specFlowConfiguration.ObsoleteBehavior;

            bool allowRowTests            = specFlowConfiguration.AllowRowTests;
            bool allowDebugGeneratedFiles = specFlowConfiguration.AllowDebugGeneratedFiles;

            bool markFeaturesParallelizable = specFlowConfiguration.MarkFeaturesParallelizable;

            string[] skipParallelizableMarkerForTags = specFlowConfiguration.SkipParallelizableMarkerForTags;
            CucumberMessagesConfiguration cucumberMessagesConfiguration = specFlowConfiguration.CucumberMessagesConfiguration;


            if (IsSpecified(configSection.Language))
            {
                featureLanguage = CultureInfo.GetCultureInfo(configSection.Language.Feature);
            }

            if (IsSpecified(configSection.BindingCulture))
            {
                bindingCulture = CultureInfo.GetCultureInfo(configSection.BindingCulture.Name);
            }

            if (IsSpecified(configSection.Runtime))
            {
                stopAtFirstError             = configSection.Runtime.StopAtFirstError;
                missingOrPendingStepsOutcome = configSection.Runtime.MissingOrPendingStepsOutcome;
                obsoleteBehavior             = configSection.Runtime.ObsoleteBehavior;

                if (IsSpecified(configSection.Runtime.Dependencies))
                {
                    runtimeContainerRegistrationCollection = configSection.Runtime.Dependencies;
                }
            }

            if (IsSpecified((configSection.Generator)))
            {
                allowDebugGeneratedFiles   = configSection.Generator.AllowDebugGeneratedFiles;
                allowRowTests              = configSection.Generator.AllowRowTests;
                markFeaturesParallelizable = configSection.Generator.MarkFeaturesParallelizable;

                if (IsSpecified(configSection.Generator.SkipParallelizableMarkerForTags))
                {
                    skipParallelizableMarkerForTags = configSection.Generator.SkipParallelizableMarkerForTags.Select(i => i.Value).ToArray();
                }

                if (IsSpecified(configSection.Generator.Dependencies))
                {
                    generatorContainerRegistrationCollection = configSection.Generator.Dependencies;
                }
            }

            if (IsSpecified(configSection.Trace))
            {
                if (!string.IsNullOrEmpty(configSection.Trace.Listener)) // backwards compatibility
                {
                    runtimeContainerRegistrationCollection.Add(configSection.Trace.Listener, typeof(ITraceListener).AssemblyQualifiedName);
                }

                traceSuccessfulSteps        = configSection.Trace.TraceSuccessfulSteps;
                traceTimings                = configSection.Trace.TraceTimings;
                minTracedDuration           = configSection.Trace.MinTracedDuration;
                stepDefinitionSkeletonStyle = configSection.Trace.StepDefinitionSkeletonStyle;
            }

            foreach (var element in configSection.StepAssemblies)
            {
                var assemblyName = ((StepAssemblyConfigElement)element).Assembly;
                additionalStepAssemblies.Add(assemblyName);
            }

            if (IsSpecified(configSection.CucumberMessages))
            {
                cucumberMessagesConfiguration.Enabled = configSection.CucumberMessages.Enabled;

                foreach (CucumberMessageSinkElement cucumberMessagesSink in configSection.CucumberMessages.Sinks)
                {
                    cucumberMessagesConfiguration.Sinks.Add(new CucumberMessagesSink(cucumberMessagesSink.Type, cucumberMessagesSink.Path));
                }
            }

            return(new SpecFlowConfiguration(ConfigSource.AppConfig,
                                             runtimeContainerRegistrationCollection,
                                             generatorContainerRegistrationCollection,
                                             featureLanguage,
                                             bindingCulture,
                                             stopAtFirstError,
                                             missingOrPendingStepsOutcome,
                                             traceSuccessfulSteps,
                                             traceTimings,
                                             minTracedDuration,
                                             stepDefinitionSkeletonStyle,
                                             additionalStepAssemblies,
                                             allowDebugGeneratedFiles,
                                             allowRowTests,
                                             markFeaturesParallelizable,
                                             skipParallelizableMarkerForTags,
                                             obsoleteBehavior,
                                             cucumberMessagesConfiguration
                                             ));
        }
        public SpecFlowConfiguration LoadJson(SpecFlowConfiguration specFlowConfiguration, string jsonContent)
        {
            if (String.IsNullOrWhiteSpace(jsonContent))
            {
                throw new ArgumentNullException(nameof(jsonContent));
            }

            var jsonConfig = JsonConvert.DeserializeObject <JsonConfig>(jsonContent);


            ContainerRegistrationCollection containerRegistrationCollection          = specFlowConfiguration.CustomDependencies;
            ContainerRegistrationCollection generatorContainerRegistrationCollection = specFlowConfiguration.GeneratorCustomDependencies;
            CultureInfo featureLanguage  = specFlowConfiguration.FeatureLanguage;
            CultureInfo bindingCulture   = specFlowConfiguration.BindingCulture;
            string      unitTestProvider = specFlowConfiguration.UnitTestProvider;
            bool        stopAtFirstError = specFlowConfiguration.StopAtFirstError;
            MissingOrPendingStepsOutcome missingOrPendingStepsOutcome = specFlowConfiguration.MissingOrPendingStepsOutcome;
            bool     traceSuccessfulSteps = specFlowConfiguration.TraceSuccessfulSteps;
            bool     traceTimings         = specFlowConfiguration.TraceTimings;
            TimeSpan minTracedDuration    = specFlowConfiguration.MinTracedDuration;
            StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle = specFlowConfiguration.StepDefinitionSkeletonStyle;
            List <string>           additionalStepAssemblies        = specFlowConfiguration.AdditionalStepAssemblies;
            List <PluginDescriptor> pluginDescriptors = specFlowConfiguration.Plugins;
            bool allowRowTests              = specFlowConfiguration.AllowRowTests;
            bool allowDebugGeneratedFiles   = specFlowConfiguration.AllowDebugGeneratedFiles;
            bool markFeaturesParallelizable = specFlowConfiguration.MarkFeaturesParallelizable;

            string[] skipParallelizableMarkerForTags = specFlowConfiguration.SkipParallelizableMarkerForTags;

            var specFlowElement = jsonConfig.SpecFlow;

            if (specFlowElement.Language != null)
            {
                if (specFlowElement.Language.Feature.IsNotNullOrWhiteSpace())
                {
                    featureLanguage = CultureInfo.GetCultureInfo(specFlowElement.Language.Feature);
                }
            }

            if (specFlowElement.BindingCulture != null)
            {
                if (specFlowElement.BindingCulture.Name.IsNotNullOrWhiteSpace())
                {
                    bindingCulture = CultureInfo.GetCultureInfo(specFlowElement.BindingCulture.Name);
                }
            }

            if (specFlowElement.UnitTestProvider != null)
            {
                if (specFlowElement.UnitTestProvider.Name.IsNotNullOrWhiteSpace())
                {
                    unitTestProvider = specFlowElement.UnitTestProvider.Name;
                }
            }

            if (specFlowElement.Runtime != null)
            {
                missingOrPendingStepsOutcome = specFlowElement.Runtime.MissingOrPendingStepsOutcome;
                stopAtFirstError             = specFlowElement.Runtime.StopAtFirstError;
            }

            if (specFlowElement.Generator != null)
            {
                allowDebugGeneratedFiles        = specFlowElement.Generator.AllowDebugGeneratedFiles;
                allowRowTests                   = specFlowElement.Generator.AllowRowTests;
                markFeaturesParallelizable      = specFlowElement.Generator.MarkFeaturesParallelizable;
                skipParallelizableMarkerForTags = specFlowElement.Generator.SkipParallelizableMarkerForTags.ToArray();
            }

            if (specFlowElement.Trace != null)
            {
                traceSuccessfulSteps        = specFlowElement.Trace.TraceSuccessfulSteps;
                traceTimings                = specFlowElement.Trace.TraceTimings;
                minTracedDuration           = specFlowElement.Trace.MinTracedDuration;
                stepDefinitionSkeletonStyle = specFlowElement.Trace.StepDefinitionSkeletonStyle;
            }

            if (specFlowElement.StepAssemblies != null)
            {
                foreach (var stepAssemblyEntry in specFlowElement.StepAssemblies)
                {
                    additionalStepAssemblies.Add(stepAssemblyEntry.Assembly);
                }
            }

            if (specFlowElement.Plugins != null)
            {
                foreach (var pluginEntry in specFlowElement.Plugins)
                {
                    pluginDescriptors.Add(new PluginDescriptor(pluginEntry.Name, pluginEntry.Path, pluginEntry.Type, pluginEntry.Parameters));
                }
            }


            return(new SpecFlowConfiguration(ConfigSource.Json,
                                             containerRegistrationCollection,
                                             generatorContainerRegistrationCollection,
                                             featureLanguage,
                                             bindingCulture,
                                             unitTestProvider,
                                             stopAtFirstError,
                                             missingOrPendingStepsOutcome,
                                             traceSuccessfulSteps,
                                             traceTimings,
                                             minTracedDuration,
                                             stepDefinitionSkeletonStyle,
                                             additionalStepAssemblies,
                                             pluginDescriptors,
                                             allowDebugGeneratedFiles,
                                             allowRowTests,
                                             markFeaturesParallelizable,
                                             skipParallelizableMarkerForTags));
        }
示例#17
0
        public Configuration.SpecFlowConfiguration LoadAppConfig(Configuration.SpecFlowConfiguration specFlowConfiguration, ConfigurationSectionHandler configSection)
        {
            if (configSection == null)
            {
                throw new ArgumentNullException(nameof(configSection));
            }

            ContainerRegistrationCollection runtimeContainerRegistrationCollection   = specFlowConfiguration.CustomDependencies;
            ContainerRegistrationCollection generatorContainerRegistrationCollection = specFlowConfiguration.GeneratorCustomDependencies;
            CultureInfo featureLanguage         = specFlowConfiguration.FeatureLanguage;
            CultureInfo bindingCulture          = specFlowConfiguration.BindingCulture;
            string      runtimeUnitTestProvider = specFlowConfiguration.UnitTestProvider;
            bool        stopAtFirstError        = specFlowConfiguration.StopAtFirstError;
            MissingOrPendingStepsOutcome missingOrPendingStepsOutcome = specFlowConfiguration.MissingOrPendingStepsOutcome;
            bool     traceSuccessfulSteps = specFlowConfiguration.TraceSuccessfulSteps;
            bool     traceTimings         = specFlowConfiguration.TraceTimings;
            TimeSpan minTracedDuration    = specFlowConfiguration.MinTracedDuration;
            StepDefinitionSkeletonStyle stepDefinitionSkeletonStyle = specFlowConfiguration.StepDefinitionSkeletonStyle;
            List <string>           additionalStepAssemblies        = specFlowConfiguration.AdditionalStepAssemblies;
            List <PluginDescriptor> pluginDescriptors = specFlowConfiguration.Plugins;

            bool allowRowTests            = specFlowConfiguration.AllowRowTests;
            bool allowDebugGeneratedFiles = specFlowConfiguration.AllowDebugGeneratedFiles;

            bool markFeaturesParallelizable = specFlowConfiguration.MarkFeaturesParallelizable;

            string[] skipParallelizableMarkerForTags = specFlowConfiguration.SkipParallelizableMarkerForTags;


            if (IsSpecified(configSection.Language))
            {
                featureLanguage = CultureInfo.GetCultureInfo(configSection.Language.Feature);
            }

            if (IsSpecified(configSection.BindingCulture))
            {
                bindingCulture = CultureInfo.GetCultureInfo(configSection.BindingCulture.Name);
            }

            if (IsSpecified(configSection.Runtime))
            {
                stopAtFirstError             = configSection.Runtime.StopAtFirstError;
                missingOrPendingStepsOutcome = configSection.Runtime.MissingOrPendingStepsOutcome;

                if (IsSpecified(configSection.Runtime.Dependencies))
                {
                    runtimeContainerRegistrationCollection = configSection.Runtime.Dependencies;
                }
            }

            if (IsSpecified((configSection.Generator)))
            {
                allowDebugGeneratedFiles   = configSection.Generator.AllowDebugGeneratedFiles;
                allowRowTests              = configSection.Generator.AllowRowTests;
                markFeaturesParallelizable = configSection.Generator.MarkFeaturesParallelizable;

                if (IsSpecified(configSection.Generator.SkipParallelizableMarkerForTags))
                {
                    skipParallelizableMarkerForTags = configSection.Generator.SkipParallelizableMarkerForTags.Select(i => i.Value).ToArray();
                }

                if (IsSpecified(configSection.Generator.Dependencies))
                {
                    generatorContainerRegistrationCollection = configSection.Generator.Dependencies;
                }
            }

            if (IsSpecified(configSection.UnitTestProvider))
            {
                if (!string.IsNullOrEmpty(configSection.UnitTestProvider.RuntimeProvider))
                {
                    //compatibility mode, we simulate a custom dependency
                    runtimeUnitTestProvider = "custom";
                    runtimeContainerRegistrationCollection.Add(configSection.UnitTestProvider.RuntimeProvider, typeof(IUnitTestRuntimeProvider).AssemblyQualifiedName, runtimeUnitTestProvider);
                }
                else
                {
                    runtimeUnitTestProvider = configSection.UnitTestProvider.Name;
                }
            }


            if (IsSpecified(configSection.Trace))
            {
                if (!string.IsNullOrEmpty(configSection.Trace.Listener)) // backwards compatibility
                {
                    runtimeContainerRegistrationCollection.Add(configSection.Trace.Listener, typeof(ITraceListener).AssemblyQualifiedName);
                }

                traceSuccessfulSteps        = configSection.Trace.TraceSuccessfulSteps;
                traceTimings                = configSection.Trace.TraceTimings;
                minTracedDuration           = configSection.Trace.MinTracedDuration;
                stepDefinitionSkeletonStyle = configSection.Trace.StepDefinitionSkeletonStyle;
            }

            foreach (var element in configSection.StepAssemblies)
            {
                var assemblyName = ((StepAssemblyConfigElement)element).Assembly;
                additionalStepAssemblies.Add(assemblyName);
            }

            var pluginNames = pluginDescriptors.Select(m => m.Name).ToList();

            foreach (PluginConfigElement plugin in configSection.Plugins)
            {
                var pluginDescriptor = plugin.ToPluginDescriptor();
                if (pluginNames.Contains(pluginDescriptor.Name))
                {
                    continue;
                }
                pluginDescriptors.Add(pluginDescriptor);
                pluginNames.Add(plugin.Name);
            }

            return(new SpecFlowConfiguration(ConfigSource.AppConfig,
                                             runtimeContainerRegistrationCollection,
                                             generatorContainerRegistrationCollection,
                                             featureLanguage,
                                             bindingCulture,
                                             runtimeUnitTestProvider,
                                             stopAtFirstError,
                                             missingOrPendingStepsOutcome,
                                             traceSuccessfulSteps,
                                             traceTimings,
                                             minTracedDuration,
                                             stepDefinitionSkeletonStyle,
                                             additionalStepAssemblies,
                                             pluginDescriptors,
                                             allowDebugGeneratedFiles,
                                             allowRowTests,
                                             markFeaturesParallelizable,
                                             skipParallelizableMarkerForTags
                                             ));
        }
            public override string GetStepDefinitionSkeleton(ProgrammingLanguage language, StepInstance stepInstance, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
            {
                if (getSkeleton != null)
                {
                    return(getSkeleton(stepInstance));
                }

                if (usageIndex < stepDefinitionSkeletons.Length)
                {
                    return(stepDefinitionSkeletons[usageIndex++]);
                }

                return(stepDefinitionSkeletons[stepDefinitionSkeletons.Length - 1]);
            }
示例#19
0
        public virtual string GetStepDefinitionSkeleton(ProgrammingLanguage language, StepInstance stepInstance, StepDefinitionSkeletonStyle style, CultureInfo bindingCulture)
        {
            var withRegex        = style == StepDefinitionSkeletonStyle.RegexAttribute;
            var template         = templateProvider.GetStepDefinitionTemplate(language, withRegex);
            var analyzedStepText = Analyze(stepInstance, bindingCulture);

            //{attribute}/{regex}/{methodName}/{parameters}
            return(ApplyTemplate(template, new
            {
                attribute = stepInstance.StepDefinitionType,
                regex = withRegex ? GetRegex(analyzedStepText) : "",
                methodName = GetMethodName(stepInstance, analyzedStepText, style, language),
                parameters = string.Join(", ", analyzedStepText.Parameters.Select(p => ToDeclaration(language, p)).ToArray())
            }));
        }