/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public virtual void CreateSummaryReport(IReportRenderer reportRenderer, SummaryResult summaryResult) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } reportRenderer.BeginSummaryReport(this.ReportConfiguration.TargetDirectory, null, ReportResources.Summary); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportRenderer.KeyValueRow(ReportResources.Parser, summaryResult.UsedParser); reportRenderer.KeyValueRow(ReportResources.Assemblies2, summaryResult.Assemblies.Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Classes, summaryResult.Assemblies.SelectMany(a => a.Classes).Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Files2, summaryResult.Assemblies.SelectMany(a => a.Classes).SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (summaryResult.CoverableLines - summaryResult.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, summaryResult.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, summaryResult.CoverageQuota.HasValue ? summaryResult.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); decimal?branchCoverage = summaryResult.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } if (this.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportConfiguration.Tag); } reportRenderer.FinishTable(); var historicCoverages = this.GetOverallHistoricCoverages(this.ReportConfiguration.OverallHistoricCoverages); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(historicCoverages); } var summableMetrics = summaryResult.Assemblies .SelectMany(a => a.Classes) .SelectMany(c => c.MethodMetrics) .SelectMany(m => m.Metrics) .Where(m => m.MetricType == MetricType.CoverageAbsolute) .GroupBy(m => m.Name) .Select(g => new Metric(g.Key, g.First().ExplanationUrl, MetricType.CoverageAbsolute, g.Sum(m => m.Value))) .ToArray(); if (summableMetrics.Length > 0) { reportRenderer.Header(ReportResources.Metrics); var methodMetric = new MethodMetric(ReportResources.Total, summableMetrics); reportRenderer.BeginMetricsTable(methodMetric); reportRenderer.MetricsRow(methodMetric); reportRenderer.FinishTable(); } var hotspots = RiskHotspotsAnalysis.DetectHotspotsByMetricName(summaryResult.Assemblies); if (hotspots.Any()) { reportRenderer.Header(ReportResources.RiskHotspots); reportRenderer.RiskHotspots(hotspots); } reportRenderer.Header(ReportResources.Coverage3); if (summaryResult.Assemblies.Any()) { reportRenderer.BeginSummaryTable(summaryResult.SupportsBranchCoverage); foreach (var assembly in summaryResult.Assemblies) { reportRenderer.SummaryAssembly(assembly, summaryResult.SupportsBranchCoverage); foreach (var @class in assembly.Classes) { reportRenderer.SummaryClass(@class, summaryResult.SupportsBranchCoverage); } } reportRenderer.FinishTable(); } else { reportRenderer.Paragraph(ReportResources.NoCoveredAssemblies); } reportRenderer.CustomSummary(summaryResult.Assemblies, hotspots, summaryResult.SupportsBranchCoverage); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.ReportConfiguration.TargetDirectory); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public virtual void CreateSummaryReport(IReportRenderer reportRenderer, SummaryResult summaryResult) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } reportRenderer.BeginSummaryReport(this.ReportContext.ReportConfiguration.TargetDirectory, null, ReportResources.Summary); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportRenderer.KeyValueRow(ReportResources.Parser, summaryResult.UsedParser); reportRenderer.KeyValueRow(ReportResources.Assemblies2, summaryResult.Assemblies.Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Classes, summaryResult.Assemblies.SelectMany(a => a.Classes).Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Files2, summaryResult.Assemblies.SelectMany(a => a.Classes).SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (summaryResult.CoverableLines - summaryResult.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, summaryResult.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, summaryResult.CoverageQuota.HasValue ? $"{summaryResult.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture)}% ({summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)} {ReportResources.Of} {summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)})" : string.Empty); if (summaryResult.CoveredBranches.HasValue && summaryResult.TotalBranches.HasValue) { reportRenderer.KeyValueRow(ReportResources.CoveredBranches2, summaryResult.CoveredBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalBranches, summaryResult.TotalBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); decimal?branchCoverage = summaryResult.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, $"{branchCoverage.Value.ToString(CultureInfo.InvariantCulture)}% ({summaryResult.CoveredBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)} {ReportResources.Of} {summaryResult.TotalBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)})"); } } if (this.ReportContext.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportContext.ReportConfiguration.Tag); } reportRenderer.FinishTable(); if (reportRenderer.SupportsCharts) { var historicCoverages = this.GetOverallHistoricCoverages(this.ReportContext.OverallHistoricCoverages); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(historicCoverages, this.ReportContext.Settings.RenderPngFallBackImagesForHistoryCharts); } } var summableMetrics = summaryResult.Assemblies .SelectMany(a => a.Classes) .SelectMany(c => c.Files) .SelectMany(f => f.MethodMetrics) .SelectMany(m => m.Metrics) .Where(m => m.MetricType == MetricType.CoverageAbsolute) .GroupBy(m => m.Name) .Select(g => new Metric(g.Key, g.First().ExplanationUrl, MetricType.CoverageAbsolute, g.Sum(m => m.Value))) .ToArray(); if (summableMetrics.Length > 0) { reportRenderer.Header(ReportResources.Metrics); var methodMetric = new MethodMetric(ReportResources.Total, ReportResources.Total, summableMetrics); reportRenderer.MetricsTable(new[] { methodMetric }); } if (this.ReportContext.RiskHotspotAnalysisResult != null && reportRenderer.SupportsRiskHotsSpots && this.ReportContext.RiskHotspotAnalysisResult.CodeCodeQualityMetricsAvailable) { reportRenderer.Header(ReportResources.RiskHotspots); if (this.ReportContext.RiskHotspotAnalysisResult.RiskHotspots.Count > 0) { reportRenderer.BeginRiskHotspots(); reportRenderer.RiskHotspots(this.ReportContext.RiskHotspotAnalysisResult.RiskHotspots); reportRenderer.FinishRiskHotspots(); } else { // Angular element has to be present reportRenderer.BeginRiskHotspots(); reportRenderer.FinishRiskHotspots(); reportRenderer.Paragraph(ReportResources.NoRiskHotspots); } } else { // Angular element has to be present reportRenderer.BeginRiskHotspots(); reportRenderer.FinishRiskHotspots(); } reportRenderer.Header(ReportResources.Coverage3); if (summaryResult.Assemblies.Any()) { reportRenderer.BeginSummaryTable(); reportRenderer.BeginSummaryTable(summaryResult.SupportsBranchCoverage); foreach (var assembly in summaryResult.Assemblies) { reportRenderer.SummaryAssembly(assembly, summaryResult.SupportsBranchCoverage); foreach (var @class in assembly.Classes) { reportRenderer.SummaryClass(@class, summaryResult.SupportsBranchCoverage); } } reportRenderer.FinishTable(); reportRenderer.FinishSummaryTable(); } else { // Angular element has to be present reportRenderer.BeginSummaryTable(); reportRenderer.FinishSummaryTable(); reportRenderer.Paragraph(ReportResources.NoCoveredAssemblies); } reportRenderer.CustomSummary(summaryResult.Assemblies, this.ReportContext.RiskHotspotAnalysisResult.RiskHotspots, summaryResult.SupportsBranchCoverage); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.ReportContext.ReportConfiguration.TargetDirectory); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public virtual void CreateSummaryReport(IReportRenderer reportRenderer, SummaryResult summaryResult) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } reportRenderer.BeginSummaryReport(this.ReportConfiguration.TargetDirectory, null, ReportResources.Summary); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportRenderer.KeyValueRow(ReportResources.Parser, summaryResult.UsedParser); reportRenderer.KeyValueRow(ReportResources.Assemblies2, summaryResult.Assemblies.Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Classes, summaryResult.Assemblies.SelectMany(a => a.Classes).Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Files2, summaryResult.Assemblies.SelectMany(a => a.Classes).SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (summaryResult.CoverableLines - summaryResult.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, summaryResult.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, summaryResult.CoverageQuota.HasValue ? summaryResult.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); decimal?branchCoverage = summaryResult.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } if (this.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportConfiguration.Tag); } reportRenderer.FinishTable(); var historicCoverages = this.GetOverallHistoricCoverages(summaryResult.Assemblies.SelectMany(a => a.Classes)); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(historicCoverages); } reportRenderer.Header(ReportResources.Assemblies); if (summaryResult.Assemblies.Any()) { reportRenderer.BeginSummaryTable(summaryResult.SupportsBranchCoverage); foreach (var assembly in summaryResult.Assemblies) { reportRenderer.SummaryAssembly(assembly, summaryResult.SupportsBranchCoverage); foreach (var @class in assembly.Classes) { reportRenderer.SummaryClass(@class, summaryResult.SupportsBranchCoverage); } } reportRenderer.FinishTable(); } else { reportRenderer.Paragraph(ReportResources.NoCoveredAssemblies); } reportRenderer.CustomSummary(summaryResult.Assemblies, summaryResult.SupportsBranchCoverage); var canRenderRiskHotspots = reportRenderer.RiskHotspots(); if (canRenderRiskHotspots) { reportRenderer.Header(ReportResources.RiskHotspots); reportRenderer.RiskHotspots(summaryResult.Assemblies, summaryResult.SupportsBranchCoverage); } reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.ReportConfiguration.TargetDirectory); }