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)); } } }
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(); }
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; }
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; }
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); }
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); }
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); }
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); }
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); }
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"); } }
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"); } }
public void Initialize(GeneratorPluginEvents generatorPluginEvents, GeneratorPluginParameters generatorPluginParameters, UnitTestProviderConfiguration unitTestProviderConfiguration) { var pars = new SpecFlowGherkinParser(new GherkinDialectProvider()); }
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); } }
protected virtual SpecFlowDocument ParseContent(SpecFlowGherkinParser parser, TextReader contentReader, string sourceFilePath) { return(parser.Parse(contentReader, sourceFilePath)); }
protected virtual SpecFlowFeature ParseContent(SpecFlowGherkinParser parser, TextReader contentReader, string sourceFilePath) { return parser.Parse(contentReader, sourceFilePath); }