private MutationTestInfo ProceedTestResult(MethodTurtleBase turtle) { var mutationInfo = new MutationTestInfo(0, 0); while (_pendingTest.Count != 0) { var testResult = _dispatcher.ReadATest(); var mutation = _pendingTest[testResult.Uid]; if (!CheckTestResult(turtle, mutation, testResult)) { Interlocked.Increment(ref mutationInfo.MutantsFailures); } Interlocked.Increment(ref mutationInfo.MutantsCount); _pendingTest.Remove(testResult.Uid); } return(mutationInfo); }
private bool CheckTestResult(MethodTurtleBase turtle, MutantMetaData mutation, TestDescription testDescription) { var exitedInTime = testDescription.ExitedInTime; var exitCode = (testDescription.TestsPass ? 0 : 1); bool testSuitePassed = exitCode == 0 && exitedInTime; string result = string.Format(" Mutant: {0}. {1}", mutation.Description, testSuitePassed ? "Survived." : "Killed."); _report.AddResult(mutation.MethodDefinition.GetCurrentSequencePoint(mutation.ILIndex), mutation, !testSuitePassed); if (testSuitePassed) { mutation.TestDirectory.DoNotDelete = true; var sourceFilename = mutation.MethodDefinition.GetOriginalSourceFileName(mutation.ILIndex); var testDirectoryPath = mutation.TestDirectoryName; if (sourceFilename != null) { var sourceCode = mutation.GetOriginalSourceCode(mutation.ILIndex); result = string.Format( "{0}\nOriginal source code around surviving mutant (in {1}):\n{2}\nFiles left for inspection in: {3}", result, sourceFilename, sourceCode, testDirectoryPath); } else { result = string.Format( "{0}\nOriginal source code couldn't be retrieve\nFiles left for inspection in: {1}", result, testDirectoryPath); } } Console.WriteLine(result); turtle.MutantComplete(mutation); return(!testSuitePassed); }