Skip to content

Commit

Permalink
#309: Added branch information to lcov output format
Browse files Browse the repository at this point in the history
  • Loading branch information
danielpalme committed Jan 14, 2020
1 parent 0ea004f commit 77ca13c
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/Readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ For further details take a look at LICENSE.txt.

CHANGELOG

4.4.1.0

* New: Issue #309: Added branch information to lcov output format

4.4.0.0

* New: Issue #304: Added new output format JSONSummary
Expand Down
7 changes: 6 additions & 1 deletion src/ReportGenerator.Core/Parser/Analysis/CodeFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class CodeFile
private readonly HashSet<MethodMetric> methodMetrics = new HashSet<MethodMetric>();

/// <summary>
/// The code elements..
/// The code elements.
/// </summary>
private readonly HashSet<CodeElement> codeElements = new HashSet<CodeElement>();

Expand Down Expand Up @@ -147,6 +147,11 @@ internal CodeFile(string path, int[] lineCoverage, LineVisitStatus[] lineVisitSt
/// </summary>
public ReadOnlyCollection<LineVisitStatus> LineVisitStatus => Array.AsReadOnly(this.lineVisitStatus);

/// <summary>
/// Gets the branches by line number.
/// </summary>
public IDictionary<int, ICollection<Branch>> BranchesByLine => this.branches ?? new Dictionary<int, ICollection<Branch>>();

/// <summary>
/// Gets the number of covered branches.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,62 @@ public void CreateSummaryReport(SummaryResult summaryResult)
using (var reportTextWriter = new StreamWriter(new FileStream(targetPath, FileMode.Create), Encoding.UTF8))
{
reportTextWriter.WriteLine("TN:");
long branchCounter = 0;

foreach (var assembly in summaryResult.Assemblies)
{
foreach (var @class in assembly.Classes)
{
foreach (var file in @class.Files)
{
// SF:<absolute path to the source file>
reportTextWriter.WriteLine($"SF:{file.Path}");

foreach (var codeElement in file.CodeElements)
{
// FN:<line number of function start>,<function name>
reportTextWriter.WriteLine($"FN:{codeElement.FirstLine.ToString(CultureInfo.InvariantCulture)},{codeElement.Name}");
}

foreach (var codeElement in file.CodeElements)
{
if (file.LineCoverage.Count > codeElement.FirstLine)
{
// FNDA:<execution count>,<function name>
int coverage = file.LineCoverage[codeElement.FirstLine];

if (coverage < 0)
{
coverage = 0;
}

reportTextWriter.WriteLine($"FNDA:{coverage.ToString(CultureInfo.InvariantCulture)},{codeElement.Name}");
}
}

// FNF:<number of functions found>
reportTextWriter.WriteLine($"FNF:{file.TotalCodeElements.ToString(CultureInfo.InvariantCulture)}");

// FNH:<number of function hit>
reportTextWriter.WriteLine($"FNH:{file.CoveredCodeElements.ToString(CultureInfo.InvariantCulture)}");

foreach (var branchesOfLine in file.BranchesByLine)
{
foreach (var branch in branchesOfLine.Value)
{
string visits = branch.BranchVisits > 0 ? branch.BranchVisits.ToString(CultureInfo.InvariantCulture) : "-";

// BRDA:<line number>,<block number>,<branch number>,<taken>
reportTextWriter.WriteLine($"BRDA:{branchesOfLine.Key.ToString(CultureInfo.InvariantCulture)},{branchesOfLine.Key.ToString(CultureInfo.InvariantCulture)},{branchCounter++.ToString(CultureInfo.InvariantCulture)},{visits}");
}
}

// BRF:<number of branches found>
reportTextWriter.WriteLine($"BRF:{file.TotalBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)}");

// BRH:<number of branches hit>
reportTextWriter.WriteLine($"BRH:{file.CoveredBranches.GetValueOrDefault().ToString(CultureInfo.InvariantCulture)}");

int coveredLines = 0;
int instrumentedLines = 0;

Expand All @@ -85,6 +127,7 @@ public void CreateSummaryReport(SummaryResult summaryResult)

if (coverage >= 0)
{
// DA:<line number>,<execution count>[,<checksum>]
reportTextWriter.WriteLine($"DA:{i.ToString(CultureInfo.InvariantCulture)},{coverage.ToString(CultureInfo.InvariantCulture)}");

instrumentedLines++;
Expand All @@ -96,13 +139,26 @@ public void CreateSummaryReport(SummaryResult summaryResult)
}
}

// LF:<number of instrumented lines>
reportTextWriter.WriteLine($"LF:{instrumentedLines.ToString(CultureInfo.InvariantCulture)}");

// LH:<number of lines with a non-zero execution count>
reportTextWriter.WriteLine($"LH:{coveredLines.ToString(CultureInfo.InvariantCulture)}");

// LF:<number of instrumented lines>
reportTextWriter.WriteLine($"LF:{instrumentedLines.ToString(CultureInfo.InvariantCulture)}");

reportTextWriter.WriteLine("end_of_record");

/*
* Branch coverage summaries are stored in two lines:
BRF:<number of branches found>
BRH:<number of branches hit>
BRDA: 8,43,0,1
BRDA: 8,43,1,1
BRF: 2
BRH: 2*/



}
}
}
Expand Down

0 comments on commit 77ca13c

Please sign in to comment.