Skip to content

Commit cf9fb2b

Browse files
authored
Merge pull request #131 from tonerdo/coverage-format-change
Coverage format update
2 parents 3d86243 + 4f220f5 commit cf9fb2b

11 files changed

+92
-102
lines changed

src/coverlet.core/Coverage.cs

+13-26
Original file line numberDiff line numberDiff line change
@@ -66,27 +66,27 @@ public CoverageResult GetCoverageResult()
6666
{
6767
if (methods.TryGetValue(line.Method, out Method method))
6868
{
69-
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
69+
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
7070
}
7171
else
7272
{
7373
documents[doc.Path][line.Class].Add(line.Method, new Method());
74-
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
74+
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
7575
}
7676
}
7777
else
7878
{
7979
documents[doc.Path].Add(line.Class, new Methods());
8080
documents[doc.Path][line.Class].Add(line.Method, new Method());
81-
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
81+
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
8282
}
8383
}
8484
else
8585
{
8686
documents.Add(doc.Path, new Classes());
8787
documents[doc.Path].Add(line.Class, new Methods());
8888
documents[doc.Path][line.Class].Add(line.Method, new Method());
89-
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, new LineInfo { Hits = line.Hits });
89+
documents[doc.Path][line.Class][line.Method].Lines.Add(line.Number, line.Hits);
9090
}
9191
}
9292

@@ -99,36 +99,24 @@ public CoverageResult GetCoverageResult()
9999
{
100100
if (methods.TryGetValue(branch.Method, out Method method))
101101
{
102-
if (method.Branches.TryGetValue(branch.Number, out List<BranchInfo> branchInfo))
103-
{
104-
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
105-
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
106-
);
107-
}
108-
else
109-
{
110-
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
111-
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
112-
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
113-
);
114-
}
102+
method.Branches.Add(new BranchInfo
103+
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
104+
);
115105
}
116106
else
117107
{
118108
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
119-
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
120-
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
121-
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
109+
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
110+
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
122111
);
123112
}
124113
}
125114
else
126115
{
127116
documents[doc.Path].Add(branch.Class, new Methods());
128117
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
129-
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
130-
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
131-
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
118+
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
119+
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
132120
);
133121
}
134122
}
@@ -137,9 +125,8 @@ public CoverageResult GetCoverageResult()
137125
documents.Add(doc.Path, new Classes());
138126
documents[doc.Path].Add(branch.Class, new Methods());
139127
documents[doc.Path][branch.Class].Add(branch.Method, new Method());
140-
documents[doc.Path][branch.Class][branch.Method].Branches.Add(branch.Number, new List<BranchInfo>());
141-
documents[doc.Path][branch.Class][branch.Method].Branches[branch.Number].Add(new BranchInfo
142-
{ Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
128+
documents[doc.Path][branch.Class][branch.Method].Branches.Add(new BranchInfo
129+
{ Line = branch.Number, Hits = branch.Hits, Offset = branch.Offset, EndOffset = branch.EndOffset, Path = branch.Path, Ordinal = branch.Ordinal }
143130
);
144131
}
145132
}

src/coverlet.core/CoverageResult.cs

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@
55

