Skip to content

Commit

Permalink
Merge pull request #131 from tonerdo/coverage-format-change
Browse files Browse the repository at this point in the history
Coverage format update
  • Loading branch information
tonerdo committed Jun 23, 2018
2 parents 3d86243 + 4f220f5 commit cf9fb2b
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 102 deletions.
39 changes: 13 additions & 26 deletions src/coverlet.core/Coverage.cs
Expand Up @@ -66,27 +66,27 @@ public CoverageResult GetCoverageResult()
{
if (methods.TryGetValue(line.Method, out Method method))
{
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
}
else
{
documents[doc.Path][line.Class].Add(line.Method, new Method());
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
}
}
else
{
documents[doc.Path].Add(line.Class, new Methods());
documents[doc.Path][line.Class].Add(line.Method, new Method());
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
}
}
else
{
documents.Add(doc.Path, new Classes());
documents[doc.Path].Add(line.Class, new Methods());
documents[doc.Path][line.Class].Add(line.Method, new Method());
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
}
}

Expand All @@ -99,36 +99,24 @@ public CoverageResult GetCoverageResult()
{
if (methods.TryGetValue(branch.Method, out Method method))
{
if (method.Branches.TryGetValue(branch.Number, out List<BranchInfo> branchInfo))
{
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
else
{
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
method.Branches.Add(new BranchInfo
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
else
{
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
}
else
{
documents[doc.Path].Add(branch.Class, new Methods());
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
}
Expand All @@ -137,9 +125,8 @@ public CoverageResult GetCoverageResult()
documents.Add(doc.Path, new Classes());
documents[doc.Path].Add(branch.Class, new Methods());
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
);
}
}
Expand Down
15 changes: 7 additions & 8 deletions src/coverlet.core/CoverageResult.cs
Expand Up @@ -5,21 +5,20 @@

namespace Coverlet.Core
{
public class LineInfo
{
public int Hits { get; set; }
}

public class BranchInfo : LineInfo
public class BranchInfo
{
public int Line { get; set; }
public int Offset { get; set; }
public int EndOffset { get; set; }
public int Path { get; set; }
public uint Ordinal { get; set; }
public int Hits { get; set; }
}

public class Lines : SortedDictionary<int, LineInfo> { }
public class Branches : SortedDictionary<int, List<BranchInfo>> { }
public class Lines : SortedDictionary<int, int> { }

public class Branches : List<BranchInfo> { }

public class Method
{
internal Method()
Expand Down
18 changes: 5 additions & 13 deletions src/coverlet.core/CoverageSummary.cs
Expand Up @@ -9,7 +9,7 @@ public class CoverageSummary
public CoverageDetails CalculateLineCoverage(Lines lines)
{
var details = new CoverageDetails();
details.Covered = lines.Where(l => l.Value.Hits > 0).Count();
details.Covered = lines.Where(l => l.Value > 0).Count();
details.Total = lines.Count;
return details;
}
Expand Down Expand Up @@ -62,19 +62,11 @@ public CoverageDetails CalculateLineCoverage(Modules modules)
return details;
}

public CoverageDetails CalculateBranchCoverage(List<BranchInfo> branchInfo)
public CoverageDetails CalculateBranchCoverage(IList<BranchInfo> branches)
{
var details = new CoverageDetails();
details.Covered = branchInfo.Count(bi => bi.Hits > 0);
details.Total = branchInfo.Count;
return details;
}

public CoverageDetails CalculateBranchCoverage(Branches branches)
{
var details = new CoverageDetails();
details.Covered = branches.Sum(b => b.Value.Where(bi => bi.Hits > 0).Count());
details.Total = branches.Sum(b => b.Value.Count());
details.Covered = branches.Count(bi => bi.Hits > 0);
details.Total = branches.Count;
return details;
}

Expand Down Expand Up @@ -129,7 +121,7 @@ public CoverageDetails CalculateBranchCoverage(Modules modules)
public CoverageDetails CalculateMethodCoverage(Lines lines)
{
var details = new CoverageDetails();
details.Covered = lines.Any(l => l.Value.Hits > 0) ? 1 : 0;
details.Covered = lines.Any(l => l.Value > 0) ? 1 : 0;
details.Total = 1;
return details;
}
Expand Down
8 changes: 5 additions & 3 deletions src/coverlet.core/Reporters/CoberturaReporter.cs
Expand Up @@ -71,13 +71,15 @@ public string Report(CoverageResult result)
XElement lines = new XElement("lines");
foreach (var ln in meth.Value.Lines)
{
bool isBranchPoint = meth.Value.Branches.Any(b => b.Line == ln.Key);
XElement line = new XElement("line");
line.Add(new XAttribute("number", ln.Key.ToString()));
line.Add(new XAttribute("hits", ln.Value.Hits.ToString()));
line.Add(new XAttribute("branch", meth.Value.Branches.ContainsKey(ln.Key).ToString()));
line.Add(new XAttribute("hits", ln.Value.ToString()));
line.Add(new XAttribute("branch", isBranchPoint.ToString()));

if (meth.Value.Branches.TryGetValue(ln.Key, out List<BranchInfo> branches))
if (isBranchPoint)
{
var branches = meth.Value.Branches.Where(b => b.Line == ln.Key).ToList();
var branchInfoCoverage = summary.CalculateBranchCoverage(branches);
line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.Percent*100}% ({branchInfoCoverage.Covered}/{branchInfoCoverage.Total})"));
XElement conditions = new XElement("conditions");
Expand Down
9 changes: 4 additions & 5 deletions src/coverlet.core/Reporters/LcovReporter.cs
Expand Up @@ -33,15 +33,14 @@ public string Report(CoverageResult result)
continue;

lcov.Add($"FN:{method.Value.Lines.First().Key - 1},{method.Key}");
lcov.Add($"FNDA:{method.Value.Lines.First().Value.Hits},{method.Key}");
lcov.Add($"FNDA:{method.Value.Lines.First().Value},{method.Key}");

foreach (var line in method.Value.Lines)
lcov.Add($"DA:{line.Key},{line.Value.Hits}");
lcov.Add($"DA:{line.Key},{line.Value}");

foreach (var branchs in method.Value.Branches)
foreach (var branch in method.Value.Branches)
{
foreach (var branch in branchs.Value)
lcov.Add($"BRDA:{branchs.Key},{branch.Offset},{branch.Path},{branch.Hits}");
lcov.Add($"BRDA:{branch.Line},{branch.Offset},{branch.Path},{branch.Hits}");
}
}
}
Expand Down
31 changes: 14 additions & 17 deletions src/coverlet.core/Reporters/OpenCoverReporter.cs
Expand Up @@ -110,7 +110,7 @@ public string Report(CoverageResult result)
foreach (var lines in meth.Value.Lines)
{
XElement sequencePoint = new XElement("SequencePoint");
sequencePoint.Add(new XAttribute("vc", lines.Value.Hits.ToString()));
sequencePoint.Add(new XAttribute("vc", lines.Value.ToString()));
sequencePoint.Add(new XAttribute("upsid", lines.Key.ToString()));
sequencePoint.Add(new XAttribute("ordinal", k.ToString()));
sequencePoint.Add(new XAttribute("sl", lines.Key.ToString()));
Expand All @@ -122,7 +122,7 @@ public string Report(CoverageResult result)
sequencePoint.Add(new XAttribute("fileid", i.ToString()));
sequencePoints.Add(sequencePoint);

if (lines.Value.Hits > 0)
if (lines.Value > 0)
{
classVisited = true;
methodVisited = true;
Expand All @@ -131,22 +131,19 @@ public string Report(CoverageResult result)
k++;
}

foreach (var branches in meth.Value.Branches)
foreach (var branche in meth.Value.Branches)
{
foreach (var branch in branches.Value)
{
XElement branchPoint = new XElement("BranchPoint");
branchPoint.Add(new XAttribute("vc", branch.Hits.ToString()));
branchPoint.Add(new XAttribute("upsid", branches.Key.ToString()));
branchPoint.Add(new XAttribute("ordinal", branch.Ordinal.ToString()));
branchPoint.Add(new XAttribute("path", branch.Path.ToString()));
branchPoint.Add(new XAttribute("offset", branch.Offset.ToString()));
branchPoint.Add(new XAttribute("offsetend", branch.EndOffset.ToString()));
branchPoint.Add(new XAttribute("sl", branches.Key.ToString()));
branchPoint.Add(new XAttribute("fileid", i.ToString()));
branchPoints.Add(branchPoint);
kBr++;
}
XElement branchPoint = new XElement("BranchPoint");
branchPoint.Add(new XAttribute("vc", branche.Hits.ToString()));
branchPoint.Add(new XAttribute("upsid", branche.Line.ToString()));
branchPoint.Add(new XAttribute("ordinal", branche.Ordinal.ToString()));
branchPoint.Add(new XAttribute("path", branche.Path.ToString()));
branchPoint.Add(new XAttribute("offset", branche.Offset.ToString()));
branchPoint.Add(new XAttribute("offsetend", branche.EndOffset.ToString()));
branchPoint.Add(new XAttribute("sl", branche.Line.ToString()));
branchPoint.Add(new XAttribute("fileid", i.ToString()));
branchPoints.Add(branchPoint);
kBr++;
}

numMethods++;
Expand Down
9 changes: 4 additions & 5 deletions test/coverlet.core.tests/CoverageSummaryTests.cs
Expand Up @@ -15,12 +15,11 @@ public class CoverageSummaryTests
public CoverageSummaryTests()
{
Lines lines = new Lines();
lines.Add(1, new LineInfo { Hits = 1 });
lines.Add(2, new LineInfo { Hits = 0 });
lines.Add(1, 1);
lines.Add(2, 0);
Branches branches = new Branches();
branches.Add(1, new List<BranchInfo>());
branches[1].Add(new BranchInfo { Hits = 1, Offset = 1, Path = 0, Ordinal = 1 });
branches[1].Add(new BranchInfo { Hits = 1, Offset = 1, Path = 1, Ordinal = 2 });
branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 });
branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 });

