public TestRunResult CaptureCoverage(bool cantUsePipe, bool cantUseUnloadAppDomain) { if (cantUseUnloadAppDomain) { _logger.LogWarning("Can't capture the test coverage as the target framework does not support 'AppDomain'. "); return new TestRunResult() { Success = true }; } if (cantUsePipe) { _logger.LogDebug("Target framework does not support NamedPipes. Stryker will use environment variables instead."); } if (_flags.HasFlag(OptimizationFlags.SkipUncoveredMutants) || _flags.HasFlag(OptimizationFlags.CoverageBasedTest)) { var collector = new CoverageCollector(); collector.SetLogger((message) => _logger.LogTrace(message)); collector.Init(!cantUsePipe); var coverageEnvironment = collector.GetEnvironmentVariables(); var result = LaunchTestProcess(null, coverageEnvironment); var data = collector.RetrieveCoverData(); var coveredMutants = data.Split(";")[0].Split(",", StringSplitOptions.RemoveEmptyEntries); CoverageMutants.DeclareCoveredMutants(coveredMutants.Select(int.Parse)); return result; } return new TestRunResult(){Success = true}; }
public TestRunResult CaptureCoverage(IEnumerable <Mutant> mutants, bool cantUseUnloadAppDomain, bool cantUsePipe) { if (!_flags.HasFlag(OptimizationFlags.SkipUncoveredMutants) && !_flags.HasFlag(OptimizationFlags.CoverageBasedTest)) { return(new TestRunResult(true)); } if (cantUseUnloadAppDomain) { _logger.LogWarning("Can't capture the test coverage as the target framework does not support 'AppDomain'. "); return(new TestRunResult(true)); } if (cantUsePipe) { _logger.LogWarning("Can't capture the test coverage as the target framework does not support pipes. "); return(new TestRunResult(true)); } var collector = new CoverageCollector(); collector.SetLogger(message => _logger.LogTrace(message)); var coverageEnvironment = new Dictionary <string, string>(); coverageEnvironment["Coverage"] = $"pipe:{_server.PipeName}"; var result = LaunchTestProcess(null, coverageEnvironment); if (!WaitOnLck(_lck, () => _lastMessage != null, 5000)) { // Failed to retrieve coverage data for testCase return(null); } var testedMutant = _lastMessage.Split(";")[0].Split(",").Select(int.Parse).ToList(); foreach (var mutant in mutants) { mutant.CoveringTests = testedMutant.Contains(mutant.Id) ? TestListDescription.EveryTest() : new TestListDescription(null); } return(result); }