Exemple #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SessionInfo"/> class.
        /// </summary>
        /// <param name="commandLineArguments">The command line arguments.</param>
        /// <param name="configuration">The configuration.</param>
        public SessionInfo(CommandLineArguments commandLineArguments, CodeCoverageUtilConfiguration configuration)
        {
            assembliesDirectory = Path.Combine(configuration.TempPath, "Assemblies");

            resultsDirectory = Path.Combine(configuration.ResultsPath, "Latest");

            assemblyBackupDirectory = Path.Combine(configuration.TempPath, "Backup");

            coverageReportDirectory = Path.Combine(resultsDirectory, "CoverageReport");

            CoverageResultsFile = Path.Combine(ResultsDirectory, CoverageResultsFileName);

            CommandLineArguments = commandLineArguments;
            Configuration        = configuration;

            NoResults = configuration.NoResults;
            if (commandLineArguments.NoResults.HasValue)
            {
                NoResults = commandLineArguments.NoResults.Value;
            }

            details.AddRange(configuration.Details);
            details.AddRange(commandLineArguments.Details);
            details = details.Distinct().ToList <string>();

            if (!string.IsNullOrEmpty(commandLineArguments.TestSourceFilePath) &&
                !string.IsNullOrEmpty(commandLineArguments.TestAssemblyFilePath) &&
                commandLineArguments.LineNumber > 0)
            {
                TestCodeContext = new TestCodeContext(
                    commandLineArguments.TestSourceFilePath,
                    commandLineArguments.LineNumber,
                    commandLineArguments.TestAssemblyFilePath);
            }
        }
Exemple #2
0
        /// <summary>
        /// Program entry point.
        /// </summary>
        /// <param name="args">The args.</param>
        static void Main(string[] args)
        {
            Mutex mutex = null;

            try
            {
                Console.WriteLine("**** Starting ****");
                Console.WriteLine("  * Command line {0}", Environment.CommandLine);

                bool createdNew = false;
                mutex = new Mutex(false, "CodeCoverageUtil_Mutex", out createdNew);
                try
                {
                    Console.WriteLine("  * Waiting for any running CodeCoverageUtil instances to complete.");
                    mutex.WaitOne();
                    Console.WriteLine("  * No instances detected, starting now.");
                }
                catch (AbandonedMutexException)
                {
                }

                string currentDirectory      = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                string defaultConfigFilePath = Path.Combine(currentDirectory, DefaultConfigFileName);

                #region Process Command Line Arguments
                CommandLineArguments commandLineArgs = CommandLineArguments.Parse(args);
                if (commandLineArgs.ShowHelp)
                {
                    Console.WriteLine(CommandLineArguments.GetHelpMessage());
                    return;
                }

                if (!commandLineArgs.IsValid &&
                    !File.Exists(defaultConfigFilePath))
                {
                    ConsoleHelper.ConsoleWriteLine(ConsoleColor.Red, commandLineArgs.ErrorMessage);
                    Console.WriteLine();
                    Console.WriteLine(CommandLineArguments.GetHelpMessage());
                    return;
                }

                string configFile = commandLineArgs.ConfigFilePath;
                if (string.IsNullOrEmpty(configFile) &&
                    File.Exists(defaultConfigFilePath))
                {
                    configFile = defaultConfigFilePath;
                }
                #endregion

                #region Load Configuration
                CodeCoverageUtilConfiguration config = new CodeCoverageUtilConfiguration(configFile);
                SessionInfo sessionInfo = new SessionInfo(commandLineArgs, config);

                if (sessionInfo.CommandLineArguments.TestAssemblies.Count > 0)
                {
                    bool isValidTestAssembly = false;
                    foreach (TestAssemblyConfig testAssemblyConfig in sessionInfo.Configuration.TestAssembliesConfig)
                    {
                        string fileName = Path.GetFileName(testAssemblyConfig.AssemblyPath).ToUpper();

                        int count = (from fn in sessionInfo.CommandLineArguments.TestAssemblies
                                     where Path.GetFileName(fn).ToUpper() == fileName
                                     select fn).Count();
                        if (count != 0)
                        {
                            isValidTestAssembly = true;
                            break;
                        }
                    }
                    if (!isValidTestAssembly)
                    {
                        Console.WriteLine();
                        ConsoleHelper.ConsoleWriteLine(ConsoleColor.Red, "None of the specified assemblies are valid test assemblies, exiting.");
                        return;
                    }
                }

                if (sessionInfo.TestCodeContext != null &&
                    !sessionInfo.TestCodeContext.IsValid)
                {
                    Console.WriteLine();
                    ConsoleHelper.ConsoleWriteLine(ConsoleColor.Red, "The selected source line is invalid. Select either a namespace, class or method definition, exiting.");
                    return;
                }
                #endregion

                #region Create and Run Commands
                if (Directory.Exists(sessionInfo.ResultsDirectory))
                {
                    Directory.Delete(sessionInfo.ResultsDirectory, true);
                }

                ICommandExecutor commandExecutor        = CreateCommandExecutor(sessionInfo);
                List <Tuple <ICommand, string> > errors = commandExecutor.ExecuteCommands();
                bool succeeded = (errors.Count == 0);
                #endregion

                #region Write Summary Information
                ConsoleColor summaryColor = ConsoleColor.Green;
                if (!succeeded)
                {
                    summaryColor = ConsoleColor.Red;
                }
                Console.WriteLine();
                ConsoleHelper.ConsoleWriteLine(summaryColor, "**** Summary ****");
                if (!succeeded)
                {
                    ConsoleHelper.ConsoleWriteLine(summaryColor, " * Failed. The following errors occurred:");
                    foreach (Tuple <ICommand, string> error in errors)
                    {
                        ConsoleHelper.ConsoleWriteLine(summaryColor, "   * Command:{0}", error.Item1.Name);
                        ConsoleHelper.ConsoleWriteLine(summaryColor, "   * Error:{0}", error.Item2);
                        Console.WriteLine();
                    }
                }
                else
                {
                    if (config.KeepHistory)
                    {
                        string savedResultsDirectory = Path.Combine(config.ResultsPath, string.Format("{0}", DateTime.Now.ToString("yyyy-MM-dd HH_mm_ss")));
                        CopyDirectory(sessionInfo.ResultsDirectory, savedResultsDirectory);
                    }

                    ConsoleHelper.ConsoleWriteLine(summaryColor, " * Succeeded. Results written to directory: {0}", sessionInfo.ResultsDirectory);
                }

                if (commandLineArgs.ExploreToResultsFolder)
                {
                    if (File.Exists(sessionInfo.CoverageResultsFile))
                    {
                        Process.Start("explorer.exe", string.Format("/select,\"{0}\"", sessionInfo.CoverageResultsFile));
                    }
                    else
                    {
                        Process.Start("explorer.exe", string.Format("/root,\"{0}\"", sessionInfo.ResultsDirectory));
                    }
                }

                if (commandLineArgs.OpenCoverageHtmlReport)
                {
                    if (Directory.Exists(sessionInfo.CoverageReportDirectory))
                    {
                        Process.Start(Path.Combine(sessionInfo.CoverageReportDirectory, "index.htm"));
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                ConsoleHelper.ConsoleWriteLine(ConsoleColor.Red, "An unexpected exception occurred. Error {0}", ex.ToString());
            }
            finally
            {
                if (mutex != null)
                {
                    mutex.ReleaseMutex();
                    mutex.Dispose();
                }
            }
        }