示例#1
0
        public void Check_Plugins_PluginType_Runtime()
        {
            string config = @"<specflow><plugins><add name=""testEntry"" type=""Runtime""/></plugins></specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.Plugins.Count.Should().Be(1);
            runtimeConfig.Plugins.First().Type.Should().Be(PluginType.Runtime);
        }
示例#2
0
        public void Check_StepAssemblies_OneEntry()
        {
            string config = @"<specflow><stepAssemblies><stepAssembly assembly=""testEntry""/></stepAssemblies></specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.AdditionalStepAssemblies.Count.Should().Be(1);
            runtimeConfig.AdditionalStepAssemblies.First().Should().Be("testEntry");
        }
示例#3
0
        public void Check_Plugins_PluginPath()
        {
            string config = @"<specflow><plugins><add name=""testEntry"" path=""path_to_assembly""/></plugins></specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.Plugins.Count.Should().Be(1);
            runtimeConfig.Plugins.First().Path.Should().Be("path_to_assembly");
        }
示例#4
0
        public void CanLoadConfigWithParallelCodeGenerationOptionsFromString(string configString)
        {
            var generatorConfiguration = new GeneratorConfiguration();

            generatorConfiguration.UpdateFromConfigFile(ConfigurationSectionHandler.CreateFromXml(configString));

            Assert.IsTrue(generatorConfiguration.MarkFeaturesParallelizable);
            Assert.IsNotEmpty(generatorConfiguration.SkipParallelizableMarkerForTags);
            Assert.Contains("mySpecialTag1", generatorConfiguration.SkipParallelizableMarkerForTags);
            Assert.Contains("mySpecialTag2", generatorConfiguration.SkipParallelizableMarkerForTags);
        }
示例#5
0
        public void CanLoadConfigFromString(string configString)
        {
            var runtimeConfig = ConfigurationLoader.GetDefault();

            var configurationLoader = new AppConfigConfigurationLoader();


            var configurationSectionHandler = ConfigurationSectionHandler.CreateFromXml(configString);

            configurationLoader.LoadAppConfig(runtimeConfig, configurationSectionHandler);
        }
示例#6
0
        public void Check_CucumberMessages_NotConfigured_EnabledIsFalse()
        {
            string config = @"<specflow>
                            </specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.CucumberMessagesConfiguration.Enabled.Should().BeFalse();
        }
示例#7
0
        public void Check_Plugins_TwoSameNameEntry()
        {
            string config = @"<specflow><plugins>
                                <add name=""testEntry""/>
                                <add name=""testEntry""/>
                              </plugins></specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.Plugins.Count.Should().Be(1);
            runtimeConfig.Plugins[0].Name.Should().Be("testEntry");
        }
示例#8
0
        public void Check_CucumberMessages_Sinks_EmptyList()
        {
            string config = @"<specflow>
                                <cucumber-messages enabled=""false"">
                                    <sinks>
                                    </sinks>
                                </cucumber-messages>
                            </specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.CucumberMessagesConfiguration.Sinks.Should().BeEmpty();
        }
        private ConfigurationSectionHandler GetSection()
        {
            XmlDocument configDocument = new XmlDocument();

            configDocument.LoadXml(configFileContent);

            var specFlowNode = configDocument.SelectSingleNode("/configuration/specFlow");

            if (specFlowNode == null)
            {
                throw new InvalidOperationException("invalid config file content");
            }

            return(ConfigurationSectionHandler.CreateFromXml(specFlowNode));
        }
示例#10
0
        public void Check_Trace_Listener()
        {
            string config = @"<specflow><trace listener=""TraceListener"" /></specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.CustomDependencies.Count.Should().Be(1);

            foreach (ContainerRegistrationConfigElement containerRegistrationConfigElement in runtimeConfig.CustomDependencies)
            {
                containerRegistrationConfigElement.Implementation.Should().Be("TraceListener");
            }
        }
        public void AddFromXmlSpecFlowSection(string specFlowSection)
        {
            ProjectBuilder project       = _solutionDriver.DefaultProject;
            var            configSection = ConfigurationSectionHandler.CreateFromXml(specFlowSection);
            var            appConfigConfigurationLoader = new AppConfigConfigurationLoader();

            var specFlowConfiguration = appConfigConfigurationLoader.LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            foreach (string stepAssemblyName in specFlowConfiguration.AdditionalStepAssemblies)
            {
                _configurationDriver.AddStepAssembly(new StepAssembly(stepAssemblyName));
            }

            _configurationDriver.SetBindingCulture(project, specFlowConfiguration.BindingCulture);
            _configurationDriver.SetFeatureLanguage(project, specFlowConfiguration.FeatureLanguage);
        }
