Ejemplo n.º 1
0
        protected string GetGeneratedTestCode(TableFileInput tableFileInput)
        {
            using (var outputWriter = new IndentProcessingWriter(new StringWriter()))
            {
                var codeProvider  = codeDomHelper.CreateCodeDomProvider();
                var codeNamespace = GenerateTestFileCode(tableFileInput);

                if (codeNamespace == null)
                {
                    return("");
                }

                var options = new CodeGeneratorOptions
                {
                    BracingStyle = "C",
                };

                AddSpecFlowHeader(codeProvider, outputWriter);
                codeProvider.GenerateCodeFromNamespace(codeNamespace, outputWriter, options);
                AddSpecFlowFooter(codeProvider, outputWriter);

                outputWriter.Flush();
                var generatedTestCode = outputWriter.ToString();
                return(FixVBNetGlobalNamespace(generatedTestCode));
            }
        }
        public static string GetGeneratedTestContent(this TableFileInput tableFileInput, string generatedTestFullPath)
        {
            var generatedTestFileContent = tableFileInput.GeneratedTestFileContent;

            if (generatedTestFileContent != null)
            {
                return(generatedTestFileContent);
            }

            if (generatedTestFullPath == null)
            {
                return(null);
            }

            try
            {
                if (!File.Exists(generatedTestFullPath))
                {
                    return(null);
                }

                return(File.ReadAllText(generatedTestFullPath));
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception, "TableFileInputExtensions.GetGeneratedTestContent");
                return(null);
            }
        }
Ejemplo n.º 3
0
        public string GetTestFullPath(TableFileInput tableFileInput)
        {
            var path = tableFileInput.GetGeneratedTestFullPath(projectSettings);

            if (path != null)
            {
                return(path);
            }

            return(tableFileInput.GetFullPath(projectSettings) + GenerationTargetLanguage.GetExtension(projectSettings.ProjectPlatformSettings.Language));
        }
        public static string GetFullPath(this TableFileInput tableFileInput, ProjectSettings projectSettings)
        {
            if (tableFileInput == null)
            {
                throw new ArgumentNullException("tableFileInput");
            }

            if (projectSettings == null)
            {
                return(tableFileInput.ProjectRelativePath);
            }

            return(Path.GetFullPath(Path.Combine(projectSettings.ProjectFolder, tableFileInput.ProjectRelativePath)));
        }
        public static TextReader GetTableFileContentReader(this TableFileInput tableFileInput, ProjectSettings projectSettings)
        {
            if (tableFileInput == null)
            {
                throw new ArgumentNullException("tableFileInput");
            }

            if (tableFileInput.TableFileContent != null)
            {
                return(new StringReader(tableFileInput.TableFileContent));
            }

            Debug.Assert(projectSettings != null);

            return(new StreamReader(Path.Combine(projectSettings.ProjectFolder, tableFileInput.ProjectRelativePath)));
        }
Ejemplo n.º 6
0
        protected override TestGeneratorResult GenerateTestFileWithExceptions(TableFileInput tableFileInput, GenerationSettings settings)
        {
            if (tableFileInput == null)
            {
                throw new ArgumentNullException("tableFileInput");
            }
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            var  generatedTestFullPath          = GetTestFullPath(tableFileInput);
            bool?preliminaryUpToDateCheckResult = null;

            if (settings.CheckUpToDate)
            {
                preliminaryUpToDateCheckResult = testUpToDateChecker.IsUpToDatePreliminary(tableFileInput, generatedTestFullPath, settings.UpToDateCheckingMethod);
                if (preliminaryUpToDateCheckResult == true)
                {
                    return(new TestGeneratorResult(null, true));
                }
            }

            string generatedTestCode = GetGeneratedTestCode(tableFileInput);

            if (string.IsNullOrEmpty(generatedTestCode))
            {
                return(new TestGeneratorResult(null, true));
            }

            if (settings.CheckUpToDate && preliminaryUpToDateCheckResult != false)
            {
                var isUpToDate = testUpToDateChecker.IsUpToDate(tableFileInput, generatedTestFullPath, generatedTestCode, settings.UpToDateCheckingMethod);
                if (isUpToDate)
                {
                    return(new TestGeneratorResult(null, true));
                }
            }

            if (settings.WriteResultToFile)
            {
                File.WriteAllText(generatedTestFullPath, generatedTestCode, Encoding.UTF8);
            }

            return(new TestGeneratorResult(generatedTestCode, false));
        }
Ejemplo n.º 7
0
        private CodeNamespace GenerateTestFileCode(TableFileInput tableFileInput)
        {
            string targetNamespace = GetTargetNamespace(tableFileInput) ?? "SpecFlow.GeneratedTests";

            SpecFlowDocument specFlowDocument;

            using (var contentReader = tableFileInput.GetTableFileContentReader(projectSettings))
            {
                specFlowDocument = ParseContent(parser, contentReader, GetSpecFlowDocumentLocation(tableFileInput));
            }

            if (specFlowDocument.SpecFlowTable == null)
            {
                return(null);
            }

            var tableGenerator = tableGeneratorRegistry.CreateGenerator(specFlowDocument);

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

            return(codeNamespace);
        }
Ejemplo n.º 8
0
        protected string GetTargetNamespace(TableFileInput tableFileInput)
        {
            if (!string.IsNullOrEmpty(tableFileInput.CustomNamespace))
            {
                return(tableFileInput.CustomNamespace);
            }

            string targetNamespace = projectSettings == null || string.IsNullOrEmpty(projectSettings.DefaultNamespace)
                ? null
                : projectSettings.DefaultNamespace;

            var    directoryName      = Path.GetDirectoryName(tableFileInput.ProjectRelativePath);
            string namespaceExtension = string.IsNullOrEmpty(directoryName) ? null :
                                        string.Join(".", directoryName.TrimStart('\\', '/', '.').Split('\\', '/').Select(f => f.ToIdentifier()).ToArray());

            if (!string.IsNullOrEmpty(namespaceExtension))
            {
                targetNamespace = targetNamespace == null
                    ? namespaceExtension
                    : targetNamespace + "." + namespaceExtension;
            }
            return(targetNamespace);
        }
Ejemplo n.º 9
0
        protected override Version DetectGeneratedTestVersionWithExceptions(TableFileInput tableFileInput)
        {
            var generatedTestFullPath = GetTestFullPath(tableFileInput);

            return(testHeaderWriter.DetectGeneratedTestVersion(tableFileInput.GetGeneratedTestContent(generatedTestFullPath)));
        }
Ejemplo n.º 10
0
 private SpecFlowDocumentLocation GetSpecFlowDocumentLocation(TableFileInput tableFileInput)
 {
     return(new SpecFlowDocumentLocation(
                tableFileInput.GetFullPath(projectSettings),
                GetTableFolderPath(tableFileInput.ProjectRelativePath)));
 }