66
namespace Coverlet.Core
77
{
8-
public class LineInfo
9-
{
10-
public int Hits { get; set; }
11-
}
12-
13-
public class BranchInfo : LineInfo
8+
public class BranchInfo
149
{
10+
public int Line { get; set; }
1511
public int Offset { get; set; }
1612
public int EndOffset { get; set; }
1713
public int Path { get; set; }
1814
public uint Ordinal { get; set; }
15+
public int Hits { get; set; }
1916
}
2017

21-
public class Lines : SortedDictionary<int, LineInfo> { }
22-
public class Branches : SortedDictionary<int, List<BranchInfo>> { }
18+
public class Lines : SortedDictionary<int, int> { }
19+
20+
public class Branches : List<BranchInfo> { }
21+
2322
public class Method
2423
{
2524
internal Method()

src/coverlet.core/CoverageSummary.cs

+5-13
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class CoverageSummary
99
public CoverageDetails CalculateLineCoverage(Lines lines)
1010
{
1111
var details = new CoverageDetails();
12-
details.Covered = lines.Where(l => l.Value.Hits > 0).Count();
12+
details.Covered = lines.Where(l => l.Value > 0).Count();
1313
details.Total = lines.Count;
1414
return details;
1515
}
@@ -62,19 +62,11 @@ public CoverageDetails CalculateLineCoverage(Modules modules)
6262
return details;
6363
}
6464

65-
public CoverageDetails CalculateBranchCoverage(List<BranchInfo> branchInfo)
65+
public CoverageDetails CalculateBranchCoverage(IList<BranchInfo> branches)
6666
{
6767
var details = new CoverageDetails();
68-
details.Covered = branchInfo.Count(bi => bi.Hits > 0);
69-
details.Total = branchInfo.Count;
70-
return details;
71-
}
72-
73-
public CoverageDetails CalculateBranchCoverage(Branches branches)
74-
{
75-
var details = new CoverageDetails();
76-
details.Covered = branches.Sum(b => b.Value.Where(bi => bi.Hits > 0).Count());
77-
details.Total = branches.Sum(b => b.Value.Count());
68+
details.Covered = branches.Count(bi => bi.Hits > 0);
69+
details.Total = branches.Count;
7870
return details;
7971
}
8072

@@ -129,7 +121,7 @@ public CoverageDetails CalculateBranchCoverage(Modules modules)
129121
public CoverageDetails CalculateMethodCoverage(Lines lines)
130122
{
131123
var details = new CoverageDetails();
132-
details.Covered = lines.Any(l => l.Value.Hits > 0) ? 1 : 0;
124+
details.Covered = lines.Any(l => l.Value > 0) ? 1 : 0;
133125
details.Total = 1;
134126
return details;
135127
}

src/coverlet.core/Reporters/CoberturaReporter.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,15 @@ public string Report(CoverageResult result)
7171
XElement lines = new XElement("lines");
7272
foreach (var ln in meth.Value.Lines)
7373
{
74+
bool isBranchPoint = meth.Value.Branches.Any(b => b.Line == ln.Key);
7475
XElement line = new XElement("line");
7576
line.Add(new XAttribute("number", ln.Key.ToString()));
76-
line.Add(new XAttribute("hits", ln.Value.Hits.ToString()));
77-
line.Add(new XAttribute("branch", meth.Value.Branches.ContainsKey(ln.Key).ToString()));
77+
line.Add(new XAttribute("hits", ln.Value.ToString()));
78+
line.Add(new XAttribute("branch", isBranchPoint.ToString()));
7879

79-
if (meth.Value.Branches.TryGetValue(ln.Key, out List<BranchInfo> branches))
80+
if (isBranchPoint)
8081
{
82+
var branches = meth.Value.Branches.Where(b => b.Line == ln.Key).ToList();
8183
var branchInfoCoverage = summary.CalculateBranchCoverage(branches);
8284
line.Add(new XAttribute("condition-coverage", $"{branchInfoCoverage.Percent*100}% ({branchInfoCoverage.Covered}/{branchInfoCoverage.Total})"));
8385
XElement conditions = new XElement("conditions");

src/coverlet.core/Reporters/LcovReporter.cs

+4-5
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@ public string Report(CoverageResult result)
3333
continue;
3434

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

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

41-
foreach (var branchs in method.Value.Branches)
41+
foreach (var branch in method.Value.Branches)
4242
{
43-
foreach (var branch in branchs.Value)
44-
lcov.Add($"BRDA:{branchs.Key},{branch.Offset},{branch.Path},{branch.Hits}");
43+
lcov.Add($"BRDA:{branch.Line},{branch.Offset},{branch.Path},{branch.Hits}");
4544
}
4645
}
4746
}

src/coverlet.core/Reporters/OpenCoverReporter.cs

+14-17
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public string Report(CoverageResult result)
110110
foreach (var lines in meth.Value.Lines)
111111
{
112112
XElement sequencePoint = new XElement("SequencePoint");
113-
sequencePoint.Add(new XAttribute("vc", lines.Value.Hits.ToString()));
113+
sequencePoint.Add(new XAttribute("vc", lines.Value.ToString()));
114114
sequencePoint.Add(new XAttribute("upsid", lines.Key.ToString()));
115115
sequencePoint.Add(new XAttribute("ordinal", k.ToString()));
116116
sequencePoint.Add(new XAttribute("sl", lines.Key.ToString()));
@@ -122,7 +122,7 @@ public string Report(CoverageResult result)
122122
sequencePoint.Add(new XAttribute("fileid", i.ToString()));
123123
sequencePoints.Add(sequencePoint);
124124

125-
if (lines.Value.Hits > 0)
125+
if (lines.Value > 0)
126126
{
127127
classVisited = true;
128128
methodVisited = true;
@@ -131,22 +131,19 @@ public string Report(CoverageResult result)
131131
k++;
132132
}
133133

134-
foreach (var branches in meth.Value.Branches)
134+
foreach (var branche in meth.Value.Branches)
135135
{
136-
foreach (var branch in branches.Value)
137-
{
138-
XElement branchPoint = new XElement("BranchPoint");
139-
branchPoint.Add(new XAttribute("vc", branch.Hits.ToString()));
140-
branchPoint.Add(new XAttribute("upsid", branches.Key.ToString()));
141-
branchPoint.Add(new XAttribute("ordinal", branch.Ordinal.ToString()));
142-
branchPoint.Add(new XAttribute("path", branch.Path.ToString()));
143-
branchPoint.Add(new XAttribute("offset", branch.Offset.ToString()));
144-
branchPoint.Add(new XAttribute("offsetend", branch.EndOffset.ToString()));
145-
branchPoint.Add(new XAttribute("sl", branches.Key.ToString()));
146-
branchPoint.Add(new XAttribute("fileid", i.ToString()));
147-
branchPoints.Add(branchPoint);
148-
kBr++;
149-
}
136+
XElement branchPoint = new XElement("BranchPoint");
137+
branchPoint.Add(new XAttribute("vc", branche.Hits.ToString()));
138+
branchPoint.Add(new XAttribute("upsid", branche.Line.ToString()));
139+
branchPoint.Add(new XAttribute("ordinal", branche.Ordinal.ToString()));
140+
branchPoint.Add(new XAttribute("path", branche.Path.ToString()));
141+
branchPoint.Add(new XAttribute("offset", branche.Offset.ToString()));
142+
branchPoint.Add(new XAttribute("offsetend", branche.EndOffset.ToString()));
143+
branchPoint.Add(new XAttribute("sl", branche.Line.ToString()));
144+
branchPoint.Add(new XAttribute("fileid", i.ToString()));
145+
branchPoints.Add(branchPoint);
146+
kBr++;
150147
}
151148

152149
numMethods++;

test/coverlet.core.tests/CoverageSummaryTests.cs

+4-5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ public class CoverageSummaryTests
1515
public CoverageSummaryTests()
1616
{
1717
Lines lines = new Lines();
18-
lines.Add(1, new LineInfo { Hits = 1 });
19-
lines.Add(2, new LineInfo { Hits = 0 });
18+
lines.Add(1, 1);
19+
lines.Add(2, 0);
2020
Branches branches = new Branches();
21-
branches.Add(1, new List<BranchInfo>());
22-
branches[1].Add(new BranchInfo { Hits = 1, Offset = 1, Path = 0, Ordinal = 1 });
23-
branches[1].Add(new BranchInfo { Hits = 1, Offset = 1, Path = 1, Ordinal = 2 });
21+
branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 0, Ordinal = 1 });
22+
branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 1, Path = 1, Ordinal = 2 });
2423

