public void GenerateScenarioExampleTests()
        {
            var parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
            using (var reader = new StringReader(SampleFeatureFile))
            {
                var feature = parser.Parse(reader, null);                    
                Assert.IsNotNull(feature);

                var sampleTestGeneratorProvider = new SimpleTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));
                var converter = CreateUnitTestConverter(sampleTestGeneratorProvider);
                CodeNamespace code = converter.GenerateUnitTestFixture(feature, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                  
                // make sure name space is changed
                Assert.AreEqual(code.Name, SimpleTestGeneratorProvider.DefaultNameSpace);

                // make sure all method titles are changed correctly
                List<string> methodTitles = new List<string>();
                for (int i = 0; i < code.Types[0].Members.Count; i++)
                {
                    methodTitles.Add(code.Types[0].Members[i].Name);
                }

                foreach (var title in sampleTestGeneratorProvider.newTitles)
                {
                    Assert.IsTrue(methodTitles.Contains(title));
                }
            }
        }
Esempio n. 2
0
        public void Parser_handles_empty_feature_file_without_error()
        {
            var parser = new SpecFlowGherkinParser(CultureInfo.GetCultureInfo("en"));

            Action act = () => parser.Parse(new StringReader(""), null);

            act.ShouldNotThrow();
        }
Esempio n. 3
0
 public static List<SpecFlowDocument> GetParsedFeatures(IEnumerable<string> featureFiles, CultureInfo featureLanguage)
 {
     List<SpecFlowDocument> parsedSpecFlowDocument = new List<SpecFlowDocument>();
     foreach (var featureFile in featureFiles)
     {
         SpecFlowGherkinParser parser = new SpecFlowGherkinParser(featureLanguage);
         using (var reader = new StreamReader(featureFile))
         {
             var specFlowFeature = parser.Parse(reader, featureFile);
             parsedSpecFlowDocument.Add(specFlowFeature);
         }
     }
     return parsedSpecFlowDocument;
 }
Esempio n. 4
0
 public static List<Feature> GetParsedFeatures(IEnumerable<string> featureFiles, CultureInfo featureLanguage)
 {
     List<Feature> parsedFeatures = new List<Feature>();
     foreach (var featureFile in featureFiles)
     {
         SpecFlowGherkinParser parser = new SpecFlowGherkinParser(featureLanguage);
         using (var reader = new StreamReader(featureFile))
         {
             var specFlowFeature = parser.Parse(reader, featureFile);
             var compatibleFeature = CompatibleAstConverter.ConvertToCompatibleFeature(specFlowFeature);
             parsedFeatures.Add(compatibleFeature);
         }
     }
     return parsedFeatures;
 }
Esempio n. 5
0
        public CodeNamespace GenerateCodeNamespaceFromFeature(string feature, bool parallelCode = false, string[] ignoreParallelTags = null)
        {
            CodeNamespace code;

            using (var reader = new StringReader(feature))
            {
                var parser   = new SpecFlowGherkinParser(new CultureInfo("en-US"));
                var document = parser.Parse(reader, "test.feature");

                var featureGenerator = CreateFeatureGenerator(parallelCode, ignoreParallelTags);

                code = featureGenerator.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");
            }

            return(code);
        }
Esempio n. 6
0
        public void Parser_throws_meaningful_exception_when_Examples_are_missing_in_multiple_Scenario_Outlines()
        {
            var feature = @"Feature: Missing
                            Scenario Outline: No Examples
                            Scenario Outline: Still no Examples";

            var parser = new SpecFlowGherkinParser(CultureInfo.GetCultureInfo("en"));

            Action act = () => parser.Parse(new StringReader(feature), null);

            var expectedErrors = new List <SemanticParserException> {
                new SemanticParserException("Scenario Outline 'No Examples' has no examples defined", new Location(2, 29)),
                new SemanticParserException("Scenario Outline 'Still no Examples' has no examples defined", new Location(3, 29))
            };

            act.Should().Throw <CompositeParserException>().And.Errors.Should().BeEquivalentTo(expectedErrors);
        }
Esempio n. 7
0
        public void Parser_throws_meaningful_exception_when_Examples_have_header_but_are_empty_in_Scenario_Outline()
        {
            var feature = @"Feature: Missing
                            Scenario Outline: No Examples
                            Given something
                            
                            Examples:
                            | Column |
                            ";

            var parser = new SpecFlowGherkinParser(CultureInfo.GetCultureInfo("en"));

            Action act = () => parser.Parse(new StringReader(feature), null);

            act.Should().Throw <SemanticParserException>().WithMessage("(2:29): Scenario Outline 'No Examples' has no examples defined")
            .And.Location.Line.Should().Be(2);
        }
