private object CompileAndCreateTest(string fileName, Feature feature) { string className = Path.GetFileNameWithoutExtension(fileName); const string targetNamespace = "Target.Namespace"; // the row test generation has to be set to false, because our verifications support the old style test generation only SpecFlowUnitTestConverter converter = new SpecFlowUnitTestConverter(CreateUnitTestGeneratorProvider(), new CodeDomHelper(CodeDomProviderLanguage.CSharp), new GeneratorConfiguration { AllowRowTests = false, AllowDebugGeneratedFiles = true }); var codeNamespace = converter.GenerateUnitTestFixture(feature, className, targetNamespace); var compileUnit = new CodeCompileUnit(); compileUnit.Namespaces.Add(codeNamespace); Dictionary<string, string> providerOptions = new Dictionary<string, string>(); providerOptions["CompilerVersion"] = "v3.5"; CSharpCodeProvider codeProvider = new CSharpCodeProvider(providerOptions); CompilerParameters compilerParameters = new CompilerParameters(); compilerParameters.GenerateInMemory = true; compilerParameters.TempFiles.KeepFiles = true; compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof (GeneratedCodeAttribute))); //System compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof (TestAttribute))); //NUnit compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof (ITestRunner))); //TechTalk.SpecFlow var results = codeProvider.CompileAssemblyFromDom(compilerParameters, compileUnit); if (results.NativeCompilerReturnValue != 0) throw new InvalidOperationException("Test cannot be compiled: " + string.Join(Environment.NewLine, results.Errors.Cast<CompilerError>().Select(ce => ce.ToString()).ToArray())); Type testType = results.CompiledAssembly.GetType(targetNamespace + "." + className, true); return Activator.CreateInstance(testType); }
private void GenerateCodeFromFeature(Feature feature, TextWriter writer) { SpecFlowUnitTestConverter converter = new SpecFlowUnitTestConverter(new NUnitTestConverter(), new CodeDomHelper(CodeDomProviderLanguage.CSharp), true, true); var codeNamespace = converter.GenerateUnitTestFixture(feature, "TestClassName", "Target.Namespace"); CSharpCodeProvider codeProvider = new CSharpCodeProvider(); CodeGeneratorOptions options = new CodeGeneratorOptions(); codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, options); }
private void GenerateCodeFromFeature(Feature feature, TextWriter writer) { var codeDomHelper = new CodeDomHelper(CodeDomProviderLanguage.CSharp); var mbUnitTestGeneratorProvider = new MbUnitTestGeneratorProvider(); var converter = new SpecFlowUnitTestConverter(mbUnitTestGeneratorProvider, codeDomHelper, true); CodeNamespace codeNamespace = converter.GenerateUnitTestFixture(feature, "TestClassName", "Target.Namespace"); var codeProvider = new CSharpCodeProvider(); var options = new CodeGeneratorOptions(); codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, options); }
public CodeNamespace GenerateTestFileCode(SpecFlowFeatureFile featureFile, TextReader inputReader) { string targetNamespace = GetTargetNamespace(featureFile); SpecFlowLangParser parser = new SpecFlowLangParser(project.GeneratorConfiguration.FeatureLanguage); Feature feature = parser.Parse(inputReader, featureFile.GetFullPath(project)); IUnitTestGeneratorProvider generatorProvider = ConfigurationServices.CreateInstance<IUnitTestGeneratorProvider>(project.GeneratorConfiguration.GeneratorUnitTestProviderType); SpecFlowUnitTestConverter testConverter = new SpecFlowUnitTestConverter(generatorProvider, project.GeneratorConfiguration.AllowDebugGeneratedFiles); var codeNamespace = testConverter.GenerateUnitTestFixture(feature, null, targetNamespace); return codeNamespace; }
public CodeNamespace GenerateTestFileCode(FeatureFileInput featureFile, TextReader inputReader, CodeDomProvider codeProvider, CodeDomHelper codeDomHelper) { string targetNamespace = GetTargetNamespace(featureFile); SpecFlowLangParser parser = new SpecFlowLangParser(project.Configuration.GeneratorConfiguration.FeatureLanguage); Feature feature = parser.Parse(inputReader, featureFile.GetFullPath(project.ProjectSettings)); IUnitTestGeneratorProvider generatorProvider = ConfigurationServices.CreateInstance<IUnitTestGeneratorProvider>(project.Configuration.GeneratorConfiguration.GeneratorUnitTestProviderType); codeDomHelper.InjectIfRequired(generatorProvider); ISpecFlowUnitTestConverter testConverter = new SpecFlowUnitTestConverter(generatorProvider, codeDomHelper, project.Configuration.GeneratorConfiguration); var codeNamespace = testConverter.GenerateUnitTestFixture(feature, null, targetNamespace); return codeNamespace; }
private object CompileAndCreateTest(string fileName, Feature feature) { string className = Path.GetFileNameWithoutExtension(fileName); const string targetNamespace = "Target.Namespace"; // the row test generation has to be set to false, because our verifications support the old style test generation only SpecFlowUnitTestConverter converter = new SpecFlowUnitTestConverter(new NUnitTestConverter(), new CodeDomHelper(CodeDomProviderLanguage.CSharp), true, false); var codeNamespace = converter.GenerateUnitTestFixture(feature, className, targetNamespace); var compileUnit = new CodeCompileUnit(); compileUnit.Namespaces.Add(codeNamespace); Dictionary <string, string> providerOptions = new Dictionary <string, string>(); providerOptions["CompilerVersion"] = "v3.5"; CSharpCodeProvider codeProvider = new CSharpCodeProvider(providerOptions); CompilerParameters compilerParameters = new CompilerParameters(); compilerParameters.GenerateInMemory = true; compilerParameters.TempFiles.KeepFiles = true; compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof(GeneratedCodeAttribute))); //System compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof(TestAttribute))); //NUnit compilerParameters.ReferencedAssemblies.Add( TestFileHelper.GetAssemblyPath(typeof(ITestRunner))); //TechTalk.SpecFlow var results = codeProvider.CompileAssemblyFromDom(compilerParameters, compileUnit); if (results.NativeCompilerReturnValue != 0) { throw new InvalidOperationException("Test cannot be compiled: " + string.Join(Environment.NewLine, results.Errors.Cast <CompilerError>().Select(ce => ce.ToString()).ToArray())); } Type testType = results.CompiledAssembly.GetType(targetNamespace + "." + className, true); return(Activator.CreateInstance(testType)); }
public void GenerateScenarioExampleTests() { SpecFlowLangParser parser = new SpecFlowLangParser(new CultureInfo("en-US")); foreach (var testFile in TestFileHelper.GetTestFiles()) { using (var reader = new StreamReader(testFile)) { Feature feature = parser.Parse(reader, null); Assert.IsNotNull(feature); Console.WriteLine("Testing {0}", Path.GetFileName(testFile)); var codeDomHelper = new CodeDomHelper(CodeDomProviderLanguage.CSharp); var sampleTestGeneratorProvider = new SimpleTestGeneratorProvider(); var converter = new SpecFlowUnitTestConverter(sampleTestGeneratorProvider, codeDomHelper, true, true); 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 GenerateScenarioExampleTests() { SpecFlowLangParser parser = new SpecFlowLangParser(new CultureInfo("en-US")); foreach (var testFile in TestFileHelper.GetTestFiles()) { using (var reader = new StreamReader(testFile)) { Feature feature = parser.Parse(reader, null); Assert.IsNotNull(feature); Console.WriteLine("Testing {0}", Path.GetFileName(testFile)); var codeDomHelper = new CodeDomHelper(CodeDomProviderLanguage.CSharp); var sampleTestGeneratorProvider = new SimpleTestGeneratorProvider(); var converter = new SpecFlowUnitTestConverter(sampleTestGeneratorProvider, codeDomHelper, true, true); 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)); } } } }
private CodeNamespace GenerateTestFileCode(FeatureFileInput featureFileInput, CodeDomHelper codeDomHelper) { string targetNamespace = GetTargetNamespace(featureFileInput) ?? "SpecFlow.GeneratedTests"; SpecFlowLangParser parser = new SpecFlowLangParser(generatorConfiguration.FeatureLanguage); Feature feature; using (var contentReader = featureFileInput.GetFeatureFileContentReader(projectSettings)) { feature = parser.Parse(contentReader, featureFileInput.GetFullPath(projectSettings)); } IUnitTestGeneratorProvider generatorProvider = ConfigurationServices.CreateInstance<IUnitTestGeneratorProvider>(generatorConfiguration.GeneratorUnitTestProviderType); codeDomHelper.InjectIfRequired(generatorProvider); ISpecFlowUnitTestConverter testConverter = new SpecFlowUnitTestConverter(generatorProvider, codeDomHelper, generatorConfiguration); var codeNamespace = testConverter.GenerateUnitTestFixture(feature, null, targetNamespace); return codeNamespace; }
private void GenerateCodeFromFeature(Feature feature, TextWriter writer) { SpecFlowUnitTestConverter converter = new SpecFlowUnitTestConverter(new NUnitTestConverter(), true); var codeNamespace = converter.GenerateUnitTestFixture(feature, "TestClassName", "Target.Namespace"); CSharpCodeProvider codeProvider = new CSharpCodeProvider(); CodeGeneratorOptions options = new CodeGeneratorOptions(); codeProvider.GenerateCodeFromNamespace(codeNamespace, writer, options); }