private void DoRunTests(ICollection <TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle) { if (testCasesToRun.Count == 0) { return; } bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio, _logger); var launcher = new DebuggedProcessLauncher(frameworkHandle); ProcessExecutor processExecutor = null; if (_settings.UseNewTestExecutionFramework) { IDebuggerAttacher debuggerAttacher = null; if (runContext.IsBeingDebugged) { debuggerAttacher = new MessageBasedDebuggerAttacher(_settings.DebuggingNamedPipeId, _logger); } processExecutor = new ProcessExecutor(debuggerAttacher, _logger); } lock (_lock) { if (_canceled) { return; } _executor = new GoogleTestExecutor(_logger, _settings); } _executor.RunTests(testCasesToRun, reporter, launcher, runContext.IsBeingDebugged, runContext.SolutionDirectory, processExecutor); reporter.AllTestsFinished(); }
private void DoRunTests(ICollection <TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle) { if (testCasesToRun.Count == 0) { return; } bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio, _logger); var debuggerAttacher = _debuggerAttacher ?? new MessageBasedDebuggerAttacher(_settings.DebuggingNamedPipeId, _logger); var processExecutorFactory = new DebuggedProcessExecutorFactory(frameworkHandle, debuggerAttacher); var exitCodeTestsAggregator = new ExitCodeTestsAggregator(); var exitCodeTestsReporter = new ExitCodeTestsReporter(reporter, exitCodeTestsAggregator, _settings, _logger); lock (_lock) { if (_canceled) { return; } _executor = new GoogleTestExecutor(_logger, _settings, processExecutorFactory, exitCodeTestsReporter); } _executor.RunTests(testCasesToRun, reporter, runContext.IsBeingDebugged); reporter.AllTestsFinished(); }
private void DoRunTests( IEnumerable <TestCase> allTestCasesInExecutables, IEnumerable <TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle) { bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio); var launcher = new DebuggedProcessLauncher(frameworkHandle); _executor = new GoogleTestExecutor(_testEnvironment); _executor.RunTests(allTestCasesInExecutables, testCasesToRun, reporter, launcher, runContext.IsBeingDebugged, runContext.SolutionDirectory); reporter.AllTestsFinished(); }
private void DoRunTests( IEnumerable <TestCase> allTestCasesInExecutables, ICollection <TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle, Stopwatch stopwatch) { bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio); var launcher = new DebuggedProcessLauncher(frameworkHandle); _executor = new GoogleTestExecutor(_testEnvironment); _executor.RunTests(allTestCasesInExecutables, testCasesToRun, reporter, launcher, runContext.IsBeingDebugged, runContext.SolutionDirectory); reporter.AllTestsFinished(); stopwatch.Stop(); _testEnvironment.LogInfo($"Google Test execution completed, overall duration: {stopwatch.Elapsed}."); }
private void DoRunTests( IEnumerable <TestCase> allTestCasesInExecutables, ICollection <TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle) { bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio); var launcher = new DebuggedProcessLauncher(frameworkHandle); ProcessExecutor processExecutor = null; if (_settings.UseNewTestExecutionFramework) { IDebuggerAttacher debuggerAttacher = null; if (runContext.IsBeingDebugged) { debuggerAttacher = new VsDebuggerAttacher(_logger, _settings.VisualStudioProcessId); } processExecutor = new ProcessExecutor(debuggerAttacher, _logger); } _executor = new GoogleTestExecutor(_logger, _settings); _executor.RunTests(allTestCasesInExecutables, testCasesToRun, reporter, launcher, runContext.IsBeingDebugged, runContext.SolutionDirectory, processExecutor); reporter.AllTestsFinished(); }
private void DoRunTests( IEnumerable<TestCase> allTestCasesInExecutables, ICollection<TestCase> testCasesToRun, IRunContext runContext, IFrameworkHandle frameworkHandle, Stopwatch stopwatch) { bool isRunningInsideVisualStudio = !string.IsNullOrEmpty(runContext.SolutionDirectory); var reporter = new VsTestFrameworkReporter(frameworkHandle, isRunningInsideVisualStudio); var launcher = new DebuggedProcessLauncher(frameworkHandle); _executor = new GoogleTestExecutor(_testEnvironment); _executor.RunTests(allTestCasesInExecutables, testCasesToRun, reporter, launcher, runContext.IsBeingDebugged, runContext.SolutionDirectory); reporter.AllTestsFinished(); stopwatch.Stop(); _testEnvironment.LogInfo($"Google Test execution completed, overall duration: {stopwatch.Elapsed}."); }
private async Task ExecuteTests() { _chalk.Default("\nExecuting Tests..."); var log = new StringBuilder(); void OutputData(object sender, string args) => log.AppendLine(args); var testExecutor = new GoogleTestExecutor { LogDir = MuTestSettings.TestsResultDirectory }; testExecutor.OutputDataReceived += OutputData; var projectDirectory = Path.GetDirectoryName(_options.TestProject); var projectName = Path.GetFileNameWithoutExtension(_options.TestProject); var projectNameFromTestContext = string.Format(Path.GetFileNameWithoutExtension(Context.TestProject.Name), 0); var app = $"{projectDirectory}\\{string.Format(Context.OutDir.TrimEnd('/'), 0)}\\{projectName}.exe"; if (!File.Exists(app)) { app = $"{projectDirectory}/{string.Format(Context.OutDir, 0)}{projectNameFromTestContext}.exe"; } if (!File.Exists(app)) { throw new MuTestFailingTestException($"Unable to find google tests at path {app}"); } var cppTestContext = Context.TestContexts.First(); var filter = $"{Path.GetFileNameWithoutExtension(cppTestContext.TestClass.Name)}*"; await testExecutor.ExecuteTests(app, filter); if (testExecutor.TestResult != null) { _cppClass.NumberOfTests = Convert.ToInt32(testExecutor.TestResult.Tests); if (_cppClass.NumberOfTests == 0) { filter = string.Empty; _cppClass.UseClassFilter = false; await testExecutor.ExecuteTests(app, string.Empty); } } if (testExecutor.TestResult != null) { _cppClass.NumberOfTests = Convert.ToInt32(testExecutor.TestResult.Tests); _cppClass.NumberOfDisabledTests = Convert.ToInt32(testExecutor.TestResult.Disabled); _chalk.Default($"\n\nNumber of Tests: {_cppClass.NumberOfTests}\n"); _cppClass.Tests.AddRange(testExecutor .TestResult .Testsuite .SelectMany(x => x.Testcase) .Select(x => new Test { Name = $"{x.Classname.Replace("_mutest_test_0", string.Empty)}.{x.Name}", ExecutionTime = Convert.ToDouble(x.Time) })); } if (testExecutor.LastTestExecutionStatus != TestExecutionStatus.Success) { throw new MuTestFailingTestException(log.ToString()); } _chalk.Default("\nCalculating Code Coverage...\n"); var coverageExecutor = new OpenCppCoverageExecutor(MuTestSettings.OpenCppCoveragePath, MuTestSettings.TestsResultDirectory); await coverageExecutor .GenerateCoverage( cppTestContext.SourceClass.DirectoryName, app, filter); if (coverageExecutor.CoverageReport != null) { foreach (var package in coverageExecutor.CoverageReport.Packages.Package) { foreach (var packageClass in package.Classes.Class) { if (cppTestContext.SourceClass.FullName.EndsWith(packageClass.Filename, StringComparison.InvariantCultureIgnoreCase)) { var coveredLines = (uint)packageClass.Lines.Line.Count(x => x.Hits > 0); var totalLines = (uint)packageClass.Lines.Line.Count; if (totalLines == 0) { totalLines = 1; } _chalk.Yellow($"\nCode Coverage for Class {Path.GetFileName(_cppClass.SourceClass)} is {decimal.Divide(coveredLines, totalLines):P} ({coveredLines}/{totalLines})\n"); _cppClass.Coverage = new Coverage { LinesCovered = coveredLines, LinesNotCovered = totalLines - coveredLines }; var factor = Context.UseMultipleSolutions || !Context.NamespaceAdded ? 0u : 3u; foreach (var line in packageClass.Lines.Line) { var currentLineNumber = Convert.ToUInt32(line.Number); if (line.Hits > 0) { _cppClass.CoveredLineNumbers.Add(currentLineNumber - factor); } } break; } } } } testExecutor.OutputDataReceived -= OutputData; }