Skip to content

Commit a4a1bc0

Browse files
committed
add extra option to include test assembly in coverage
1 parent 4be5365 commit a4a1bc0

File tree

8 files changed

+38
-11
lines changed

8 files changed

+38
-11
lines changed

src/coverlet.console/Program.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ static int Main(string[] args)
3838
CommandOption excludedSourceFiles = app.Option("--exclude-by-file", "Glob patterns specifying source files to exclude.", CommandOptionType.MultipleValue);
3939
CommandOption includeDirectories = app.Option("--include-directory", "Include directories containing additional assemblies to be instrumented.", CommandOptionType.MultipleValue);
4040
CommandOption excludeAttributes = app.Option("--exclude-by-attribute", "Attributes to exclude from code coverage.", CommandOptionType.MultipleValue);
41+
CommandOption includeTestAssembly = app.Option("--include-test-assembly", "Specifies whether to report code coverage of the test assembly", CommandOptionType.NoValue);
4142
CommandOption singleHit = app.Option("--single-hit", "Specifies whether to limit code coverage hit reporting to a single hit for each location", CommandOptionType.NoValue);
4243
CommandOption mergeWith = app.Option("--merge-with", "Path to existing coverage result to merge.", CommandOptionType.SingleValue);
4344
CommandOption useSourceLink = app.Option("--use-source-link", "Specifies whether to use SourceLink URIs in place of file system paths.", CommandOptionType.NoValue);
@@ -50,7 +51,17 @@ static int Main(string[] args)
5051
if (!target.HasValue())
5152
throw new CommandParsingException(app, "Target must be specified.");
5253

53-
Coverage coverage = new Coverage(module.Value, includeFilters.Values.ToArray(), includeDirectories.Values.ToArray(), excludeFilters.Values.ToArray(), excludedSourceFiles.Values.ToArray(), excludeAttributes.Values.ToArray(), singleHit.HasValue(), mergeWith.Value(), useSourceLink.HasValue(), logger);
54+
Coverage coverage = new Coverage(module.Value,
55+
includeFilters.Values.ToArray(),
56+
includeDirectories.Values.ToArray(),
57+
excludeFilters.Values.ToArray(),
58+
excludedSourceFiles.Values.ToArray(),
59+
excludeAttributes.Values.ToArray(),
60+
includeTestAssembly.HasValue(),
61+
singleHit.HasValue(),
62+
mergeWith.Value(),
63+
useSourceLink.HasValue(),
64+
logger);
5465
coverage.PrepareModules();
5566

5667
Process process = new Process();