示例#12
0
        public void Check_CucumberMessages_Sinks_ListOneEntry()
        {
            string config = @"<specflow>
                                <cucumber-messages enabled=""false"">
                                    <sinks>
                                        <sink type=""file"" path=""C:\temp\testrun.cm"" />
                                    </sinks>
                                </cucumber-messages>
                            </specflow>";

            var configSection = ConfigurationSectionHandler.CreateFromXml(config);

            var runtimeConfig = new AppConfigConfigurationLoader().LoadAppConfig(ConfigurationLoader.GetDefault(), configSection);

            runtimeConfig.CucumberMessagesConfiguration.Sinks.Count.Should().Be(1);
        }
        public virtual SpecFlowProjectConfiguration LoadConfiguration(SpecFlowConfigurationHolder configurationHolder, IProjectReference projectReference)
        {
            SpecFlowProjectConfiguration configuration = new SpecFlowProjectConfiguration();

            if (configurationHolder != null && configurationHolder.HasConfiguration)
            {
                ConfigurationSectionHandler specFlowConfigSection = ConfigurationSectionHandler.CreateFromXml(configurationHolder.XmlString);
                if (specFlowConfigSection != null)
                {
                    configuration.GeneratorConfiguration.UpdateFromConfigFile(specFlowConfigSection);
                    configuration.RuntimeConfiguration.UpdateFromConfigFile(specFlowConfigSection);
                }
            }
            configuration.GeneratorConfiguration.GeneratorVersion = GetGeneratorVersion(projectReference);
            return(configuration);
        }
        public SpecFlowConfiguration Load(SpecFlowConfiguration specFlowConfiguration, IConfigurationHolder configurationHolder)
        {
            switch (configurationHolder.ConfigSource)
            {
            case ConfigSource.AppConfig:
                return(LoadAppConfig(specFlowConfiguration,
                                     ConfigurationSectionHandler.CreateFromXml(configurationHolder.Content)));

            case ConfigSource.Json:
                return(LoadJson(specFlowConfiguration, configurationHolder.Content));

            case ConfigSource.Default:
                return(GetDefault());

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
示例#15
0
        public void CanLoadConfigWithParallelCodeGenerationOptionsFromString(string configString)
        {
            var specFlowConfiguration = ConfigurationLoader.GetDefault();

            var configurationLoader = new AppConfigConfigurationLoader();


            var configurationSectionHandler = ConfigurationSectionHandler.CreateFromXml(configString);

            specFlowConfiguration = configurationLoader.LoadAppConfig(specFlowConfiguration, configurationSectionHandler);



            Assert.IsTrue(specFlowConfiguration.MarkFeaturesParallelizable);
            Assert.IsNotEmpty(specFlowConfiguration.SkipParallelizableMarkerForTags);
            Assert.Contains("mySpecialTag1", specFlowConfiguration.SkipParallelizableMarkerForTags);
            Assert.Contains("mySpecialTag2", specFlowConfiguration.SkipParallelizableMarkerForTags);
        }
示例#16
0
        /// <summary>
        /// Gets the configuration section.
        /// </summary>
        /// <returns>The located configuration section, otherwise <c>null</c>.</returns>
        private ConfigurationSectionHandler GetConfigurationSection()
        {
            // Reflect content for now
            WriteLine("Project Folder: {0}", this.projectSettings != null ? this.projectSettings.ProjectFolder : "NONE");
            if (this.projectSettings == null || string.IsNullOrEmpty(this.projectSettings.ProjectFolder))
            {
                return(null);
            }

            var directory = new DirectoryInfo(this.projectSettings.ProjectFolder);
            var file      = directory.GetFiles("app.config", SearchOption.TopDirectoryOnly).FirstOrDefault();

            if (file == null)
            {
                WriteLine(@"Cannot find app.config in directory: {0}", directory.FullName);
                return(null);
            }

            WriteLine("Found Configuration File: {0}", file.FullName);

            string content;

            using (var streamReader = file.OpenText())
            {
                content = streamReader.ReadToEnd();
            }

            var configDocument = new XmlDocument();

            configDocument.LoadXml(content);

            var node = configDocument.SelectSingleNode("/configuration/specBind");

            if (node == null)
            {
                WriteLine("Could not locate specBind configuration node");
                return(null);
            }

            var xml = node.OuterXml;

            WriteLine("Creating configuration from XML: {0}", xml);
            return(ConfigurationSectionHandler.CreateFromXml(xml));
        }
示例#17
0
        public void CanLoadConfigWithNonParallelizableTagsProvided()
        {
            var config =
                @"<specFlow>
                    <generator>
                        <addNonParallelizableMarkerForTags>
                            <tag value=""tag1""/>
                            <tag value=""tag2""/>
                        </addNonParallelizableMarkerForTags>
                    </generator>
                </specFlow>";
            var specFlowConfiguration = ConfigurationLoader.GetDefault();
            var configurationLoader   = new AppConfigConfigurationLoader();

            var configurationSectionHandler = ConfigurationSectionHandler.CreateFromXml(config);

            specFlowConfiguration = configurationLoader.LoadAppConfig(specFlowConfiguration, configurationSectionHandler);

            specFlowConfiguration.AddNonParallelizableMarkerForTags.Should().BeEquivalentTo("tag1", "tag2");
        }
示例#18
0
        public IEnumerable <PluginDescriptor> GetPlugins(SpecFlowConfigurationHolder configurationHolder)
        {
            try
            {
                if (configurationHolder != null && configurationHolder.HasConfiguration)
                {
                    ConfigurationSectionHandler section = ConfigurationSectionHandler.CreateFromXml(configurationHolder.XmlString);
                    if (section != null && section.Plugins != null)
                    {
                        return(section.Plugins.Select(pce => pce.ToPluginDescriptor()));
                    }
                }

                return(Enumerable.Empty <PluginDescriptor>());
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException("SpecFlow configuration error", ex);
            }
        }
示例#19
0
 public virtual void LoadConfiguration(SpecFlowConfigurationHolder configurationHolder, SpecFlowProjectConfiguration configuration)
 {
     try
     {
         if (configurationHolder != null && configurationHolder.HasConfiguration)
         {
             ConfigurationSectionHandler specFlowConfigSection =
                 ConfigurationSectionHandler.CreateFromXml(configurationHolder.XmlString);
             if (specFlowConfigSection != null)
             {
                 UpdateGeneratorConfiguration(configuration, specFlowConfigSection);
                 UpdateRuntimeConfiguration(configuration, specFlowConfigSection);
             }
         }
     }
     catch (Exception ex)
     {
         throw new ConfigurationErrorsException("SpecFlow configuration error", ex);
     }
 }
示例#20
0
        public SpecFlowConfiguration Load(SpecFlowConfiguration specFlowConfiguration)
        {
            if (_configFilePath == null)
            {
                return(LoadDefaultConfiguration(specFlowConfiguration));
            }

            var extension         = Path.GetExtension(_configFilePath);
            var configFileContent = File.ReadAllText(_configFilePath);

            switch (extension.ToLowerInvariant())
            {
            case ".config":
            {
                var configDocument = new XmlDocument();
                configDocument.LoadXml(configFileContent);
                var specFlowNode = configDocument.SelectSingleNode("/configuration/specFlow");
                if (specFlowNode == null)
                {
                    return(LoadDefaultConfiguration(specFlowConfiguration));
                }

                var configSection = ConfigurationSectionHandler.CreateFromXml(specFlowNode);
                var loader        = new AppConfigConfigurationLoader();
                return(loader.LoadAppConfig(specFlowConfiguration, configSection));
            }

            case ".json":
            {
                if (_jsonSpecFlow2Mode)
                {
                    configFileContent = ConvertToJsonSpecFlow2Style(configFileContent);
                }

                var loader = new JsonConfigurationLoader();
                return(loader.LoadJson(specFlowConfiguration, configFileContent));
            }
            }
            throw new ConfigurationErrorsException($"Invalid config type: {_configFilePath}");
        }