Example #1
0
        /// <summary>
        /// Finds the referencedProjects and looks for all files that should be mutated in those projects
        /// </summary>
        public ProjectInfo ResolveInput(StrykerOptions options)
        {
            var    result           = new ProjectInfo();
            var    testProjectFiles = new List <string>();
            string projectUnderTest = null;

            if (options.TestProjects != null && options.TestProjects.Any())
            {
                testProjectFiles = options.TestProjects.Select(FindProjectFile).ToList();
            }
            else
            {
                testProjectFiles.Add(FindProjectFile(options.BasePath));
            }

            var results = new List <ProjectAnalyzerResult>();

            foreach (var testProjectFile in testProjectFiles)
            {
                // Analyze the test project
                results.Add(_projectFileReader.AnalyzeProject(testProjectFile, options.SolutionPath));
            }
            result.TestProjectAnalyzerResults = results;

            // Determine project under test
            var reader = new ProjectFileReader();

            if (options.TestProjects != null && options.TestProjects.Any())
            {
                projectUnderTest = FindProjectFile(options.BasePath);
            }
            else
            {
                projectUnderTest = reader.DetermineProjectUnderTest(result.TestProjectAnalyzerResults.Single().ProjectReferences, options.ProjectUnderTestNameFilter);
            }

            _logger.LogInformation("The project {0} will be mutated", projectUnderTest);

            // Analyze project under test
            result.ProjectUnderTestAnalyzerResult = _projectFileReader.AnalyzeProject(projectUnderTest, options.SolutionPath);

            FolderComposite inputFiles;

            if (result.ProjectUnderTestAnalyzerResult.SourceFiles != null && result.ProjectUnderTestAnalyzerResult.SourceFiles.Any())
            {
                inputFiles = FindProjectFilesUsingBuildAlyzer(result.ProjectUnderTestAnalyzerResult);
            }
            else
            {
                inputFiles = FindProjectFilesScanningProjectFolders(result.ProjectUnderTestAnalyzerResult);
            }
            result.ProjectContents = inputFiles;

            ValidateResult(result, options);

            return(result);
        }
Example #2
0
        /// <summary>
        /// Finds the referencedProjects and looks for all files that should be mutated in those projects
        /// </summary>
        public ProjectInfo ResolveInput(StrykerOptions options)
        {
            var result = new ProjectInfo();

            var testProjectFile = FindProjectFile(options.BasePath, options.TestProjectNameFilter);

            // Analyze the test project
            result.TestProjectAnalyzerResult = _projectFileReader.AnalyzeProject(testProjectFile, options.SolutionPath);

            // Determine project under test
            var reader           = new ProjectFileReader();
            var projectUnderTest = reader.DetermineProjectUnderTest(result.TestProjectAnalyzerResult.ProjectReferences, options.ProjectUnderTestNameFilter);

            _logger.LogInformation("The project {0} will be mutated", projectUnderTest);

            // Analyze project under test
            result.ProjectUnderTestAnalyzerResult = _projectFileReader.AnalyzeProject(projectUnderTest, options.SolutionPath);

            var inputFiles = new FolderComposite();

            result.FullFramework = !result.TestProjectAnalyzerResult.TargetFramework.Contains("netcoreapp", StringComparison.InvariantCultureIgnoreCase);
            var projectUnderTestDir = Path.GetDirectoryName(result.ProjectUnderTestAnalyzerResult.ProjectFilePath);

            foreach (var dir in ExtractProjectFolders(result.ProjectUnderTestAnalyzerResult, result.FullFramework))
            {
                var folder = _fileSystem.Path.Combine(Path.GetDirectoryName(projectUnderTestDir), dir);

                _logger.LogDebug($"Scanning {folder}");
                if (!_fileSystem.Directory.Exists(folder))
                {
                    throw new DirectoryNotFoundException($"Can't find {folder}");
                }
                inputFiles.Add(FindInputFiles(folder, options.FilesToExclude.ToList()));
            }
            MarkInputFilesAsExcluded(inputFiles, options.FilesToExclude.ToList(), projectUnderTestDir);
            result.ProjectContents = inputFiles;

            ValidateResult(result, options);

            return(result);
        }