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();
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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}.");
        }
Esempio n. 5
0
        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}.");
        }
Esempio n. 7
0
        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;
        }