/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public override void CreateSummaryReport(SummaryResult summaryResult) { using (var renderer = new HtmlRenderer(true)) { this.CreateSummaryReport(renderer, summaryResult); } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public override void CreateSummaryReport(SummaryResult summaryResult) { using (var renderer = new HtmlRenderer(false, this.javaScriptContent)) { this.CreateSummaryReport(renderer, summaryResult); } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public void CreateSummaryReport(SummaryResult summaryResult) { if (summaryResult == null) { throw new ArgumentNullException("summaryResult"); } string targetPath = Path.Combine(this.TargetDirectory, "Summary.txt"); using (var reportTextWriter = new StreamWriter(new FileStream(targetPath, FileMode.Create), Encoding.UTF8)) { reportTextWriter.WriteLine(ReportResources.Summary); reportTextWriter.WriteLine(" {0} {1}", ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportTextWriter.WriteLine(" {0} {1}", ReportResources.Parser, summaryResult.UsedParser); reportTextWriter.WriteLine(" {0} {1}", ReportResources.Assemblies2, summaryResult.Assemblies.Count().ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.Classes, summaryResult.Assemblies.SelectMany(a => a.Classes).Count().ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.Files2, summaryResult.Assemblies.SelectMany(a => a.Classes).SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.Coverage2, summaryResult.CoverageQuota.HasValue ? summaryResult.CoverageQuota.Value.ToString("f1", CultureInfo.InvariantCulture) + "%" : string.Empty); reportTextWriter.WriteLine(" {0} {1}", ReportResources.CoveredLines, summaryResult.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.UncoveredLines, (summaryResult.CoverableLines - summaryResult.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.CoverableLines, summaryResult.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportTextWriter.WriteLine(" {0} {1}", ReportResources.TotalLines, summaryResult.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); if (summaryResult.Assemblies.Any()) { var maximumNameLength = summaryResult.Assemblies .SelectMany(a => a.Classes).Select(c => c.Name) .Union(summaryResult.Assemblies.Select(a => a.Name)) .Max(n => n.Length); foreach (var assembly in summaryResult.Assemblies) { string assemblyQuota = assembly.CoverageQuota.HasValue ? assembly.CoverageQuota.Value.ToString("f1", CultureInfo.InvariantCulture) + "%" : string.Empty; reportTextWriter.WriteLine(); reportTextWriter.WriteLine( "{0}{1} {2}", assembly.Name, new string(' ', maximumNameLength - assembly.Name.Length + 8 - assemblyQuota.Length), assemblyQuota); foreach (var @class in assembly.Classes) { string classQuota = @class.CoverageQuota.HasValue ? @class.CoverageQuota.Value.ToString("f1", CultureInfo.InvariantCulture) + "%" : string.Empty; reportTextWriter.WriteLine( " {0}{1} {2}", @class.Name, new string(' ', maximumNameLength - @class.Name.Length + 6 - classQuota.Length), classQuota); } } } else { reportTextWriter.WriteLine(ReportResources.NoCoveredAssemblies); } reportTextWriter.Flush(); } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public void CreateSummaryReport(SummaryResult summaryResult) { }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public override void CreateSummaryReport(SummaryResult summaryResult) { this.CreateSummaryReport(new XmlRenderer(), summaryResult); }
/// <summary> /// Renderes the SVG. /// </summary> /// <param name="summaryResult">Indicates whether </param> /// <param name="includeLineCoverage">Indicates whether line coverage should be included.</param> /// <param name="includeBranchCoverage">Indicates whether branch coverage should be included.</param> /// <returns>The rendered SVG.</returns> private string CreateBadge(SummaryResult summaryResult, bool includeLineCoverage, bool includeBranchCoverage) { string lineCoverageClass = includeLineCoverage && includeBranchCoverage ? "linecoverage" : string.Empty; string branchCoverageClass = includeLineCoverage && includeBranchCoverage ? "branchcoverage" : string.Empty; return string.Format( Template, ReportResources.CodeCoverage, includeLineCoverage ? string.Format(LineCoverageSymbol, lineCoverageClass) : string.Empty, includeBranchCoverage ? string.Format(BranchCoverageSymbol, branchCoverageClass) : string.Empty, string.Format("{0} {1} {2}", ReportResources.GeneratedBy, typeof(IReportBuilder).Assembly.GetName().Name, typeof(IReportBuilder).Assembly.GetName().Version), ReportResources.Coverage3, includeLineCoverage ? string.Format(CoverageText, lineCoverageClass, summaryResult.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture)) : string.Empty, includeBranchCoverage ? string.Format(CoverageText, branchCoverageClass, summaryResult.BranchCoverageQuota.Value.ToString(CultureInfo.InvariantCulture)) : string.Empty, includeLineCoverage ? string.Format(CoverageTooltip, lineCoverageClass, ReportResources.Coverage) : string.Empty, includeBranchCoverage ? string.Format(CoverageTooltip, branchCoverageClass, ReportResources.BranchCoverage) : string.Empty); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public void CreateSummaryReport(SummaryResult summaryResult) { if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } if (summaryResult.CoverageQuota.HasValue) { File.WriteAllText (Path.Combine(this.TargetDirectory, "badge_linecoverage.svg"), this.CreateBadge(summaryResult, true, false)); } if (summaryResult.BranchCoverageQuota.HasValue) { File.WriteAllText (Path.Combine(this.TargetDirectory, "badge_branchcoverage.svg"), this.CreateBadge(summaryResult, false, true)); } if (summaryResult.CoverageQuota.HasValue && summaryResult.BranchCoverageQuota.HasValue) { File.WriteAllText (Path.Combine(this.TargetDirectory, "badge_combined.svg"), this.CreateBadge(summaryResult, true, true)); } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public void CreateSummaryReport(Palmmedia.ReportGenerator.Parser.Analysis.SummaryResult summaryResult) { var historicCoverages = this.GetOverallHistoricCoverages(this.ReportConfiguration.OverallHistoricCoverages); historicCoverages = this.FilterHistoricCoverages(historicCoverages, 100); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { Chart chart = new Chart() { Size = new Size(900, 300), }; chart.ChartAreas.Add("Default"); chart.ChartAreas[0].AxisX.LineColor = Color.LightGray; chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = Color.LightGray; chart.ChartAreas[0].AxisX.MajorTickMark.TickMarkStyle = TickMarkStyle.None; chart.ChartAreas[0].AxisX.MajorTickMark.Enabled = false; chart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; chart.ChartAreas[0].AxisX.LabelStyle.Enabled = false; chart.ChartAreas[0].AxisY.LineColor = Color.LightGray; chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = Color.LightGray; chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray; chart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash; chart.ChartAreas[0].AxisY.Minimum = 0; chart.ChartAreas[0].AxisY.Maximum = 100; chart.Legends.Add(new Legend("Default") { Docking = Docking.Bottom, Alignment = StringAlignment.Center, BorderWidth = 1, BorderColor = Color.LightGray }); chart.Series.Add(ReportResources.Coverage2); chart.Series[ReportResources.Coverage2].ChartType = SeriesChartType.Line; chart.Series[ReportResources.Coverage2].Color = Color.Red; chart.Series[ReportResources.Coverage2].MarkerSize = 5; chart.Series[ReportResources.Coverage2].MarkerColor = Color.Red; chart.Series[ReportResources.Coverage2].MarkerStyle = MarkerStyle.Circle; if (historicCoverages.Any(h => h.BranchCoverageQuota.HasValue)) { chart.Series.Add(ReportResources.BranchCoverage2); chart.Series[ReportResources.BranchCoverage2].ChartType = SeriesChartType.Line; chart.Series[ReportResources.BranchCoverage2].Color = Color.Blue; chart.Series[ReportResources.BranchCoverage2].MarkerSize = 5; chart.Series[ReportResources.BranchCoverage2].MarkerColor = Color.Blue; chart.Series[ReportResources.BranchCoverage2].MarkerStyle = MarkerStyle.Circle; } int counter = 0; foreach (var historicCoverage in historicCoverages) { chart.Series[ReportResources.Coverage2].Points.AddXY(counter, historicCoverage.CoverageQuota.GetValueOrDefault()); if (historicCoverages.Any(h => h.BranchCoverageQuota.HasValue)) { chart.Series[ReportResources.BranchCoverage2].Points.AddXY(counter, historicCoverage.BranchCoverageQuota.GetValueOrDefault()); } counter++; } chart.SaveImage(Path.Combine(this.ReportConfiguration.TargetDirectory, "CoverageHistory.png"), ChartImageFormat.Png); } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public abstract void CreateSummaryReport(SummaryResult summaryResult);
/// <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.TargetDirectory, 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) + "%"); } 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(); foreach (var assembly in summaryResult.Assemblies) { reportRenderer.SummaryAssembly(assembly); foreach (var @class in assembly.Classes) { reportRenderer.SummaryClass(@class); } } reportRenderer.FinishTable(); } else { reportRenderer.Paragraph(ReportResources.NoCoveredAssemblies); } reportRenderer.CustomSummary(summaryResult.Assemblies); reportRenderer.SaveSummaryReport(this.TargetDirectory); }
/// <summary> /// Starts the generation of the report. /// </summary> /// <param name="addHistoricCoverage">if set to <c>true</c> historic coverage information is added to classes.</param> /// <param name="executionTime">The execution time.</param> internal void CreateReport(bool addHistoricCoverage, DateTime executionTime) { var filteredAssemblies = this.parser.Assemblies .Where(a => this.assemblyFilter.IsAssemblyIncludedInReport(a.Name)); int numberOfClasses = filteredAssemblies.Sum(a => a.Classes.Count()); Logger.InfoFormat(Resources.AnalyzingClasses, numberOfClasses); int counter = 0; foreach (var assembly in filteredAssemblies) { foreach (var @class in assembly.Classes) { counter++; Logger.DebugFormat( CultureInfo.InvariantCulture, " " + Resources.CreatingReport, counter, numberOfClasses, @class.Assembly.ShortName, @class.Name); foreach (var renderer in this.renderers) { var fileAnalyses = @class.Files.Select(f => f.AnalyzeFile()).ToArray(); try { if (addHistoricCoverage) { @class.AddHistoricCoverage(new HistoricCoverage(@class, executionTime)); } renderer.CreateClassReport(@class, fileAnalyses); } catch (Exception ex) { Logger.ErrorFormat( CultureInfo.InvariantCulture, " " + Resources.ErrorDuringRenderingClassReport, @class.Name, renderer.ReportType, ex.Message); } } } } Logger.Debug(" " + Resources.CreatingSummary); SummaryResult summaryResult = new SummaryResult(filteredAssemblies, this.parser.ToString()); foreach (var renderer in this.renderers) { try { renderer.CreateSummaryReport(summaryResult); } catch (Exception ex) { Logger.ErrorFormat( CultureInfo.InvariantCulture, " " + Resources.ErrorDuringRenderingSummaryReport, renderer.ReportType, ex.Message); } } }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="summaryResult">The summary result.</param> public override void CreateSummaryReport(SummaryResult summaryResult) { this.CreateSummaryReport(this.renderer, summaryResult); }