< Summary

Information
Class: DirectSight.Reporting.Builders.JsonSummaryReportBuilder
Assembly DirectSight
File(s): /home/runner/work/DirectSight/DirectSight/DirectSight/Reporting/Builders/JsonSummaryReportBuilder.cs
Line coverage
90%
Covered lines: 121
Uncovered lines: 12
Coverable lines: 133
Total lines: 205
Line coverage: 90.9%
Branch coverage
68%
Covered branches: 33
Total branches: 48
Branch coverage: 68.7%
Method coverage

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
CreateClassReport(...)100%11100%
CreateSummaryReport(...)68.75%484890.69%

File(s)

/home/runner/work/DirectSight/DirectSight/DirectSight/Reporting/Builders/JsonSummaryReportBuilder.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.IO;
 4using System.Linq;
 5using System.Text;
 6using System.Text.Json;
 7using DirectSight.Logging;
 8using DirectSight.Parser.Analysis;
 9
 10namespace DirectSight.Reporting.Builders;
 11
 12/// <summary>
 13/// Creates summary report in JSON format (no reports for classes are generated).
 14/// </summary>
 15internal class JsonSummaryReportBuilder : IReportBuilder
 16{
 17    /// <summary>
 18    /// Gets the report type.
 19    /// </summary>
 20    /// <value>
 21    /// The report format.
 22    /// </value>
 123    public virtual string ReportType => "JsonSummary";
 24
 25    /// <summary>
 26    /// Gets or sets the report context.
 27    /// </summary>
 28    /// <value>
 29    /// The report context.
 30    /// </value>
 431    public ReportContext ReportContext { get; set; }
 32
 33    /// <summary>
 34    /// Creates a class report.
 35    /// </summary>
 36    /// <param name="class">The class.</param>
 37    /// <param name="fileAnalyses">The file analyses that correspond to the class.</param>
 38    public virtual void CreateClassReport(Class @class, IEnumerable<FileAnalysis> fileAnalyses)
 3639    {
 3640    }
 41
 42    /// <summary>
 43    /// Creates the summary report.
 44    /// </summary>
 45    /// <param name="summaryResult">The summary result.</param>
 46    public void CreateSummaryReport(SummaryResult summaryResult)
 247    {
 248        string targetDirectory = this.ReportContext.ReportConfiguration.TargetDirectory;
 49
 250        string targetPath = Path.Combine(targetDirectory, "Summary.json");
 51
 252        ConsoleLogger.Info("Writing report file '{0}'", targetPath);
 53
 254        using var reportTextWriter = new StreamWriter(
 255            new FileStream(targetPath, FileMode.Create),
 256            new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
 57
 258        var assembliesWithClasses = summaryResult.Assemblies
 259            .Where(a => a.Classes.Any())
 260            .ToArray();
 61
 262        reportTextWriter.WriteLine("{");
 263        reportTextWriter.WriteLine("  \"summary\": {");
 264        reportTextWriter.WriteLine($"    \"generatedon\": \"{DateTime.Now.ToUniversalTime():s}Z\",");
 265        reportTextWriter.WriteLine($"    \"parser\": \"{summaryResult.UsedParser}\",");
 266        reportTextWriter.WriteLine($"    \"assemblies\": {assembliesWithClasses.Length},");
 467        reportTextWriter.WriteLine($"    \"classes\": {assembliesWithClasses.SelectMany(a => a.Classes).Count()},");
 268        reportTextWriter.WriteLine($"    \"files\": {assembliesWithClasses
 269            .SelectMany(a => a.Classes)
 3670            .SelectMany(a => a.Files)
 271            .Distinct()
 272            .Count()},");
 273        reportTextWriter.WriteLine($"    \"coveredlines\": {summaryResult.CoveredLines},");
 274        reportTextWriter.WriteLine($"    \"uncoveredlines\": {(summaryResult.CoverableLines - summaryResult.CoveredLines
 275        reportTextWriter.WriteLine($"    \"coverablelines\": {summaryResult.CoverableLines},");
 276        reportTextWriter.WriteLine($"    \"totallines\": {summaryResult.TotalLines.GetValueOrDefault()},");
 77
 278        if (summaryResult.CoverageQuota.HasValue)
 279        {
 280            reportTextWriter.WriteLine($"    \"linecoverage\": {summaryResult.CoverageQuota.Value},");
 281        }
 82        else
 083        {
 084            reportTextWriter.WriteLine($"    \"linecoverage\": null,");
 085        }
 86
 287        if (summaryResult.CoveredBranches.HasValue && summaryResult.TotalBranches.HasValue)
 288        {
 289            reportTextWriter.WriteLine($"    \"coveredbranches\": {summaryResult.CoveredBranches.GetValueOrDefault()},")
 290            reportTextWriter.WriteLine($"    \"totalbranches\": {summaryResult.TotalBranches.GetValueOrDefault()},");
 91
 292            if (summaryResult.BranchCoverageQuota.HasValue)
 293            {
 294                reportTextWriter.WriteLine($"    \"branchcoverage\": {summaryResult.BranchCoverageQuota.Value},");
 295            }
 296        }
 97
 298        reportTextWriter.WriteLine($"    \"coveredmethods\": {summaryResult.CoveredCodeElements},");
 299        reportTextWriter.WriteLine($"    \"fullcoveredmethods\": {summaryResult.FullCoveredCodeElements},");
 2100        reportTextWriter.WriteLine($"    \"totalmethods\": {summaryResult.TotalCodeElements},");
 101
 2102        if (summaryResult.CodeElementCoverageQuota.HasValue)
 2103        {
 2104            reportTextWriter.WriteLine($"    \"methodcoverage\": {summaryResult.CodeElementCoverageQuota.Value},");
 2105        }
 106        else
 0107        {
 0108            reportTextWriter.WriteLine($"    \"methodcoverage\": null,");
 0109        }
 110
 2111        if (summaryResult.FullCodeElementCoverageQuota.HasValue)
 2112        {
 2113            reportTextWriter.WriteLine($"    \"fullmethodcoverage\": {summaryResult.FullCodeElementCoverageQuota.Value}"
 2114        }
 115        else
 0116        {
 0117            reportTextWriter.WriteLine($"    \"fullmethodcoverage\": null");
 0118        }
 119
 2120        reportTextWriter.WriteLine(" },");
 121
 2122        reportTextWriter.WriteLine("  \"coverage\": {");
 123
 2124        reportTextWriter.WriteLine("    \"assemblies\": [");
 125
 2126        int assemblyCounter = 0;
 127
 10128        foreach (var assembly in assembliesWithClasses)
 2129        {
 2130            if (assemblyCounter > 0)
 0131            {
 0132                reportTextWriter.WriteLine(",");
 0133            }
 134
 2135            reportTextWriter.WriteLine(
 2136                $"      {{" +
 2137                $"\"name\": {JsonSerializer.Serialize(assembly.Name)}, " +
 2138                $"\"classes\": {assembly.Classes.Count()}, " +
 2139                $"\"coverage\": {(assembly.CoverageQuota.HasValue ? assembly.CoverageQuota.Value.ToString() : "null")}, 
 2140                $"\"coveredlines\": {assembly.CoveredLines}, " +
 2141                $"\"coverablelines\": {assembly.CoverableLines}, " +
 2142                $"\"totallines\": {(assembly.TotalLines.HasValue ? assembly.TotalLines.Value.ToString() : "null")}, " +
 2143                $"\"branchcoverage\": {(assembly.BranchCoverageQuota.HasValue ? assembly.BranchCoverageQuota.Value.ToStr
 2144                $"\"coveredbranches\": {(assembly.CoveredBranches.HasValue ? assembly.CoveredBranches.Value.ToString() :
 2145                $"\"totalbranches\": {(assembly.TotalBranches.HasValue ? assembly.TotalBranches.Value.ToString() : null)
 2146                $"\"methodcoverage\": {(
 2147                    assembly.CodeElementCoverageQuota.HasValue
 2148                    ? assembly.CodeElementCoverageQuota.Value.ToString()
 2149                    : "null")}, " +
 2150                $"\"fullmethodcoverage\": {(
 2151                    assembly.FullCodeElementCoverageQuota.HasValue
 2152                    ? assembly.FullCodeElementCoverageQuota.Value.ToString()
 2153                    : "null")}, " +
 2154                $"\"coveredmethods\": {assembly.CoveredCodeElements}, " +
 2155                $"\"fullcoveredmethods\": {assembly.FullCoveredCodeElements}, " +
 2156                $"\"totalmethods\": {assembly.TotalCodeElements}, " +
 2157                $"\"classesinassembly\": [");
 158
 2159            int classCounter = 0;
 160
 78161            foreach (var @class in assembly.Classes)
 36162            {
 36163                if (classCounter > 0)
 34164                {
 34165                    reportTextWriter.WriteLine(",");
 34166                }
 167
 36168                reportTextWriter.Write(
 36169                    $"        {{ " +
 36170                    $"\"name\": {JsonSerializer.Serialize(@class.Name)}, " +
 36171                    $"\"coverage\": {(@class.CoverageQuota.HasValue ? @class.CoverageQuota.Value.ToString() : "null")}, 
 36172                    $"\"coveredlines\": {@class.CoveredLines}, " +
 36173                    $"\"coverablelines\": {@class.CoverableLines}, " +
 36174                    $"\"totallines\": {(@class.TotalLines.HasValue ? @class.TotalLines.Value.ToString() : "null")}, " +
 36175                    $"\"branchcoverage\": {(@class.BranchCoverageQuota.HasValue ? @class.BranchCoverageQuota.Value.ToStr
 36176                    $"\"coveredbranches\": {(@class.CoveredBranches.HasValue ? @class.CoveredBranches.Value.ToString() :
 36177                    $"\"totalbranches\": {(@class.TotalBranches.HasValue ? @class.TotalBranches.Value.ToString() : null)
 36178                    $"\"methodcoverage\": {(
 36179                        @class.CodeElementCoverageQuota.HasValue
 36180                        ? @class.CodeElementCoverageQuota.Value.ToString()
 36181                        : "null")}, " +
 36182                    $"\"fullmethodcoverage\": {(
 36183                        @class.FullCodeElementCoverageQuota.HasValue
 36184                        ? @class.FullCodeElementCoverageQuota.Value.ToString()
 36185                        : "null")}, " +
 36186                    $"\"coveredmethods\": {@class.CoveredCodeElements}, " +
 36187                    $"\"fullcoveredmethods\": {@class.FullCoveredCodeElements}, " +
 36188                    $"\"totalmethods\": {@class.TotalCodeElements} }}");
 189
 36190                classCounter++;
 36191            }
 192
 2193            reportTextWriter.Write(" ] }");
 194
 2195            assemblyCounter++;
 2196        }
 197
 2198        reportTextWriter.WriteLine(" ]");
 199
 2200        reportTextWriter.WriteLine("  }");
 2201        reportTextWriter.Write("}");
 202
 2203        reportTextWriter.Flush();
 4204    }
 205}