mirror of
https://github.com/irongut/CodeCoverageSummary.git
synced 2026-05-19 16:30:14 +02:00
support multiple cobertura files in CLI #19
This commit is contained in:
@@ -31,9 +31,6 @@ namespace CodeCoverageSummary
|
|||||||
|
|
||||||
public List<CodeCoverage> Packages { get; set; }
|
public List<CodeCoverage> Packages { get; set; }
|
||||||
|
|
||||||
public CodeSummary()
|
public CodeSummary() => Packages = new();
|
||||||
{
|
|
||||||
Packages = new List<CodeCoverage>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
using CommandLine;
|
using CommandLine;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace CodeCoverageSummary
|
namespace CodeCoverageSummary
|
||||||
{
|
{
|
||||||
public class CommandLineOptions
|
public class CommandLineOptions
|
||||||
{
|
{
|
||||||
[Value(index: 0, Required = true, HelpText = "Code coverage file to analyse.")]
|
[Option(longName: "files", Separator = ',', Required = true, HelpText = "A comma separated list of code coverage files to analyse.")]
|
||||||
public string Filename { get; set; }
|
public IEnumerable<string> Files { get; set; }
|
||||||
|
|
||||||
[Option(longName: "badge", Required = false, HelpText = "Include a Line Rate coverage badge in the output using shields.io - true or false.", Default = "false")]
|
[Option(longName: "badge", Required = false, HelpText = "Include a Line Rate coverage badge in the output using shields.io - true or false.", Default = "false")]
|
||||||
public string BadgeString { get; set; }
|
public string BadgeString { get; set; }
|
||||||
|
|||||||
@@ -19,18 +19,29 @@ namespace CodeCoverageSummary
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!File.Exists(o.Filename))
|
// check files exist
|
||||||
|
foreach (var file in o.Files)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Code coverage file not found.");
|
if (!File.Exists(file))
|
||||||
return -2; // error
|
{
|
||||||
|
Console.WriteLine($"Error: Code coverage file not found - {file}.");
|
||||||
|
return -2; // error
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse code coverage file
|
// parse code coverage file
|
||||||
Console.WriteLine($"Code Coverage File: {o.Filename}");
|
CodeSummary summary = new();
|
||||||
CodeSummary summary = ParseTestResults(o.Filename);
|
foreach (var file in o.Files)
|
||||||
if (summary == null)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine("Error: Parsing code coverage file.");
|
Console.WriteLine($"Code Coverage File: {file}");
|
||||||
|
summary = ParseTestResults(file, summary);
|
||||||
|
}
|
||||||
|
summary.LineRate /= o.Files.Count();
|
||||||
|
summary.BranchRate /= o.Files.Count();
|
||||||
|
|
||||||
|
if (summary.Packages.Count == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Error: Parsing code coverage file, no packages found.");
|
||||||
return -2; // error
|
return -2; // error
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -103,9 +114,9 @@ namespace CodeCoverageSummary
|
|||||||
_ => -1); // invalid arguments
|
_ => -1); // invalid arguments
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CodeSummary ParseTestResults(string filename)
|
private static CodeSummary ParseTestResults(string filename, CodeSummary summary)
|
||||||
{
|
{
|
||||||
CodeSummary summary = new();
|
//CodeSummary summary = new();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string rss = File.ReadAllText(filename);
|
string rss = File.ReadAllText(filename);
|
||||||
@@ -118,34 +129,32 @@ namespace CodeCoverageSummary
|
|||||||
var lineR = from item in coverage.Attributes()
|
var lineR = from item in coverage.Attributes()
|
||||||
where item.Name == "line-rate"
|
where item.Name == "line-rate"
|
||||||
select item;
|
select item;
|
||||||
summary.LineRate = double.Parse(lineR.First().Value);
|
summary.LineRate += double.Parse(lineR.First().Value);
|
||||||
|
|
||||||
var linesCovered = from item in coverage.Attributes()
|
var linesCovered = from item in coverage.Attributes()
|
||||||
where item.Name == "lines-covered"
|
where item.Name == "lines-covered"
|
||||||
select item;
|
select item;
|
||||||
summary.LinesCovered = int.Parse(linesCovered.First().Value);
|
summary.LinesCovered += int.Parse(linesCovered.First().Value);
|
||||||
|
|
||||||
var linesValid = from item in coverage.Attributes()
|
var linesValid = from item in coverage.Attributes()
|
||||||
where item.Name == "lines-valid"
|
where item.Name == "lines-valid"
|
||||||
select item;
|
select item;
|
||||||
summary.LinesValid = int.Parse(linesValid.First().Value);
|
summary.LinesValid += int.Parse(linesValid.First().Value);
|
||||||
|
|
||||||
var branchR = from item in coverage.Attributes()
|
var branchR = from item in coverage.Attributes()
|
||||||
where item.Name == "branch-rate"
|
where item.Name == "branch-rate"
|
||||||
select item;
|
select item;
|
||||||
summary.BranchRate = double.Parse(branchR.First().Value);
|
summary.BranchRate += double.Parse(branchR.First().Value);
|
||||||
|
|
||||||
var branchesCovered = from item in coverage.Attributes()
|
var branchesCovered = from item in coverage.Attributes()
|
||||||
where item.Name == "branches-covered"
|
where item.Name == "branches-covered"
|
||||||
select item;
|
select item;
|
||||||
summary.BranchesCovered = int.Parse(branchesCovered.First().Value);
|
summary.BranchesCovered += int.Parse(branchesCovered.First().Value);
|
||||||
|
|
||||||
var branchesValid = from item in coverage.Attributes()
|
var branchesValid = from item in coverage.Attributes()
|
||||||
where item.Name == "branches-valid"
|
where item.Name == "branches-valid"
|
||||||
select item;
|
select item;
|
||||||
summary.BranchesValid = int.Parse(branchesValid.First().Value);
|
summary.BranchesValid += int.Parse(branchesValid.First().Value);
|
||||||
|
|
||||||
summary.Complexity = 0;
|
|
||||||
|
|
||||||
// test coverage for individual packages
|
// test coverage for individual packages
|
||||||
var packages = from item in coverage.Descendants("package")
|
var packages = from item in coverage.Descendants("package")
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"profiles": {
|
"profiles": {
|
||||||
"CodeCoverageSummary": {
|
"CodeCoverageSummary": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"commandLineArgs": "../../../../coverage.cobertura.xml --format=md --badge true --thresholds=\"85 90\" --fail true"
|
"commandLineArgs": "--files ../../../../coverage.cobertura.xml,../../../../coverage.cobertura.xml --format=text --badge true --thresholds=\"85 90\" --fail true"
|
||||||
},
|
},
|
||||||
"Docker": {
|
"Docker": {
|
||||||
"commandName": "Docker",
|
"commandName": "Docker",
|
||||||
|
|||||||
Reference in New Issue
Block a user