src/coverlet.core/Coverage.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class Coverage
2121
private string[] _excludeFilters;
2222
private string[] _excludedSourceFiles;
2323
private string[] _excludeAttributes;
24+
private bool _includeTestAssembly;
2425
private bool _singleHit;
2526
private string _mergeWith;
2627
private bool _useSourceLink;
@@ -38,6 +39,7 @@ public Coverage(string module,
3839
string[] excludeFilters,
3940
string[] excludedSourceFiles,
4041
string[] excludeAttributes,
42+
bool includeTestAssembly,
4143
bool singleHit,
4244
string mergeWith,
4345
bool useSourceLink,
@@ -49,6 +51,7 @@ public Coverage(string module,
4951
_excludeFilters = excludeFilters;
5052
_excludedSourceFiles = excludedSourceFiles;
5153
_excludeAttributes = excludeAttributes;
54+
_includeTestAssembly = includeTestAssembly;
5255
_singleHit = singleHit;
5356
_mergeWith = mergeWith;
5457
_useSourceLink = useSourceLink;
@@ -60,7 +63,7 @@ public Coverage(string module,
6063

6164
public void PrepareModules()
6265
{
63-
string[] modules = InstrumentationHelper.GetCoverableModules(_module, _includeDirectories);
66+
string[] modules = InstrumentationHelper.GetCoverableModules(_module, _includeDirectories, _includeTestAssembly);
6467
string[] excludes = InstrumentationHelper.GetExcludedFiles(_excludedSourceFiles);
6568

6669
Array.ForEach(_excludeFilters ?? Array.Empty<string>(), filter => _logger.LogInformation($"Excluded module filter '{filter}'"));

src/coverlet.core/Helpers/InstrumentationHelper.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Coverlet.Core.Helpers
1414
{
1515
internal static class InstrumentationHelper
1616
{
17-
public static string[] GetCoverableModules(string module, string[] directories)
17+
public static string[] GetCoverableModules(string module, string[] directories, bool includeTestAssembly)
1818
{
1919
Debug.Assert(directories != null);
2020

@@ -50,6 +50,9 @@ public static string[] GetCoverableModules(string module, string[] directories)
5050
// The module's name must be unique.
5151
var uniqueModules = new HashSet<string>();
5252

53+
if (!includeTestAssembly)
54+
uniqueModules.Add(Path.GetFileName(module));
55+
5356
return dirs.SelectMany(d => Directory.EnumerateFiles(d))
5457
.Where(m => IsAssembly(m) && uniqueModules.Add(Path.GetFileName(m)))
5558
.ToArray();

src/coverlet.msbuild.tasks/InstrumentationTask.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class InstrumentationTask : Task
1414
private string _exclude;
1515
private string _excludeByFile;
1616
private string _excludeByAttribute;
17+
private bool _includeTestAssembly;
1718
private bool _singleHit;
1819
private string _mergeWith;
1920
private bool _useSourceLink;
@@ -61,6 +62,12 @@ public string ExcludeByAttribute
6162
set { _excludeByAttribute = value; }
6263
}
6364

65+
public bool IncludeTestAssembly
66+
{
67+
get { return _includeTestAssembly; }
68+
set { _includeTestAssembly = value; }
69+
}
70+
6471
public bool SingleHit
6572
{
6673
get { return _singleHit; }
@@ -94,7 +101,7 @@ public override bool Execute()
94101
var excludedSourceFiles = _excludeByFile?.Split(',');
95102
var excludeAttributes = _excludeByAttribute?.Split(',');
96103

97-
_coverage = new Coverage(_path, includeFilters, includeDirectories, excludeFilters, excludedSourceFiles, excludeAttributes, _singleHit, _mergeWith, _useSourceLink, _logger);
104+
_coverage = new Coverage(_path, includeFilters, includeDirectories, excludeFilters, excludedSourceFiles, excludeAttributes, _includeTestAssembly, _singleHit, _mergeWith, _useSourceLink, _logger);
98105
_coverage.PrepareModules();
99106
}
100107
catch (Exception ex)

src/coverlet.msbuild.tasks/coverlet.msbuild.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<Exclude Condition="$(Exclude) == ''"></Exclude>
77
<ExcludeByFile Condition="$(ExcludeByFile) == ''"></ExcludeByFile>
88
<ExcludeByAttribute Condition="$(ExcludeByAttribute) == ''"></ExcludeByAttribute>
9+
<IncludeTestAssembly Condition="'$(IncludeTestAssembly)' == ''">false</IncludeTestAssembly>
910
<SingleHit Condition="'$(SingleHit)' == ''">false</SingleHit>
1011
<MergeWith Condition="$(MergeWith) == ''"></MergeWith>
1112
<UseSourceLink Condition="$(UseSourceLink) == ''">false</UseSourceLink>

src/coverlet.msbuild.tasks/coverlet.msbuild.targets

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
Exclude="$(Exclude)"
1313
ExcludeByFile="$(ExcludeByFile)"
1414
ExcludeByAttribute="$(ExcludeByAttribute)"
15+
IncludeTestAssembly="$(IncludeTestAssembly)"
1516
SingleHit="$(SingleHit)"
1617
MergeWith="$(MergeWith)"
1718
UseSourceLink="$(UseSourceLink)" />
@@ -26,6 +27,7 @@
2627
Exclude="$(Exclude)"
2728
ExcludeByFile="$(ExcludeByFile)"
2829
ExcludeByAttribute="$(ExcludeByAttribute)"
30+
IncludeTestAssembly="$(IncludeTestAssembly)"
2931
SingleHit="$(SingleHit)"
3032
MergeWith="$(MergeWith)"
3133
UseSourceLink="$(UseSourceLink)" />

test/coverlet.core.tests/CoverageTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ public void TestCoverage()
2222

2323
// TODO: Find a way to mimick hits
2424

25-
var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), false, string.Empty, false, new Mock<ILogger>().Object);
25+
var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), Array.Empty<string>(), false, false, string.Empty, false, new Mock<ILogger>().Object);
2626
coverage.PrepareModules();
2727

2828
var result = coverage.GetCoverageResult();
2929

30-
Assert.NotEmpty(result.Modules);
30+
Assert.Empty(result.Modules);
3131

3232
directory.Delete(true);
3333
}

test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class InstrumentationHelperTests
1212
public void TestGetDependencies()
1313
{
1414
string module = typeof(InstrumentationHelperTests).Assembly.Location;
15-
var modules = InstrumentationHelper.GetCoverableModules(module, Array.Empty<string>());
16-
Assert.True(Array.Exists(modules, m => m == module));
15+
var modules = InstrumentationHelper.GetCoverableModules(module, Array.Empty<string>(), false);
16+
Assert.False(Array.Exists(modules, m => m == module));
1717
}
1818

1919
[Fact]
@@ -235,16 +235,16 @@ public void TestIncludeDirectories()
235235
string module = typeof(InstrumentationHelperTests).Assembly.Location;
236236

237237
var currentDirModules = InstrumentationHelper.GetCoverableModules(module,
238-
new[] { Environment.CurrentDirectory });
238+
new[] { Environment.CurrentDirectory }, false);
239239

240240
var parentDirWildcardModules = InstrumentationHelper.GetCoverableModules(module,
241-
new[] { Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "*") });
241+
new[] { Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "*") }, false);
242242

243243
// There are at least as many modules found when searching the parent directory's subdirectories
244244
Assert.True(parentDirWildcardModules.Length >= currentDirModules.Length);
245245

246246
var relativePathModules = InstrumentationHelper.GetCoverableModules(module,
247-
new[] { "." });
247+
new[] { "." }, false);
248248

249249
// Same number of modules found when using a relative path
250250
Assert.Equal(currentDirModules.Length, relativePathModules.Length);

0 commit comments

Comments
 (0)