< Summary

Information
Class: DirectSight.Reporting.ReportGenerator
Assembly DirectSight
File(s): /home/runner/work/DirectSight/DirectSight/DirectSight/Reporting/ReportGenerator.cs
Line coverage
68%
Covered lines: 42
Uncovered lines: 19
Coverable lines: 61
Total lines: 116
Line coverage: 68.8%
Branch coverage
64%
Covered branches: 9
Total branches: 14
Branch coverage: 64.2%
Method coverage

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)50%66100%
CreateReport(...)75%8865.45%

File(s)

/home/runner/work/DirectSight/DirectSight/DirectSight/Reporting/ReportGenerator.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading.Tasks;
 5using DirectSight.Common;
 6using DirectSight.Logging;
 7using DirectSight.Parser;
 8using DirectSight.Parser.Analysis;
 9using DirectSight.Parser.FileReading;
 10
 11namespace DirectSight.Reporting;
 12
 13/// <summary>
 14/// Converts a coverage report generated by OpenCoverand other tools into a readable report.
 15/// </summary>
 16internal class ReportGenerator
 17{
 18    /// <summary>
 19    /// The file reader to use.
 20    /// </summary>
 21    private readonly IFileReader fileReader;
 22
 23    /// <summary>
 24    /// The parser to use.
 25    /// </summary>
 26    private readonly ParserResult parserResult;
 27
 28    /// <summary>
 29    /// The renderers.
 30    /// </summary>
 31    private readonly IEnumerable<IReportBuilder> renderers;
 32
 33    /// <summary>
 34    /// Initializes a new instance of the <see cref="ReportGenerator" /> class.
 35    /// </summary>
 36    /// <param name="fileReader">The file reader.</param>
 37    /// <param name="parserResult">The parser result to use.</param>
 38    /// <param name="renderers">The renderers.</param>
 239    internal ReportGenerator(IFileReader fileReader, ParserResult parserResult, IEnumerable<IReportBuilder> renderers)
 240    {
 241        this.fileReader = fileReader ?? throw new ArgumentNullException(nameof(fileReader));
 242        this.parserResult = parserResult ?? throw new ArgumentNullException(nameof(parserResult));
 243        this.renderers = renderers ?? throw new ArgumentNullException(nameof(renderers));
 244    }
 45
 46    /// <summary>
 47    /// Starts the generation of the report.
 48    /// </summary>
 49    /// <param name="executionTime">The execution time.</param>
 50    internal void CreateReport(DateTime executionTime)
 251    {
 452        int numberOfClasses = this.parserResult.Assemblies.SafeSum(a => a.Classes.Count());
 53
 254        ConsoleLogger.Debug("Analyzing {0} classes", numberOfClasses);
 55
 256        int counter = 0;
 57
 1058        foreach (var assembly in this.parserResult.Assemblies)
 259        {
 7860            foreach (var @class in assembly.Classes)
 3661            {
 3662                counter++;
 63
 3664                ConsoleLogger.Debug(
 3665                    "Creating report {0}/{1} (Assembly: {2}, Class: {3})",
 3666                    counter,
 3667                    numberOfClasses,
 3668                    @class.Assembly.ShortName,
 3669                    @class.Name);
 70
 7271                var fileAnalyses = @class.Files.Select(f => f.AnalyzeFile(this.fileReader)).ToArray();
 72
 3673                Parallel.ForEach(
 3674                    this.renderers,
 3675                    renderer =>
 7276                    {
 3677                        try
 7278                        {
 7279                            renderer.CreateClassReport(@class, fileAnalyses);
 7280                        }
 081                        catch (Exception ex)
 082                        {
 083                            ConsoleLogger.Error(
 084                                "Error during rendering report for class '{0}' (Report type: '{1}'): {2}",
 085                                @class.Name,
 086                                renderer.ReportType,
 087                                ex.GetExceptionMessageForDisplay());
 088                        }
 10889                    });
 3690            }
 291        }
 92
 293        ConsoleLogger.Debug("Creating summary");
 294        var summaryResult = new SummaryResult(this.parserResult);
 95
 1496        foreach (var renderer in this.renderers)
 497        {
 98            try
 499            {
 4100                renderer.CreateSummaryReport(summaryResult);
 4101            }
 0102            catch (Exception ex)
 0103            {
 0104                ConsoleLogger.Error(
 0105                    "Error during rendering summary report (Report type: '{0}'): {1}",
 0106                    renderer.ReportType,
 0107                    ex.GetExceptionMessageForDisplay());
 108
 0109                if (ConsoleLogger.ShowDebugMessages == true)
 0110                {
 0111                    ConsoleLogger.Error(ex.StackTrace);
 0112                }
 0113            }
 4114        }
 2115    }
 116}