/// <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); }
/// <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); }