2524
Methods methods = new Methods();
2625
var methodString = "System.Void Coverlet.Core.Tests.CoverageSummaryTests::TestCalculateSummary()";

test/coverlet.core.tests/Reporters/CoberturaReporterTests.cs

+10-6
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,27 @@ public void TestReport()
1111
{
1212
CoverageResult result = new CoverageResult();
1313
result.Identifier = Guid.NewGuid().ToString();
14+
1415
Lines lines = new Lines();
15-
lines.Add(1, new LineInfo { Hits = 1 });
16-
lines.Add(2, new LineInfo { Hits = 0 });
16+
lines.Add(1, 1);
17+
lines.Add(2, 0);
18+
1719
Branches branches = new Branches();
18-
branches.Add(1, new List<BranchInfo> {
19-
new BranchInfo{ Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 },
20-
new BranchInfo{ Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 }
21-
});
20+
branches.Add(new BranchInfo { Line = 1, Hits = 1, Offset = 23, EndOffset = 24, Path = 0, Ordinal = 1 });
21+
branches.Add(new BranchInfo { Line = 1, Hits = 0, Offset = 23, EndOffset = 27, Path = 1, Ordinal = 2 });
22+
2223
Methods methods = new Methods();
2324
var methodString = "System.Void Coverlet.Core.Reporters.Tests.CoberturaReporterTests::TestReport()";
2425
methods.Add(methodString, new Method());
2526
methods[methodString].Lines = lines;
2627
methods[methodString].Branches = branches;
28+
2729
Classes classes = new Classes();
2830
classes.Add("Coverlet.Core.Reporters.Tests.CoberturaReporterTests", methods);
31+
2932
Documents documents = new Documents();
3033
documents.Add("doc.cs", classes);
34+
3135
result.Modules = new Modules();
3236
result.Modules.Add("module", documents);
3337

test/coverlet.core.tests/Reporters/JsonReporterTests.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,22 @@ public void TestReport()
1010
{
1111
CoverageResult result = new CoverageResult();
1212
result.Identifier = Guid.NewGuid().ToString();
13+
1314
Lines lines = new Lines();
14-
lines.Add(1, new LineInfo { Hits = 1 });
15-
lines.Add(2, new LineInfo { Hits = 0 });
15+
lines.Add(1, 1);
16+
lines.Add(2, 0);
17+
1618
Methods methods = new Methods();
1719
var methodString = "System.Void Coverlet.Core.Reporters.Tests.JsonReporterTests.TestReport()";
1820
methods.Add(methodString, new Method());
1921
methods[methodString].Lines = lines;
22+
2023
Classes classes = new Classes();
2124
classes.Add("Coverlet.Core.Reporters.Tests.JsonReporterTests", methods);
25+
2226
Documents documents = new Documents();
2327
documents.Add("doc.cs", classes);
28+
2429
result.Modules = new Modules();
2530
result.Modules.Add("module", documents);
2631

0 commit comments

Comments
 (0)