//---------------------------------------------------------------------
        public Task RunCodeCoverageAsync(MainSettings settings)
        {
            var basicSettings = settings.BasicSettings;
            var fileName      = GetOpenCppCoveragePath(basicSettings.ProgramToRun);
            var arguments     = OpenCppCoverageCmdLine.Build(settings);

            this.outputWindowWriter.WriteLine("Run:");
            this.outputWindowWriter.WriteLine(string.Format(@"""{0}"" {1}",
                                                            fileName, arguments));

            // Run in a new thread to not block UI thread.
            return(Task.Run(() =>
            {
                using (var process = new Process())
                {
                    var startInfo = process.StartInfo;
                    startInfo.FileName = fileName;
                    startInfo.Arguments = arguments;
                    startInfo.UseShellExecute = false;
                    startInfo.CreateNoWindow = false;

                    foreach (var environment in basicSettings.EnvironmentVariables)
                    {
                        startInfo.EnvironmentVariables.Add(environment.Key, environment.Value);
                    }

                    if (!String.IsNullOrEmpty(basicSettings.WorkingDirectory))
                    {
                        startInfo.WorkingDirectory = basicSettings.WorkingDirectory;
                    }
                    process.Start();
                    process.WaitForExit();
                }
            }));
        }
 //---------------------------------------------------------------------
 public OpenCppCoverageRunner(
     OutputWindowWriter outputWindowWriter,
     OpenCppCoverageCmdLine openCppCoverageCmdLine)
 {
     this.outputWindowWriter     = outputWindowWriter;
     this.openCppCoverageCmdLine = openCppCoverageCmdLine;
 }
示例#3
0
        //---------------------------------------------------------------------
        void RunCommand(
            Action <MainWindowsManager> action)
        {
            IVsUIShell uiShell = (IVsUIShell)serviceProvider.GetService(typeof(SVsUIShell));

            var errorHandler = new ErrorHandler(uiShell);

            errorHandler.Execute(() =>
            {
                var dte          = (DTE2)serviceProvider.GetService(typeof(EnvDTE.DTE));
                var outputWindow = (IVsOutputWindow)serviceProvider.GetService(typeof(SVsOutputWindow));
                var outputWriter = new OutputWindowWriter(dte, outputWindow);

                errorHandler.OutputWriter  = outputWriter;
                var coverageViewManager    = GetCoverageViewManager(serviceProvider);
                var coverageTreeManager    = new CoverageTreeManager(windowFinder);
                var projectBuilder         = new ProjectBuilder(dte, errorHandler, outputWriter);
                var deserializer           = new CoverageDataDeserializer();
                var openCppCoverageCmdLine = new OpenCppCoverageCmdLine(this.configFile);
                var openCppCoverageRunner  = new OpenCppCoverageRunner(outputWriter, openCppCoverageCmdLine);

                var coverageRunner = new CoverageRunner(
                    dte, outputWriter, coverageTreeManager, projectBuilder,
                    coverageViewManager, deserializer, errorHandler, openCppCoverageRunner);

                var configurationManager  = new ConfigurationManager();
                var settingsBuilder       = new StartUpProjectSettingsBuilder(dte, configurationManager);
                var mainSettingController = new MainSettingController(
                    new SettingsStorage(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)),
                    openCppCoverageCmdLine,
                    settingsBuilder,
                    coverageRunner);

                var mainWindowsManager = new MainWindowsManager(windowFinder, mainSettingController);

                action(mainWindowsManager);
            });
        }