Skip to content

Commit f8a119a

Browse files
authored
Merge pull request #210 from tonyhallett/include-referenced-projects
option to add referenced projects to include. Also contains a correc…
2 parents bce7a33 + c1d0fcf commit f8a119a

File tree

8 files changed

+52
-7
lines changed

8 files changed

+52
-7
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ RunWhenTestsFail By default coverage runs when tests fail. Set to false t
120120
RunWhenTestsExceed Specify a value to only run coverage based upon the number of executing tests. **Cannot be used in conjunction with RunInParallel**
121121
Exclude Filter expressions to exclude specific modules and types (multiple values)
122122
Include Filter expressions to include specific modules and types (multiple values)
123+
IncludeReferencedProjects Set to true to add all referenced projects to Include.
123124
ExcludeByFile Glob patterns specifying source files to exclude e.g. **/Migrations/* (multiple values)
124125
ExcludeByAttribute Attributes to exclude from code coverage (multiple values)
125126
IncludeTestAssembly Specifies whether to report code coverage of the test assembly

SharedProject/Core/Coverlet/Console/CoverletConsoleUtil.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ internal List<string> GetCoverletSettings(ICoverageProject project)
8585
coverletSettings.Add($@"--include ""{value.Replace("\"", "\\\"").Trim(' ', '\'')}""");
8686
}
8787

88+
foreach (var includedReferencedProject in project.IncludedReferencedProjects)
89+
{
90+
coverletSettings.Add($@"--include ""[{includedReferencedProject}]*""");
91+
}
92+
8893
foreach (var value in (project.Settings.ExcludeByFile ?? new string[0]).Where(x => !string.IsNullOrWhiteSpace(x)))
8994
{
9095
coverletSettings.Add($@"--exclude-by-file ""{value.Replace("\"", "\\\"").Trim(' ', '\'')}""");

SharedProject/Core/Coverlet/DataCollector/CoverletDataCollectorUtil.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ private string GetSettings()
135135
dataCollectorSettingsBuilder
136136
.WithResultsDirectory(coverageProject.CoverageOutputFolder);
137137

138-
string[] projectExcludes = coverageProject.ExcludedReferencedProjects.ToArray();
138+
string[] projectExcludes = coverageProject.ExcludedReferencedProjects.Select(erp => $"[{erp}]*").ToArray();
139139
if(coverageProject.Settings.Exclude != null)
140140
{
141141
projectExcludes = projectExcludes.Concat(coverageProject.Settings.Exclude).ToArray();
@@ -148,8 +148,15 @@ private string GetSettings()
148148
.WithExcludeByFile(coverageProject.Settings.ExcludeByFile, runSettingsCoverletConfiguration.ExcludeByFile);
149149
dataCollectorSettingsBuilder
150150
.WithExcludeByAttribute(coverageProject.Settings.ExcludeByAttribute, runSettingsCoverletConfiguration.ExcludeByAttribute);
151+
152+
string[] projectIncludes = coverageProject.IncludedReferencedProjects.Select(irp => $"[{irp}]*").ToArray();
153+
if(coverageProject.Settings.Include != null)
154+
{
155+
projectIncludes = projectIncludes.Concat(coverageProject.Settings.Include).ToArray();
156+
}
157+
151158
dataCollectorSettingsBuilder
152-
.WithInclude(coverageProject.Settings.Include, runSettingsCoverletConfiguration.Include);
159+
.WithInclude(projectIncludes, runSettingsCoverletConfiguration.Include);
153160
dataCollectorSettingsBuilder
154161
.WithIncludeTestAssembly(coverageProject.Settings.IncludeTestAssembly, runSettingsCoverletConfiguration.IncludeTestAssembly);
155162

SharedProject/Core/Model/CoverageProject.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ public XElement ProjectFileXElement
351351
}
352352
}
353353
public List<string> ExcludedReferencedProjects { get; } = new List<string>();
354+
public List<string> IncludedReferencedProjects { get; set; } = new List<string>();
354355
public bool Is64Bit { get; set; }
355356
public string RunSettingsFile { get; set; }
356357

@@ -384,17 +385,25 @@ public async System.Threading.Tasks.Task PrepareForCoverageAsync()
384385
EnsureDirectories();
385386
CleanFCCDirectory();
386387
SynchronizeBuildOutput();
387-
await SetExcludedReferencedProjectsAsync();
388+
await SetIncludedExcludedReferencedProjectsAsync();
388389
}
389390

390-
private async System.Threading.Tasks.Task SetExcludedReferencedProjectsAsync()
391+
private async System.Threading.Tasks.Task SetIncludedExcludedReferencedProjectsAsync()
391392
{
392-
List<ReferencedProject> referencedProjects = await SafeGetReferencedProjectsFromDteAsync();
393+
List<ReferencedProject> referencedProjects = await GetReferencedProjectsAsync();
394+
SetExcludedReferencedProjects(referencedProjects);
395+
SetIncludedReferencedProjects(referencedProjects);
396+
}
393397

394-
if (referencedProjects == null)
398+
private void SetIncludedReferencedProjects(List<ReferencedProject> referencedProjects)
399+
{
400+
if (settings.IncludeReferencedProjects)
395401
{
396-
referencedProjects = await GetReferencedProjectsFromProjectFileAsync();
402+
IncludedReferencedProjects = referencedProjects.Select(referencedProject => referencedProject.AssemblyName).ToList();
397403
}
404+
}
405+
private void SetExcludedReferencedProjects(List<ReferencedProject> referencedProjects)
406+
{
398407
foreach (var referencedProject in referencedProjects)
399408
{
400409
if (referencedProject.ExcludeFromCodeCoverage)
@@ -403,6 +412,18 @@ private async System.Threading.Tasks.Task SetExcludedReferencedProjectsAsync()
403412
}
404413
}
405414
}
415+
416+
private async Task<List<ReferencedProject>> GetReferencedProjectsAsync()
417+
{
418+
List<ReferencedProject> referencedProjects = await SafeGetReferencedProjectsFromDteAsync();
419+
420+
if (referencedProjects == null)
421+
{
422+
referencedProjects = await GetReferencedProjectsFromProjectFileAsync();
423+
}
424+
return referencedProjects;
425+
}
426+
406427
private async Task<List<ReferencedProject>> SafeGetReferencedProjectsFromDteAsync()
407428
{
408429
try

SharedProject/Core/Model/ICoverageProject.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ internal interface ICoverageProject
1313
string CoverageOutputFolder { get; set; }
1414
string DefaultCoverageOutputFolder { get; }
1515
List<string> ExcludedReferencedProjects { get; }
16+
List<string> IncludedReferencedProjects { get; }
1617
string FailureDescription { get; set; }
1718
string FailureStage { get; set; }
1819
bool HasFailed { get; }

SharedProject/Core/OpenCover/OpenCoverUtil.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ public async Task<bool> RunOpenCoverAsync(ICoverageProject project, bool throwEr
9494
filters.Add($@"+{value.Replace("\"", "\\\"").Trim(' ', '\'')}");
9595
}
9696

97+
foreach (var includedReferencedProject in project.IncludedReferencedProjects)
98+
{
99+
filters.Add($@"+[{includedReferencedProject}]*");
100+
}
101+
97102
if (!filters.Any())
98103
{
99104
filters.Add(defaultFilter);

SharedProject/Options/AppOptions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ internal AppOptions(bool isReadOnly)
7575
")]
7676
public string[] Include { get; set; }
7777

78+
[Category(excludeIncludeCategory)]
79+
[Description("Set to true to add all referenced projects to Include.")]
80+
public bool IncludeReferencedProjects { get; set; }
81+
7882
[Category(excludeIncludeCategory)]
7983
[Description(
8084
@"Glob patterns specifying source files to exclude (multiple)

SharedProject/Options/IAppOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,6 @@ public interface IAppOptions
2626
bool NamespacedClasses { get; }
2727
bool HideFullyCovered { get; }
2828
bool AdjacentBuildOutput { get; }
29+
bool IncludeReferencedProjects { get; }
2930
}
3031
}

0 commit comments

Comments
 (0)