private List <string> ClassesDeclared(TestClassGenerationContext generationContext, CodeMemberMethod testMethod, ScenarioStep scenarioStep, List <string> classesDeclared) { var result = m_stepTextAnalyzer.Analyze(scenarioStep.Text, new CultureInfo("en-GB")); if (scenarioStep.MultiLineTextArgument != null) { result.Parameters.Add(new AnalyzedStepParameter("String", "multilineText")); } if (scenarioStep.TableArg != null) { result.Parameters.Add(new AnalyzedStepParameter("Table", "table")); } var regex = GetSimpleRegex(result); try { var originalFilePath = new FileInfo(generationContext.Feature.SourceFile).Directory.Parent.FullName + @"\bin\debug"; var newFolderPath = Path.GetTempPath() + @"\Specflowdlls\" + DateTime.Now.ToLongDateString() + DateTime.Now.Ticks; var newDir = new DirectoryInfo(newFolderPath); newDir.Create(); string[] files = Directory.GetFiles(originalFilePath, "*.dll"); foreach (string file in files) { string otherFile = Path.Combine(newFolderPath, Path.GetFileName(file)); File.Copy(file, otherFile, true); } var dllname = new FileInfo(generationContext.Feature.SourceFile).Directory.Parent.Name + ".dll"; var assembly = Assembly.LoadFrom(String.Concat(newFolderPath, @"\", dllname)); var methods = assembly.GetTypes() .SelectMany(t => t.GetMethods()) .Where(m => HasSpecflowAttribute(m.GetCustomAttributesData(), regex)) .ToArray(); foreach (var methodInfo in methods) { classesDeclared = AddStatements(testMethod, methodInfo, classesDeclared, scenarioStep, result, regex); } } catch (Exception exception) { throw new Exception("oops", exception); } return(classesDeclared); }
public AnalyzedStepText Analyze(StepInstance stepInstance, CultureInfo bindingCulture) { var result = stepTextAnalyzer.Analyze(stepInstance.Text, bindingCulture); if (stepInstance.MultilineTextArgument != null) { result.Parameters.Add(new AnalyzedStepParameter("String", "multilineText")); } if (stepInstance.TableArgument != null) { result.Parameters.Add(new AnalyzedStepParameter("Table", "table")); } return(result); }