private void CreateReportRendererIfItIsNull() { if (_reportRenderer == null) { _reportRenderer = ReportRendererContainer.Create(); } }
/// <summary> /// Adds new excel sheet. /// </summary> /// <param name="reportRenderer">Report renderer.</param> /// <param name="reportRows">Report rows.</param> /// <param name="fillCellReferences">Fill cell references after sheet builded.</param> /// <returns>Builder instance.</returns> public ExcelReportBuilder AddReportSheet( IReportRenderer reportRenderer, IEnumerable <IPropertyContainer> reportRows, bool fillCellReferences = true) { reportRenderer.AssertArgumentNotNull(nameof(reportRenderer)); reportRows.AssertArgumentNotNull(nameof(reportRows)); var sheetMetadata = reportRenderer.GetMetadata <ExcelSheetMetadata>() ?? _defaultSheetMetadata; // Add a WorksheetPart to the WorkbookPart. WorkbookPart workbookPart = _documentContext.Document.WorkbookPart; uint sheetCount = workbookPart.GetSheetCount(); WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>($"sheet{sheetCount+1}"); var sheetContext = new SheetContext(_documentContext, worksheetPart, sheetMetadata, reportRenderer); AddSheet(sheetContext); AddSheetData(sheetContext, reportRows); if (fillCellReferences) { sheetContext.SheetElement.FillCellReferences(forceFill: fillCellReferences); } // External customization var configureSheet = ExcelSheetMetadata.ConfigureSheet.GetFirstDefinedValue( sheetContext.SheetMetadata, _documentMetadata); configureSheet?.Invoke(sheetContext); return(this); }
/// <summary> /// Renders a report to a stream. /// </summary> /// <param name="renderer">The renderer for the report</param> /// <param name="stream">The stream to render to.</param> public void RenderToStream(IReportRenderer renderer, Stream stream) { renderer.BeforeRendering(); this.Visit(renderer); renderer.AfterRendering(); renderer.Save(stream); }
/// <summary> /// Creates the renderer for the class report. /// </summary> /// <returns>The renderer for the class report.</returns> public IReportRenderer CreateClassRenderer() { var renderers = new List <IReportRenderer>(); if (this.reportType.HasFlag(ReportTypes.Html)) { renderers.Add(new HtmlRenderer(false)); } if (this.reportType.HasFlag(ReportTypes.Xml)) { renderers.Add(new XmlRenderer()); } if (this.reportType.HasFlag(ReportTypes.Latex)) { if (this.cachedRenderer == null) { this.cachedRenderer = new LatexRenderer(); } renderers.Add(this.cachedRenderer); } return(new MultiRenderer(renderers)); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public override 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, "CoverageHistory.htm", ReportResources.Summary); var historicCoverages = this.GetOverallHistoricCoverages(summaryResult.Assemblies.SelectMany(a => a.Classes)); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Chart(historicCoverages); } reportRenderer.CustomSummary(summaryResult.Assemblies, summaryResult.SupportsBranchCoverage); reportRenderer.SaveSummaryReport(this.TargetDirectory); }
/// <summary> /// Creates the renderer for the class report. /// </summary> /// <returns>The renderer for the class report.</returns> public IReportRenderer CreateClassRenderer() { var renderers = new List<IReportRenderer>(); if (this.reportType.HasFlag(ReportTypes.Html)) { renderers.Add(new HtmlRenderer(false)); } if (this.reportType.HasFlag(ReportTypes.Xml)) { renderers.Add(new XmlRenderer()); } if (this.reportType.HasFlag(ReportTypes.Latex)) { if (this.cachedRenderer == null) { this.cachedRenderer = new LatexRenderer(); } renderers.Add(this.cachedRenderer); } return new MultiRenderer(renderers); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public override 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, "CoverageHistory.html", ReportResources.Summary); var historicCoverages = this.GetOverallHistoricCoverages(this.ReportContext.OverallHistoricCoverages); if (historicCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Chart(historicCoverages, this.ReportContext.Settings.RenderPngFallBackImagesForHistoryCharts); } reportRenderer.CustomSummary(summaryResult.Assemblies, new List <RiskHotspot>(), summaryResult.SupportsBranchCoverage); reportRenderer.SaveSummaryReport(this.ReportContext.ReportConfiguration.TargetDirectory); File.Copy( Path.Combine(this.ReportContext.ReportConfiguration.TargetDirectory, "CoverageHistory.html"), Path.Combine(this.ReportContext.ReportConfiguration.TargetDirectory, "CoverageHistory.htm"), true); }
private object CreateReportRenderer() { if (_reportRenderer == null) { _reportRenderer = ReportRendererContainer.Create(); } return(_reportRenderer); }
/// <summary> /// Creates the summary report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="summaryResult">The summary result.</param> public virtual void CreateAssemblyReport(IReportRenderer reportRenderer, SummaryResult summaryResult, Assembly anAssembly) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (summaryResult == null) { throw new ArgumentNullException(nameof(summaryResult)); } if (anAssembly == null) { throw new ArgumentNullException(nameof(anAssembly)); } string title = this.ReportContext.ReportConfiguration.Title != null ? $"{ReportResources.Summary} - {this.ReportContext.ReportConfiguration.Title}" : ReportResources.Summary; title = anAssembly.Name; reportRenderer.BeginSummaryReport(this.ReportContext.ReportConfiguration.TargetDirectory, HtmlRenderer.GetAssemblyReportFilename(anAssembly.Name), title); reportRenderer.HeaderWithGithubLinks(title); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.GeneratedOn, DateTime.Now.ToShortDateString() + " - " + DateTime.Now.ToLongTimeString()); reportRenderer.KeyValueRow(ReportResources.Classes, Convert.ToString(anAssembly.Classes.Count(), CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Files2, anAssembly.Classes.SelectMany(a => a.Files).Distinct().Count().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, anAssembly.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (anAssembly.CoverableLines - anAssembly.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, anAssembly.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, anAssembly.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.FinishTable(); reportRenderer.Header(ReportResources.Coverage3); reportRenderer.BeginSummaryTable(); reportRenderer.BeginSummaryTable(summaryResult.SupportsBranchCoverage); reportRenderer.SummaryAssembly(anAssembly, summaryResult.SupportsBranchCoverage); foreach (var codeFile in anAssembly.Classes.SelectMany(c => c.Files).Distinct()) { reportRenderer.SummaryFile(codeFile, summaryResult.SupportsBranchCoverage); } reportRenderer.FinishTable(); reportRenderer.FinishSummaryTable(); reportRenderer.CustomSummary(summaryResult.Assemblies, this.ReportContext.RiskHotspotAnalysisResult.RiskHotspots, summaryResult.SupportsBranchCoverage); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.ReportContext.ReportConfiguration.TargetDirectory); }
public PromptsViewModel(IPromptsViewModelService promptsViewModelService, IReportRenderer reportRenderer) { _reportRenderer = reportRenderer; _catalogItemInfo = new CatalogItemInfo {Name = string.Empty}; _prompts = new ObservableCollection<IPrompt>(); _promptsViewModelService = promptsViewModelService; _executeReport = new RelayCommand(OnExeucteReport, ValidateAllPromptsAreReadyForReportExecution); MoveNext = new RelayCommand(OnMoveNext, () => _canMoveNext); MovePrevious = new RelayCommand(OnMovePrevious,() => _canMovePrevious); }
/// <summary> /// Initializes a new instance of the <see cref="SheetContext"/> class. /// </summary> /// <param name="documentContext">Document context.</param> /// <param name="worksheetPart">WorksheetPart.</param> /// <param name="sheetMetadata">Sheet configuration metadata.</param> /// <param name="reportRenderer">Renderer for sheet.</param> public SheetContext( DocumentContext documentContext, WorksheetPart worksheetPart, IExcelMetadata sheetMetadata, IReportRenderer reportRenderer) { DocumentContext = documentContext.AssertArgumentNotNull(nameof(documentContext)); WorksheetPart = worksheetPart.AssertArgumentNotNull(nameof(worksheetPart)); SheetMetadata = sheetMetadata.AssertArgumentNotNull(nameof(sheetMetadata)); ReportRenderer = reportRenderer.AssertArgumentNotNull(nameof(reportRenderer)); }
public ChequeController( IChequeRepository chequeRepository, IReportRenderer reportRenderer, IMailBox mailBox, IIoTHub hub, ICopterRepository copterRepository) { _chequeRepository = chequeRepository; _reportRenderer = reportRenderer; _copterRepository = copterRepository; _mailBox = mailBox; _hub = hub; }
public PromptsViewModel(IPromptsViewModelService promptsViewModelService, IReportRenderer reportRenderer) { _reportRenderer = reportRenderer; _catalogItemInfo = new CatalogItemInfo { Name = string.Empty }; _prompts = new ObservableCollection <IPrompt>(); _promptsViewModelService = promptsViewModelService; _executeReport = new RelayCommand(OnExeucteReport, ValidateAllPromptsAreReadyForReportExecution); MoveNext = new RelayCommand(OnMoveNext, () => _canMoveNext); MovePrevious = new RelayCommand(OnMovePrevious, () => _canMovePrevious); }
public ExcelReportBuilder AddSheetDataTBD( IReportRenderer reportRenderer, IEnumerable <IPropertyContainer> reportRows, bool fillCellReferences = true) { var sheetMetadata = reportRenderer.GetMetadata <ExcelSheetMetadata>() ?? _defaultSheetMetadata; // FIND ALL PARTS!!! WorkbookPart workbookPart = _documentContext.Document.WorkbookPart; WorksheetPart worksheetPart = workbookPart.GetPartsOfType <WorksheetPart>().FirstOrDefault(); Sheets sheets = workbookPart.Workbook.Sheets; var sheetContext = new SheetContext(_documentContext, worksheetPart, sheetMetadata, reportRenderer); sheetContext.SheetData = new SheetData(); return(this); }
public ReportEngine(Report report, IReportRenderer renderer) { Report = report; source = Report._dataSource; parameters = Report.Parameters.ToDictionary(rp => rp.Name); if (source == null) { source = new DummyDataSource(); } ReportRenderer = renderer; currentSectionSpans = new List <SpanInfo> (); currentSectionOrderedControls = new List <Control> (); currentSectionExtendedLines = new List <Line> (); currentSectionControlsBuffer = new List <Control> (); subreportSectionControlsBuffer = new List <Control>(); currentPageFooterSectionControlsBuffer = new List <Control> (); context = new ReportContext { CurrentPageIndex = 0, DataSource = null, Parameters = new Dictionary <string, string>(), ReportMode = ReportMode.Preview }; Report.Pages = new List <Page> (); nextPage(); selectCurrentSectionByTemplateSection(Report.PageFooterSection); }
/// <summary> /// Creates a class report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="class">The class.</param> /// <param name="fileAnalyses">The file analyses that correspond to the class.</param> public virtual void CreateClassReport(IReportRenderer reportRenderer, Class @class, IEnumerable<FileAnalysis> fileAnalyses) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (@class == null) { throw new ArgumentNullException(nameof(@class)); } if (fileAnalyses == null) { throw new ArgumentNullException(nameof(fileAnalyses)); } reportRenderer.BeginClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.Class, @class.Name); reportRenderer.KeyValueRow(ReportResources.Assembly, @class.Assembly.ShortName); reportRenderer.KeyValueRow(ReportResources.Files3, @class.Files.Select(f => f.Path)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, @class.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (@class.CoverableLines - @class.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, @class.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, @class.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, @class.CoverageQuota.HasValue ? @class.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); decimal? branchCoverage = @class.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } reportRenderer.FinishTable(); if (@class.HistoricCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(@class.HistoricCoverages); } var metrics = @class.MethodMetrics; if (metrics.Any()) { reportRenderer.Header(ReportResources.Metrics); reportRenderer.BeginMetricsTable(Enumerable.Repeat(ReportResources.Method, 1).Union(metrics.First().Metrics.Select(m => m.Name))); foreach (var metric in metrics) { reportRenderer.MetricsRow(metric); } reportRenderer.FinishTable(); } reportRenderer.Header(ReportResources.Files); if (fileAnalyses.Any()) { var testMethods = @class.Files .SelectMany(f => f.TestMethods) .Distinct() .OrderBy(l => l.ShortName); reportRenderer.TestMethods(testMethods); foreach (var fileAnalysis in fileAnalyses) { reportRenderer.File(fileAnalysis.Path); if (!string.IsNullOrEmpty(fileAnalysis.Error)) { reportRenderer.Paragraph(fileAnalysis.Error); } else { reportRenderer.BeginLineAnalysisTable(new[] { string.Empty, "#", ReportResources.Line, string.Empty, ReportResources.Coverage }); foreach (var line in fileAnalysis.Lines) { reportRenderer.LineAnalysis(line); } reportRenderer.FinishTable(); } } } else { reportRenderer.Paragraph(ReportResources.NoFilesFound); } reportRenderer.SaveClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); }
/// <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); }
protected virtual IPromptsViewModel CreatePromptsViewModel( IPromptsViewModelService promptsViewModelService, IReportRenderer reportRenderer) { return new PromptsViewModel(promptsViewModelService, reportRenderer); }
/// <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.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) + "%"); } 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); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.TargetDirectory); }
/// <summary> /// Creates a class report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="class">The class.</param> /// <param name="fileAnalyses">The file analyses that correspond to the class.</param> public virtual void CreateClassReport(IReportRenderer reportRenderer, Class @class, IEnumerable <FileAnalysis> fileAnalyses) { if (reportRenderer == null) { throw new ArgumentNullException("reportRenderer"); } if (@class == null) { throw new ArgumentNullException("@class"); } if (fileAnalyses == null) { throw new ArgumentNullException("fileAnalyses"); } reportRenderer.BeginClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); reportRenderer.Header(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.Class, @class.Name); reportRenderer.KeyValueRow(ReportResources.Assembly, @class.Assembly.ShortName); reportRenderer.KeyValueRow(ReportResources.Files3, @class.Files.Select(f => f.Path)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, @class.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (@class.CoverableLines - @class.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, @class.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, @class.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, @class.CoverageQuota.HasValue ? @class.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); decimal?branchCoverage = @class.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } reportRenderer.FinishTable(); if (@class.HistoricCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(@class.HistoricCoverages); } var metrics = @class.MethodMetrics; if (metrics.Any()) { reportRenderer.Header(ReportResources.Metrics); reportRenderer.BeginMetricsTable(Enumerable.Repeat(ReportResources.Method, 1).Union(metrics.First().Metrics.Select(m => m.Name))); foreach (var metric in metrics) { reportRenderer.MetricsRow(metric); } reportRenderer.FinishTable(); } reportRenderer.Header(ReportResources.Files); if (fileAnalyses.Any()) { var testMethods = @class.Files .SelectMany(f => f.TestMethods) .Distinct() .OrderBy(l => l.ShortName); reportRenderer.TestMethods(testMethods); foreach (var fileAnalysis in fileAnalyses) { reportRenderer.File(fileAnalysis.Path); if (!string.IsNullOrEmpty(fileAnalysis.Error)) { reportRenderer.Paragraph(fileAnalysis.Error); } else { reportRenderer.BeginLineAnalysisTable(new[] { string.Empty, "#", ReportResources.Line, string.Empty, ReportResources.Coverage }); foreach (var line in fileAnalysis.Lines) { reportRenderer.LineAnalysis(line); } reportRenderer.FinishTable(); } } } else { reportRenderer.Paragraph(ReportResources.NoFilesFound); } reportRenderer.SaveClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); }
public void ProcessUpToPage(IReportRenderer renderer, double height) { engine.ReportRenderer = renderer; engine.context.HeightLeftOnCurrentPage = height; Finished = engine.ProcessReportPage(); }
protected virtual IPromptsViewModel CreatePromptsViewModel( IPromptsViewModelService promptsViewModelService, IReportRenderer reportRenderer) { return(new PromptsViewModel(promptsViewModelService, reportRenderer)); }
private static IEnumerable<IReportRenderer> GetInnerRenderers(IReportRenderer renderer) { var reportRenderersField = typeof(MultiRenderer).GetField("renderers", BindingFlags.NonPublic | BindingFlags.Instance); return reportRenderersField.GetValue(renderer) as IEnumerable<IReportRenderer>; }
/// <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.TargetDirectory, null, ReportResources.Summary); //reportRenderer.Header(ReportResources.Summary); int val; if (summaryResult.TestedNewLines != 0 && summaryResult.NewLines != 0 && summaryResult.CoverableLines != 0) { val = (int)((summaryResult.CoverableLines == 0) ? (decimal?)null : (decimal)Math.Truncate(100 * ((double)summaryResult.TestedNewLines / (double)summaryResult.NewLines))); } else { val = 0; } string value = val != 0 ? val.ToString(CultureInfo.InvariantCulture) + "%" : "0%"; reportRenderer.Begindiv(summaryResult.BuildVersion, value); reportRenderer.BeginKeyValueTable1(); //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.NewLines, summaryResult.NewLines.ToString(CultureInfo.InvariantCulture)); //reportRenderer.KeyValueRow(ReportResources.TestedNewLines, summaryResult.TestedNewLines.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); //reportRenderer.KeyValueRow(ReportResources.TestCoverage, val != 0 ? val.ToString(CultureInfo.InvariantCulture) + "%" : "0%"); //reportRenderer.KeyValueRow(ReportResources.TestCoverage, 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(); reportRenderer.BeginKeyValueTable2(); reportRenderer.KeyValueRow(ReportResources.ModifiedAssemblies, summaryResult.modifyassemblies.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.NewLines, summaryResult.NewLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TestedNewLines, summaryResult.TestedNewLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TestCoverage, val != 0 ? val.ToString(CultureInfo.InvariantCulture) + "%" : "0%"); reportRenderer.FinishTable(); reportRenderer.Enddiv(); 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); reportRenderer.AddFooter(); reportRenderer.SaveSummaryReport(this.TargetDirectory); }
public ReportEngine2(Report report, IReportRenderer renderer) { this.renderer = renderer; this.report = report; }
private static IEnumerable <IReportRenderer> GetInnerRenderers(IReportRenderer renderer) { var reportRenderersField = typeof(MultiRenderer).GetField("renderers", BindingFlags.NonPublic | BindingFlags.Instance); return(reportRenderersField.GetValue(renderer) as IEnumerable <IReportRenderer>); }
/// <summary> /// Creates a class report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="codeFile"></param> /// <param name="fileAnalysis">The file analyses that correspond to the class.</param> /// <param name="sourceFile">The source file.</param> public virtual void CreateFileReport(IReportRenderer reportRenderer, CodeFile codeFile, FileAnalysis fileAnalysis) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (fileAnalysis == null) { throw new ArgumentNullException(nameof(fileAnalysis)); } string additionalTitle = this.ReportContext.ReportConfiguration.Title != null ? $"{this.ReportContext.ReportConfiguration.Title} - " : null; reportRenderer.BeginFileReport(this.ReportContext.ReportConfiguration.TargetDirectory, codeFile.Path, additionalTitle); if (this.ReportContext.ReportConfiguration.Title != null) { reportRenderer.HeaderWithBackLink($"{ReportResources.Summary} - {this.ReportContext.ReportConfiguration.Title}"); } else { reportRenderer.HeaderWithBackLink(ReportResources.Summary); } reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.Files3, codeFile.Path); reportRenderer.KeyValueRow(ReportResources.CoveredLines, Convert.ToString(codeFile.CoveredLines, CultureInfo.CurrentUICulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, Convert.ToString(codeFile.CoverableLines - codeFile.CoveredLines, CultureInfo.CurrentUICulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, Convert.ToString(codeFile.CoverableLines, CultureInfo.CurrentUICulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, Convert.ToString(codeFile.TotalLines, CultureInfo.CurrentUICulture)); if (this.ReportContext.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportContext.ReportConfiguration.Tag); } reportRenderer.FinishTable(); if (codeFile.MethodMetrics.Any()) { reportRenderer.Header(ReportResources.Metrics); reportRenderer.MetricsTable(codeFile.MethodMetrics); } reportRenderer.Header(ReportResources.Files); reportRenderer.File(codeFile.Path); if (!string.IsNullOrEmpty(fileAnalysis.Error)) { reportRenderer.Paragraph(fileAnalysis.Error); } else { reportRenderer.BeginLineAnalysisTable(new[] { string.Empty, "#", ReportResources.Line, string.Empty, ReportResources.Coverage }); foreach (var line in fileAnalysis.Lines) { reportRenderer.LineAnalysis(0, line); } reportRenderer.FinishTable(); } reportRenderer.AddFooter(); { var testMethods = codeFile.TestMethods.OrderBy(l => l.ShortName); var codeElementsByFileIndex = new Dictionary <int, IEnumerable <CodeElement> >(); int fileIndex = 0; codeElementsByFileIndex.Add(fileIndex++, codeFile.CodeElements.OrderBy(c => c.FirstLine)); reportRenderer.TestMethods(testMethods, new[] { fileAnalysis }, codeElementsByFileIndex); } reportRenderer.SaveClassReport(this.ReportContext.ReportConfiguration.TargetDirectory, null, null); }
private object CreateReportRenderer() { if (_reportRenderer == null) { _reportRenderer = ReportRendererContainer.Create(); } return _reportRenderer; }
/// <summary> /// Creates a class report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="class">The class.</param> /// <param name="fileAnalyses">The file analyses that correspond to the class.</param> public virtual void CreateClassReport(IReportRenderer reportRenderer, Class @class, IEnumerable <FileAnalysis> fileAnalyses) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (@class == null) { throw new ArgumentNullException(nameof(@class)); } if (fileAnalyses == null) { throw new ArgumentNullException(nameof(fileAnalyses)); } reportRenderer.BeginClassReport(this.ReportContext.ReportConfiguration.TargetDirectory, @class.Assembly.ShortName, @class.Name); reportRenderer.HeaderWithBackLink(ReportResources.Summary); reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.Class, @class.Name); reportRenderer.KeyValueRow(ReportResources.Assembly, @class.Assembly.ShortName); reportRenderer.KeyValueRow(ReportResources.Files3, @class.Files.Select(f => f.Path)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, @class.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (@class.CoverableLines - @class.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, @class.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, @class.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, @class.CoverageQuota.HasValue ? $"{@class.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture)}% ({@class.CoveredLines.ToString(CultureInfo.InvariantCulture)} {ReportResources.Of} {@class.CoverableLines.ToString(CultureInfo.InvariantCulture)})" : string.Empty); if (@class.CoveredBranches.HasValue && @class.TotalBranches.HasValue) { reportRenderer.KeyValueRow(ReportResources.CoveredBranches2, @class.CoveredBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalBranches, @class.TotalBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); decimal?branchCoverage = @class.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, $"{branchCoverage.Value.ToString(CultureInfo.InvariantCulture)}% ({@class.CoveredBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)} {ReportResources.Of} {@class.TotalBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)})"); } } if (this.ReportContext.ReportConfiguration.Tag != null) { reportRenderer.KeyValueRow(ReportResources.Tag, this.ReportContext.ReportConfiguration.Tag); } reportRenderer.FinishTable(); if (reportRenderer.SupportsCharts) { if (@class.HistoricCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(@class.HistoricCoverages, this.ReportContext.Settings.RenderPngFallBackImagesForHistoryCharts); } } if (@class.Files.Any(f => f.MethodMetrics.Any())) { reportRenderer.Header(ReportResources.Metrics); reportRenderer.MetricsTable(@class); } reportRenderer.Header(ReportResources.Files); if (fileAnalyses.Any()) { int fileIndex = 0; foreach (var fileAnalysis in fileAnalyses) { reportRenderer.File(fileAnalysis.Path); if (!string.IsNullOrEmpty(fileAnalysis.Error)) { reportRenderer.Paragraph(fileAnalysis.Error); } else { reportRenderer.BeginLineAnalysisTable(new[] { string.Empty, "#", ReportResources.Line, string.Empty, ReportResources.Coverage }); foreach (var line in fileAnalysis.Lines) { reportRenderer.LineAnalysis(fileIndex, line); } reportRenderer.FinishTable(); } fileIndex++; } } else { reportRenderer.Paragraph(ReportResources.NoFilesFound); } reportRenderer.AddFooter(); if (fileAnalyses.Any()) { var testMethods = @class.Files .SelectMany(f => f.TestMethods) .Distinct() .OrderBy(l => l.ShortName); var codeElementsByFileIndex = new Dictionary <int, IEnumerable <CodeElement> >(); int fileIndex = 0; foreach (var file in @class.Files) { codeElementsByFileIndex.Add(fileIndex++, file.CodeElements.OrderBy(c => c.FirstLine)); } reportRenderer.TestMethods(testMethods, fileAnalyses, codeElementsByFileIndex); } reportRenderer.SaveClassReport(this.ReportContext.ReportConfiguration.TargetDirectory, @class.Assembly.ShortName, @class.Name); }
/// <summary> /// Creates a class report. /// </summary> /// <param name="reportRenderer">The report renderer.</param> /// <param name="class">The class.</param> /// <param name="fileAnalyses">The file analyses that correspond to the class.</param> public virtual void CreateClassReport(IReportRenderer reportRenderer, Class @class, IEnumerable <FileAnalysis> fileAnalyses) { if (reportRenderer == null) { throw new ArgumentNullException(nameof(reportRenderer)); } if (@class == null) { throw new ArgumentNullException(nameof(@class)); } if (fileAnalyses == null) { throw new ArgumentNullException(nameof(fileAnalyses)); } reportRenderer.BeginClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); reportRenderer.Header(ReportResources.Summary); //int val; //if (@class.TestedNewLines != 0 && @class.NewLines != 0 && @class.CoverableLines!=0) //{ // val = (int)((@class.CoverableLines == 0) ? (decimal?)null : (decimal)Math.Truncate(100 * ((double)@class.TestedNewLines / (double)@class.NewLines))); //} //else // val = 0; reportRenderer.BeginKeyValueTable(); reportRenderer.KeyValueRow(ReportResources.Class, @class.Name); reportRenderer.KeyValueRow(ReportResources.Assembly, @class.Assembly.ShortName); reportRenderer.KeyValueRow(ReportResources.Files3, @class.Files.Select(f => f.Path)); reportRenderer.KeyValueRow(ReportResources.CoveredLines, @class.CoveredLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.UncoveredLines, (@class.CoverableLines - @class.CoveredLines).ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.CoverableLines, @class.CoverableLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.NewLines, @class.NewLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TestedNewLines, @class.TestedNewLines.ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.TotalLines, @class.TotalLines.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)); reportRenderer.KeyValueRow(ReportResources.Coverage2, @class.CoverageQuota.HasValue ? @class.CoverageQuota.Value.ToString(CultureInfo.InvariantCulture) + "%" : string.Empty); reportRenderer.KeyValueRow(ReportResources.NewCoverage, @class.NewCoverage != 0 ? @class.NewCoverage.ToString(CultureInfo.InvariantCulture) + "%" : "0%"); decimal?branchCoverage = @class.BranchCoverageQuota; if (branchCoverage.HasValue) { reportRenderer.KeyValueRow(ReportResources.BranchCoverage2, branchCoverage.Value.ToString(CultureInfo.InvariantCulture) + "%"); } reportRenderer.FinishTable(); if (@class.HistoricCoverages.Any(h => h.CoverageQuota.HasValue || h.BranchCoverageQuota.HasValue)) { reportRenderer.Header(ReportResources.History); reportRenderer.Chart(@class.HistoricCoverages); } var metrics = @class.MethodMetrics; if (metrics.Any()) { reportRenderer.Header(ReportResources.Metrics); reportRenderer.BeginMetricsTable(metrics.First()); foreach (var metric in metrics) { reportRenderer.MetricsRow(metric); } reportRenderer.FinishTable(); } reportRenderer.Header(ReportResources.Files); if (fileAnalyses.Any()) { int fileIndex = 0; foreach (var fileAnalysis in fileAnalyses) { reportRenderer.File(fileAnalysis.Path); if (!string.IsNullOrEmpty(fileAnalysis.Error)) { reportRenderer.Paragraph(fileAnalysis.Error); } else { reportRenderer.BeginLineAnalysisTable(new[] { string.Empty, "#", ReportResources.Line, string.Empty, ReportResources.Coverage }); foreach (var line in fileAnalysis.Lines) { //if (line.LineVisitStatus == LineVisitStatus.newline || line.LineVisitStatus == LineVisitStatus.TestNotCovered) reportRenderer.LineAnalysis(fileIndex, line); } reportRenderer.FinishTable(); } fileIndex++; } } else { reportRenderer.Paragraph(ReportResources.NoFilesFound); } reportRenderer.AddFooter(); if (fileAnalyses.Any()) { var testMethods = @class.Files .SelectMany(f => f.TestMethods) .Distinct() .OrderBy(l => l.ShortName); var codeElementsByFileIndex = new Dictionary <int, IEnumerable <CodeElement> >(); int fileIndex = 0; List <int> val = new List <int>(); List <int> val1 = new List <int>(); List <int> less = new List <int>(); foreach (var file in @class.Files) { fileIndex++; val = new List <int>(); val = file.CodeElements.OrderBy(c => c.Line).Select(x => x.Line).ToList(); if (@class.ChangesCount.Count > 0) { for (int j = 0; j < @class.ChangesCount.Count; j++) { for (int i = 0; i < val.Count; i++) { string[] stringSeparators = new string[] { "[stop]" }; int value = Convert.ToInt32(@class.ChangesCount[j].Split(new[] { "###" }, StringSplitOptions.None) != null ? @class.ChangesCount[j].Split(new[] { "###" }, StringSplitOptions.None)[0] : ""); if (val[i] == value) { val1.Add(val[i]); } if (val[i] < value) { less.Add(val[i]); } } if (less.Count > 0) { val1.Add(less.Max()); } less = new List <int>(); } val1 = val1.Distinct().ToList(); val1.Sort(); } if (val1.Count > 0) { codeElementsByFileIndex.Add(fileIndex, file.CodeElements.OrderBy(c => c.Line).Where(x => val1.Contains(x.Line))); } else { codeElementsByFileIndex.Add(fileIndex, file.CodeElements.OrderBy(c => c.Line)); } } reportRenderer.TestMethods(testMethods, codeElementsByFileIndex); } reportRenderer.SaveClassReport(this.TargetDirectory, @class.Assembly.ShortName, @class.Name); }