Skip to content

Commit 2b2e96e

Browse files
committed
#366: Clover: Filtering of test projects (settings:excludeTestProjects=true)
1 parent b41fce9 commit 2b2e96e

File tree

5 files changed

+55
-2
lines changed

5 files changed

+55
-2
lines changed

src/Readme.txt

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ CHANGELOG
6666
4.6.3.0
6767

6868
* New: #364: Added tooltips to show coverage as ratio
69+
* New: #366: Clover: Filtering of test projects (settings:excludeTestProjects=true)
6970

7071
4.6.2.0
7172

src/ReportGenerator.Core/Generator.cs

+1
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public bool GenerateReport(
126126
var parserResult = new CoverageReportParser(
127127
settings.NumberOfReportsParsedInParallel,
128128
settings.NumberOfReportsMergedInParallel,
129+
settings.ExcludeTestProjects,
129130
reportConfiguration.SourceDirectories,
130131
new DefaultFilter(reportConfiguration.AssemblyFilters),
131132
new DefaultFilter(reportConfiguration.ClassFilters),

src/ReportGenerator.Core/Parser/CloverParser.cs

+21-1
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,33 @@ internal class CloverParser : ParserBase
2222
/// </summary>
2323
private static readonly ILogger Logger = LoggerFactory.GetLogger(typeof(CloverParser));
2424

25+
/// <summary>
26+
/// Indicates whether test projects should be included.
27+
/// </summary>
28+
private readonly bool excludeTestProjects;
29+
2530
/// <summary>
2631
/// Initializes a new instance of the <see cref="CloverParser" /> class.
2732
/// </summary>
2833
/// <param name="assemblyFilter">The assembly filter.</param>
2934
/// <param name="classFilter">The class filter.</param>
3035
/// <param name="fileFilter">The file filter.</param>
3136
internal CloverParser(IFilter assemblyFilter, IFilter classFilter, IFilter fileFilter)
37+
: this(assemblyFilter, classFilter, fileFilter, false)
38+
{
39+
}
40+
41+
/// <summary>
42+
/// Initializes a new instance of the <see cref="CloverParser" /> class.
43+
/// </summary>
44+
/// <param name="assemblyFilter">The assembly filter.</param>
45+
/// <param name="classFilter">The class filter.</param>
46+
/// <param name="fileFilter">The file filter.</param>
47+
/// <param name="excludeTestProjects">Indicates whether test projects should be included.</param>
48+
internal CloverParser(IFilter assemblyFilter, IFilter classFilter, IFilter fileFilter, bool excludeTestProjects)
3249
: base(assemblyFilter, classFilter, fileFilter)
3350
{
51+
this.excludeTestProjects = excludeTestProjects;
3452
}
3553

3654
/// <summary>
@@ -47,8 +65,10 @@ public ParserResult Parse(XContainer report)
4765

4866
var assemblies = new List<Assembly>();
4967

50-
var modules = report.Descendants("package")
68+
var modules = report
69+
.Descendants("package")
5170
.Where(p => p.Attribute("name") != null)
71+
.Where(p => !this.excludeTestProjects || p.Parent.Name != "testproject")
5272
.ToArray();
5373

5474
if (modules.Length == 0)

src/ReportGenerator.Core/Parser/CoverageReportParser.cs

+27-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ public class CoverageReportParser
3535
/// </summary>
3636
private readonly int numberOfReportsMergedInParallel;
3737

38+
/// <summary>
39+
/// Indicates whether test projects should be included.
40+
/// </summary>
41+
private readonly bool excludeTestProjects;
42+
3843
/// <summary>
3944
/// The source directories.
4045
/// </summary>
@@ -79,6 +84,27 @@ public CoverageReportParser(int numberOfReportsParsedInParallel, int numberOfRep
7984
this.fileFilter = fileFilter ?? throw new ArgumentNullException(nameof(fileFilter));
8085
}
8186

87+
/// <summary>
88+
/// Initializes a new instance of the <see cref="CoverageReportParser" /> class.
89+
/// </summary>
90+
/// <param name="numberOfReportsParsedInParallel">The number reports that are parsed and processed in parallel.</param>
91+
/// <param name="numberOfReportsMergedInParallel">The number reports that are merged in parallel.</param>
92+
/// <param name="excludeTestProjects">Indicates whether test projects should be included.</param>
93+
/// <param name="sourceDirectories">The source directories.</param>
94+
/// <param name="assemblyFilter">The assembly filter.</param>
95+
/// <param name="classFilter">The class filter.</param>
96+
/// <param name="fileFilter">The file filter.</param>
97+
public CoverageReportParser(int numberOfReportsParsedInParallel, int numberOfReportsMergedInParallel, bool excludeTestProjects, IEnumerable<string> sourceDirectories, IFilter assemblyFilter, IFilter classFilter, IFilter fileFilter)
98+
{
99+
this.numberOfReportsParsedInParallel = Math.Max(1, numberOfReportsParsedInParallel);
100+
this.numberOfReportsMergedInParallel = Math.Max(1, numberOfReportsMergedInParallel);
101+
this.excludeTestProjects = excludeTestProjects;
102+
this.sourceDirectories = sourceDirectories ?? throw new ArgumentNullException(nameof(sourceDirectories));
103+
this.assemblyFilter = assemblyFilter ?? throw new ArgumentNullException(nameof(assemblyFilter));
104+
this.classFilter = classFilter ?? throw new ArgumentNullException(nameof(classFilter));
105+
this.fileFilter = fileFilter ?? throw new ArgumentNullException(nameof(fileFilter));
106+
}
107+
82108
/// <summary>
83109
/// Tries to initiate the correct parsers for the given reports.
84110
/// </summary>
@@ -342,7 +368,7 @@ private IEnumerable<ParserResult> ParseXmlFile(string filePath)
342368
new CloverReportPreprocessor(this.sourceDirectories).Execute(item);
343369

344370
Logger.DebugFormat(Resources.InitiatingParser, "Clover");
345-
var result = new CloverParser(this.assemblyFilter, this.classFilter, this.fileFilter).Parse(item);
371+
var result = new CloverParser(this.assemblyFilter, this.classFilter, this.fileFilter, this.excludeTestProjects).Parse(item);
346372

347373
foreach (var sourceDirectory in this.sourceDirectories)
348374
{

src/ReportGenerator.Core/Settings.cs

+5
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,10 @@ public int CachingDuringOfRemoteFilesInMinutes
5555
/// Gets or sets a value indicating whether risk hotspots should be disabled or not.
5656
/// </summary>
5757
public bool DisableRiskHotspots { get; set; } = false;
58+
59+
/// <summary>
60+
/// Gets or sets a value indicating whether test projects should be included or not (only for Clover files).
61+
/// </summary>
62+
public bool ExcludeTestProjects { get; set; } = false;
5863
}
5964
}

0 commit comments

Comments
 (0)