Esempio n. 8
0
        private CodeNamespace GenerateTestFileCode(FeatureFileInput featureFileInput)
        {
            string targetNamespace = GetTargetNamespace(featureFileInput) ?? "SpecFlow.GeneratedTests";

            var parser = new SpecFlowGherkinParser(specFlowConfiguration.FeatureLanguage);
            SpecFlowDocument specFlowDocument;

            using (var contentReader = featureFileInput.GetFeatureFileContentReader(projectSettings))
            {
                specFlowDocument = ParseContent(parser, contentReader, featureFileInput.GetFullPath(projectSettings));
            }

            var featureGenerator = featureGeneratorRegistry.CreateGenerator(specFlowDocument);

            var codeNamespace = featureGenerator.GenerateUnitTestFixture(specFlowDocument, null, targetNamespace);

            return(codeNamespace);
        }
Esempio n. 9
0
        public void Parser_throws_meaningful_exception_when_Examples_have_duplicate_header_in_Scenario_Outline()
        {
            var feature = @"Feature: Duplicate
                            Scenario Outline: Duplicate Examples table headers
                            Given I am <acting>
                            
                            Examples:
                            | acting  | acting   |
                            | driving | drinking |
                            ";

            var parser = new SpecFlowGherkinParser(CultureInfo.GetCultureInfo("en"));

            Action act = () => parser.Parse(new StringReader(feature), null);

            act.Should().Throw <SemanticParserException>().WithMessage("(2:29): Scenario Outline 'Duplicate Examples table headers' already contains an example column with header 'acting'")
            .And.Location.Line.Should().Be(2);
        }
Esempio n. 10
0
        public void GenerateScenarioExampleTests()
        {
            var parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
            using (var reader = new StringReader(SampleFeatureFile))
            {
                var feature = parser.Parse(reader, null);
                Assert.IsNotNull(feature);

                var sampleTestGeneratorProvider = new SimpleTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));
                var converter = CreateUnitTestConverter(sampleTestGeneratorProvider);
                CodeNamespace code = converter.GenerateUnitTestFixture(feature, null, null);

                Assert.IsNotNull(code);

                // make sure name space is changed
                Assert.AreEqual(code.Name, SimpleTestGeneratorProvider.DefaultNameSpace);

                Assert.AreEqual(code.Types[0].Name, "SampleFeatureFileThatsGotWeirdNamesFeature");
            }
        }
        public void Should_add_testOutputHelper_field_in_class()
        {
            SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));

            using (var reader = new StringReader(SampleFeatureFile))
            {
                SpecFlowDocument document = parser.Parse(reader, null);
                Assert.IsNotNull(document);

                var provider = new XUnit2TestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));

                var           converter = provider.CreateUnitTestConverter();
                CodeNamespace code      = converter.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                var loggerInstance = code.Class().Members.OfType <CodeMemberField>().First(m => m.Name == @"_testOutputHelper");
                loggerInstance.Type.BaseType.Should().Be("Xunit.Abstractions.ITestOutputHelper");
                loggerInstance.Attributes.Should().Be(MemberAttributes.Private | MemberAttributes.Final);
            }
        }
        public void MsTestGeneratorShouldSetDescriptionCorrectlyWhenVariantNameFirstColumnIsDifferentAndMultipleColumns()
        {
            SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));

            using (var reader = new StringReader(SampleFeatureFileMultipleColumns))
            {
                SpecFlowDocument document = parser.Parse(reader, null);
                Assert.IsNotNull(document);

                var sampleTestGeneratorProvider = new MsTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));

                var           converter = sampleTestGeneratorProvider.CreateUnitTestConverter();
                CodeNamespace code      = converter.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                var descriptionAttributeForFirstScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_Something").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForFirstScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: something");
                var descriptionAttributeForSecondScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_SomethingElse").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForSecondScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: something else");
            }
        }
Esempio n. 13
0
        public void GenerateScenarioExampleTests()
        {
            var parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));

            using (var reader = new StringReader(SampleFeatureFile))
            {
                var feature = parser.Parse(reader, null);
                feature.Should().NotBeNull();

                var           sampleTestGeneratorProvider = new SimpleTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));
                var           converter = CreateUnitTestConverter(sampleTestGeneratorProvider);
                CodeNamespace code      = converter.GenerateUnitTestFixture(feature, null, null);

                code.Should().NotBeNull();

                // make sure name space is changed
                Assert.Equal(code.Name, SimpleTestGeneratorProvider.DefaultNameSpace);

                Assert.Equal(code.Types[0].Name, "SampleFeatureFileThatsGotWeirdNamesFeature");
            }
        }
Esempio n. 14
0
 public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters,
                        UnitTestProviderConfiguration unitTestProviderConfiguration)
 {
     var pars = new SpecFlowGherkinParser(new GherkinDialectProvider());
 }
