public void Mutate() { // Mutate source files foreach (var file in _projectInfo.GetAllFiles().Cast <FsharpFileLeaf>()) { _logger.LogDebug($"Mutating {file.RelativePath}"); // Mutate the syntax tree var treeroot = ((ParsedInput.ImplFile)file.SyntaxTree).Item.modules; var mutatedSyntaxTree = _orchestrator.Mutate(treeroot); // Add the mutated syntax tree for compilation var tree = (ParsedInput.ImplFile)file.SyntaxTree; var item = tree.Item; //we hardcode the lastcompiled flag to make the compile pass //this needs to be fixed in the FSharp.Compiler.SourceCodeServices package, or made dynamic as it now assumes the bottom of Program.fs is the entrypoint var lastcompiled = item.fileName.Equals("Program.fs") ? new Tuple <bool, bool>(true, true) : item.isLastCompiland; file.MutatedSyntaxTree = ParsedInput.NewImplFile(ParsedImplFileInput.NewParsedImplFileInput(item.fileName, item.isScript, item.qualifiedNameOfFile, item.scopedPragmas, item.hashDirectives, mutatedSyntaxTree, lastcompiled)); if (_options.DevMode) { _logger.LogTrace($"Mutated {file.RelativePath}:{Environment.NewLine}{mutatedSyntaxTree}"); } // Filter the mutants var allMutants = _orchestrator.GetLatestMutantBatch(); file.Mutants = allMutants; } _logger.LogDebug("{0} mutants created", _projectInfo.Mutants.Count()); CompileMutations(); }
public void Mutate() { // Mutate source files foreach (var file in _projectInfo.GetAllFiles().Cast <CsharpFileLeaf>()) { _logger.LogDebug($"Mutating {file.FullPath}"); // Mutate the syntax tree var mutatedSyntaxTree = _orchestrator.Mutate(file.SyntaxTree.GetRoot()); // Add the mutated syntax tree for compilation file.MutatedSyntaxTree = mutatedSyntaxTree.SyntaxTree; if (_options.DevMode) { _logger.LogTrace($"Mutated {file.FullPath}:{Environment.NewLine}{mutatedSyntaxTree.ToFullString()}"); } // Filter the mutants file.Mutants = _orchestrator.GetLatestMutantBatch(); } _logger.LogDebug("{0} mutants created", _projectInfo.Mutants.Count()); CompileMutations(); }