Methods methods = new Methods();
var methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()";
Expand Down
16 changes: 10 additions & 6 deletions test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs
Expand Up @@ -11,23 +11,27 @@ public void TestReport()
{
CoverageResult result = new CoverageResult();
result.Identifier = Guid.NewGuid().ToString();

Lines lines = new Lines();
lines.Add(1, new LineInfo { Hits = 1 });
lines.Add(2, new LineInfo { Hits = 0 });
lines.Add(1, 1);
lines.Add(2, 0);

Branches branches = new Branches();
branches.Add(1, new List<BranchInfo> {
new BranchInfo{ Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 },
new BranchInfo{ Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }
});
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 });

Methods methods = new Methods();
var methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()";
methods.Add(methodString, new Method());
methods[methodString].Lines = lines;
methods[methodString].Branches = branches;

Classes classes = new Classes();
classes.Add("Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods);

Documents documents = new Documents();
documents.Add("doc.cs", classes);

result.Modules = new Modules();
result.Modules.Add("module", documents);

Expand Down
9 changes: 7 additions & 2 deletions test/coverlet.core.tests/Reporters/JsonReporterTests.cs
Expand Up @@ -10,17 +10,22 @@ public void TestReport()
{
CoverageResult result = new CoverageResult();
result.Identifier = Guid.NewGuid().ToString();

Lines lines = new Lines();
lines.Add(1, new LineInfo { Hits = 1 });
lines.Add(2, new LineInfo { Hits = 0 });
lines.Add(1, 1);
lines.Add(2, 0);

Methods methods = new Methods();
var methodString = "System.Void Coverlet.Core.Reporters.Tests.JsonReporterTests.TestReport()";
methods.Add(methodString, new Method());
methods[methodString].Lines = lines;

Classes classes = new Classes();
classes.Add("Coverlet.Core.Reporters.Tests.JsonReporterTests", methods);

Documents documents = new Documents();
documents.Add("doc.cs", classes);

result.Modules = new Modules();
result.Modules.Add("module", documents);

Expand Down

0 comments on commit cf9fb2b

Please sign in to comment.