Esempio n. 15
0
        private CodeNamespace GenerateTestFileCode(FeatureFileInput featureFileInput)
        {
            string targetNamespace = GetTargetNamespace(featureFileInput) ?? "SpecFlow.GeneratedTests";

            var parser = new SpecFlowGherkinParser(generatorConfiguration.FeatureLanguage);
            SpecFlowFeature feature;
            using (var contentReader = featureFileInput.GetFeatureFileContentReader(projectSettings))
            {
                feature = parser.Parse(contentReader, featureFileInput.GetFullPath(projectSettings));
            }

            var featureGenerator = featureGeneratorRegistry.CreateGenerator(feature);

            var codeNamespace = featureGenerator.GenerateUnitTestFixture(feature, null, targetNamespace);
            return codeNamespace;
        }
        private static CodeNamespace GenerateCodeNamespaceFromFeature(string feature)
        {
            CodeNamespace code;
            using (var reader = new StringReader(feature))
            {
                SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
                SpecFlowDocument document = parser.Parse(reader, "test.feature");

                var featureGenerator = CreateFeatureGenerator();

                code = featureGenerator.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");
            }

            return code;
        }
        public static SpecFlowGherkinParser CreateParser()
        {
            var parser = new SpecFlowGherkinParser(new CultureInfo("en-US")); //TODO: use specflow configuration

            return(parser);
        }
        public void MsTestGeneratorShouldSetDescriptionCorrectlyWhenVariantNameFirstColumnIsTheSame()
        {
            SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
            using (var reader = new StringReader(SampleFeatureFileSameFirstColumn))
            {
                SpecFlowDocument document = parser.Parse(reader, null);
                Assert.IsNotNull(document);

                var sampleTestGeneratorProvider = new MsTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));

                var converter = sampleTestGeneratorProvider.CreateUnitTestConverter();
                CodeNamespace code = converter.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                var descriptionAttributeForFirstScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_Variant0").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForFirstScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: Variant 0");
                var descriptionAttributeForSecondScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_Variant1").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForSecondScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: Variant 1");
            }
        }
        public void MsTestGeneratorShouldSetDescriptionCorrectlyWhenExampleSetIdentifierIsUsed()
        {
            SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
            using (var reader = new StringReader(SampleFeatureFileWithMultipleExampleSets))
            {
                SpecFlowDocument document = parser.Parse(reader, null);
                Assert.IsNotNull(document);

                var sampleTestGeneratorProvider = new MsTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));

                var converter = sampleTestGeneratorProvider.CreateUnitTestConverter();
                CodeNamespace code = converter.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                var descriptionAttributeForFirstScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_ExampleSet0_Something").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForFirstScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: something");
                var descriptionAttributeForSecondScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_ExampleSet0_SomethingElse").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForSecondScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: something else");
                var descriptionAttributeForThirdScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_ExampleSet1_Another").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForThirdScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: another");
                var descriptionAttributeForFourthScenarioOutline = code.Class().Members().Single(m => m.Name == "SimpleScenarioOutline_ExampleSet1_AndAnother").CustomAttributes().Single(a => a.Name == TestDescriptionAttributeName);
                descriptionAttributeForFourthScenarioOutline.ArgumentValues().First().Should().Be("Simple Scenario Outline: and another");
            }
        }
        public void MsTestGeneratorShouldInvokeFeatureSetupMethodWithGlobalNamespaceAlias()
        {
            SpecFlowGherkinParser parser = new SpecFlowGherkinParser(new CultureInfo("en-US"));
            using (var reader = new StringReader(SampleFeatureFileWithMultipleExampleSets))
            {
                SpecFlowDocument document = parser.Parse(reader, null);
                Assert.IsNotNull(document);

                var sampleTestGeneratorProvider = new MsTestGeneratorProvider(new CodeDomHelper(CodeDomProviderLanguage.CSharp));

                var converter = sampleTestGeneratorProvider.CreateUnitTestConverter();
                CodeNamespace code = converter.GenerateUnitTestFixture(document, "TestClassName", "Target.Namespace");

                Assert.IsNotNull(code);
                var featureSetupCall = code
                    .Class()
                    .Members()
                    .Single(m => m.Name == "TestInitialize")
                    .Statements
                    .OfType<CodeConditionStatement>()
                    .First()
                    .TrueStatements
                    .OfType<CodeExpressionStatement>()
                    .First()
                    .Expression
                    .As<CodeMethodInvokeExpression>();

                featureSetupCall.Should().NotBeNull();
                featureSetupCall.Method.MethodName.Should().Be("FeatureSetup");
                featureSetupCall.Method.TargetObject.As<CodeTypeReferenceExpression>().Type.Options.Should().Be(CodeTypeReferenceOptions.GlobalReference);
            }
        }
Esempio n. 21
0
 protected virtual SpecFlowDocument ParseContent(SpecFlowGherkinParser parser, TextReader contentReader, string sourceFilePath)
 {
     return(parser.Parse(contentReader, sourceFilePath));
 }
Esempio n. 22
0
 protected virtual SpecFlowFeature ParseContent(SpecFlowGherkinParser parser, TextReader contentReader, string sourceFilePath)
 {
     return parser.Parse(contentReader, sourceFilePath);
 }