< Summary

Information
Class: DirectSight.Generator
Assembly DirectSight
File(s): /home/runner/work/DirectSight/DirectSight/DirectSight/Generator.cs
Line coverage
77%
Covered lines: 35
Uncovered lines: 10
Coverable lines: 45
Total lines: 98
Line coverage: 77.7%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
GenerateReport(...)50%4464.28%
GenerateReport(...)100%11100%

File(s)

/home/runner/work/DirectSight/DirectSight/DirectSight/Generator.cs

#LineLine coverage
 1using System;
 2using System.Diagnostics;
 3using System.IO;
 4using DirectSight.CodeAnalysis;
 5using DirectSight.Common;
 6using DirectSight.Logging;
 7using DirectSight.Parser;
 8using DirectSight.Parser.FileReading;
 9using DirectSight.Reporting;
 10
 11namespace DirectSight;
 12
 13/// <summary>
 14/// The report generator implementation.
 15/// </summary>
 16public class Generator
 17{
 18    /// <summary>
 19    /// Generates a report using given configuration.
 20    /// </summary>
 21    /// <param name="reportConfiguration">The report configuration.</param>
 22    /// <returns><c>true</c> if report was generated successfully; otherwise <c>false</c>.</returns>
 23    public static bool GenerateReport(ReportConfiguration reportConfiguration)
 224    {
 25        try
 226        {
 227            ArgumentNullException.ThrowIfNull(reportConfiguration);
 28
 29            // Set log level before validation is performed
 230            if (reportConfiguration.DebugMode == true)
 031            {
 032                ConsoleLogger.ShowDebugMessages = true;
 033            }
 34
 235            ConsoleLogger.Debug($"Executable: {AppContext.BaseDirectory}");
 236            ConsoleLogger.Debug($"Working Directory: {Directory.GetCurrentDirectory()}");
 37
 238            if (!ReportConfigurationValidator.Validate(reportConfiguration))
 039            {
 040                return false;
 41            }
 42
 243            var stopWatch = Stopwatch.StartNew();
 44
 245            var parserResult = new CoverageReportParser()
 246                    .ParseFiles(reportConfiguration.ReportFiles);
 47
 248            ConsoleLogger.Debug("Report parsing took {0:f1} seconds", stopWatch.ElapsedMilliseconds / 1000d);
 49
 250            GenerateReport(
 251                reportConfiguration,
 252                parserResult);
 53
 254            stopWatch.Stop();
 255            ConsoleLogger.Info("Report generation took {0:f1} seconds", stopWatch.ElapsedMilliseconds / 1000d);
 56
 257            return true;
 58        }
 059        catch (Exception ex)
 060        {
 061            ConsoleLogger.Error(ex.GetExceptionMessageForDisplay());
 062            ConsoleLogger.Error(ex.StackTrace);
 63
 064            return false;
 65        }
 266    }
 67
 68    /// <summary>
 69    /// Executes the report generation.
 70    /// </summary>
 71    /// <param name="reportConfiguration">The report configuration.</param>
 72    /// <param name="parserResult">The parser result generated by <see cref="CoverageReportParser"/>.</param>
 73    public static void GenerateReport(
 74        ReportConfiguration reportConfiguration,
 75        ParserResult parserResult)
 276    {
 277        ArgumentNullException.ThrowIfNull(reportConfiguration);
 278        ArgumentNullException.ThrowIfNull(parserResult);
 79
 280        MathExtensions.MaximumDecimalPlaces = 1;
 81
 282        var reportContext = new ReportContext(reportConfiguration)
 283        {
 284            RiskHotspotAnalysisResult = new RiskHotspotsAnalyzer()
 285                .PerformRiskHotspotAnalysis(parserResult.Assemblies)
 286        };
 87
 288        DateTime executionTime = DateTime.Now;
 89
 290        var fileReader = new LocalFileReader();
 91
 292        new ReportGenerator(
 293            fileReader,
 294            parserResult,
 295            ReportBuilderFactory.GetReportBuilders(reportContext))
 296                .CreateReport(executionTime);
 297    }
 98}