From 30c8588f9b4386c699d808b311687570013e0456 Mon Sep 17 00:00:00 2001 From: Marco Rossignoli Date: Wed, 30 Jan 2019 22:19:58 +0100 Subject: [PATCH] fix opencover report bug --- .../Reporters/OpenCoverReporter.cs | 19 ++++++++++--------- .../Reporters/OpenCoverReporterTests.cs | 13 ++++++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/coverlet.core/Reporters/OpenCoverReporter.cs b/src/coverlet.core/Reporters/OpenCoverReporter.cs index 28698bd26..2d397c338 100644 --- a/src/coverlet.core/Reporters/OpenCoverReporter.cs +++ b/src/coverlet.core/Reporters/OpenCoverReporter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text; @@ -76,8 +77,8 @@ public string Report(CoverageResult result) method.Add(new XAttribute("cyclomaticComplexity", methCyclomaticComplexity.ToString())); method.Add(new XAttribute("nPathComplexity", "0")); - method.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString())); - method.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString())); + method.Add(new XAttribute("sequenceCoverage", Math.Round(methLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); + method.Add(new XAttribute("branchCoverage", Math.Round(methBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); method.Add(new XAttribute("isConstructor", meth.Key.Contains("ctor").ToString())); method.Add(new XAttribute("isGetter", meth.Key.Contains("get_").ToString())); method.Add(new XAttribute("isSetter", meth.Key.Contains("set_").ToString())); @@ -157,8 +158,8 @@ public string Report(CoverageResult result) methodSummary.Add(new XAttribute("visitedSequencePoints", methLineCoverage.Covered.ToString())); methodSummary.Add(new XAttribute("numBranchPoints", methBranchCoverage.Total.ToString())); methodSummary.Add(new XAttribute("visitedBranchPoints", methBranchCoverage.Covered.ToString())); - methodSummary.Add(new XAttribute("sequenceCoverage", methLineCoverage.Percent.ToString())); - methodSummary.Add(new XAttribute("branchCoverage", methBranchCoverage.Percent.ToString())); + methodSummary.Add(new XAttribute("sequenceCoverage", Math.Round(methLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); + methodSummary.Add(new XAttribute("branchCoverage", Math.Round(methBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); methodSummary.Add(new XAttribute("maxCyclomaticComplexity", methCyclomaticComplexity.ToString())); methodSummary.Add(new XAttribute("minCyclomaticComplexity", methCyclomaticComplexity.ToString())); methodSummary.Add(new XAttribute("visitedClasses", "0")); @@ -191,8 +192,8 @@ public string Report(CoverageResult result) classSummary.Add(new XAttribute("visitedSequencePoints", classLineCoverage.Covered.ToString())); classSummary.Add(new XAttribute("numBranchPoints", classBranchCoverage.Total.ToString())); classSummary.Add(new XAttribute("visitedBranchPoints", classBranchCoverage.Covered.ToString())); - classSummary.Add(new XAttribute("sequenceCoverage", classLineCoverage.Percent.ToString())); - classSummary.Add(new XAttribute("branchCoverage", classBranchCoverage.Percent.ToString())); + classSummary.Add(new XAttribute("sequenceCoverage", Math.Round(classLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); + classSummary.Add(new XAttribute("branchCoverage", Math.Round(classBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); classSummary.Add(new XAttribute("maxCyclomaticComplexity", classMaxCyclomaticComplexity.ToString())); classSummary.Add(new XAttribute("minCyclomaticComplexity", classMinCyclomaticComplexity.ToString())); classSummary.Add(new XAttribute("visitedClasses", classVisited ? "1" : "0")); @@ -214,7 +215,7 @@ public string Report(CoverageResult result) } var moduleLineCoverage = summary.CalculateLineCoverage(result.Modules); - var moduleBranchCoverage = summary.CalculateLineCoverage(result.Modules); + var moduleBranchCoverage = summary.CalculateBranchCoverage(result.Modules); var moduleMaxCyclomaticComplexity = summary.CalculateMaxCyclomaticComplexity(result.Modules); var moduleMinCyclomaticComplexity = summary.CalculateMinCyclomaticComplexity(result.Modules); @@ -222,8 +223,8 @@ public string Report(CoverageResult result) coverageSummary.Add(new XAttribute("visitedSequencePoints", moduleLineCoverage.Covered.ToString())); coverageSummary.Add(new XAttribute("numBranchPoints", moduleBranchCoverage.Total.ToString())); coverageSummary.Add(new XAttribute("visitedBranchPoints", moduleBranchCoverage.Covered.ToString())); - coverageSummary.Add(new XAttribute("sequenceCoverage", moduleLineCoverage.Percent.ToString())); - coverageSummary.Add(new XAttribute("branchCoverage", moduleBranchCoverage.Percent.ToString())); + coverageSummary.Add(new XAttribute("sequenceCoverage", Math.Round(moduleLineCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); + coverageSummary.Add(new XAttribute("branchCoverage", Math.Round(moduleBranchCoverage.Percent * 100, 2).ToString("G", CultureInfo.InvariantCulture))); coverageSummary.Add(new XAttribute("maxCyclomaticComplexity", moduleMaxCyclomaticComplexity.ToString())); coverageSummary.Add(new XAttribute("minCyclomaticComplexity", moduleMinCyclomaticComplexity.ToString())); coverageSummary.Add(new XAttribute("visitedClasses", visitedClasses.ToString())); diff --git a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs index f17452b4b..7fb3717a8 100644 --- a/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs +++ b/test/coverlet.core.tests/Reporters/OpenCoverReporterTests.cs @@ -1,5 +1,9 @@ using System; using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml.Linq; using Xunit; namespace Coverlet.Core.Reporters.Tests @@ -16,7 +20,11 @@ public void TestReport() result.Modules.Add("Coverlet.Core.Reporters.Tests", CreateFirstDocuments()); OpenCoverReporter reporter = new OpenCoverReporter(); - Assert.NotEqual(string.Empty, reporter.Report(result)); + string report = reporter.Report(result); + Assert.NotEmpty(report); + XDocument doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(report))); + Assert.Empty(doc.Descendants().Attributes("sequenceCoverage").Where(v => v.Value != "33.3")); + Assert.Empty(doc.Descendants().Attributes("branchCoverage").Where(v => v.Value != "25")); } [Fact] @@ -42,10 +50,13 @@ private static Documents CreateFirstDocuments() Lines lines = new Lines(); lines.Add(1, 1); lines.Add(2, 0); + lines.Add(3, 0); Branches branches = new Branches(); branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 }); branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 41, Path = 0, Ordinal = 3 }); + branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 40, EndOffset = 44, Path = 1, Ordinal = 4 }); Methods methods = new Methods(); var methodString = "System.Void Coverlet.Core.Reporters.Tests.OpenCoverReporterTests.TestReport()";