diff --git a/src/coverlet.collector/DataCollection/CoverageWrapper.cs b/src/coverlet.collector/DataCollection/CoverageWrapper.cs
index 2beef27..e65a918 100644
--- a/src/coverlet.collector/DataCollection/CoverageWrapper.cs
+++ b/src/coverlet.collector/DataCollection/CoverageWrapper.cs
@@ -17,17 +17,22 @@ namespace Coverlet.Collector.DataCollection
/// Coverage object
public Coverage CreateCoverage(CoverletSettings settings, ILogger coverletLogger, IInstrumentationHelper instrumentationHelper, IFileSystem fileSystem, ISourceRootTranslator sourceRootTranslator, ICecilSymbolHelper cecilSymbolHelper)
{
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = settings.IncludeFilters,
+ IncludeDirectories = settings.IncludeDirectories,
+ ExcludeFilters = settings.ExcludeFilters,
+ ExcludedSourceFiles = settings.ExcludeSourceFiles,
+ ExcludeAttributes = settings.ExcludeAttributes,
+ IncludeTestAssembly = settings.IncludeTestAssembly,
+ SingleHit = settings.SingleHit,
+ MergeWith = settings.MergeWith,
+ UseSourceLink = settings.UseSourceLink
+ };
+
return new Coverage(
settings.TestModule,
- settings.IncludeFilters,
- settings.IncludeDirectories,
- settings.ExcludeFilters,
- settings.ExcludeSourceFiles,
- settings.ExcludeAttributes,
- settings.IncludeTestAssembly,
- settings.SingleHit,
- settings.MergeWith,
- settings.UseSourceLink,
+ parameters,
coverletLogger,
instrumentationHelper,
fileSystem,
diff --git a/src/coverlet.console/Program.cs b/src/coverlet.console/Program.cs
index 2493857..16cc7fa 100644
--- a/src/coverlet.console/Program.cs
+++ b/src/coverlet.console/Program.cs
@@ -34,7 +34,7 @@ namespace Coverlet.Console
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
- var logger = (ConsoleLogger) serviceProvider.GetService();
+ var logger = (ConsoleLogger)serviceProvider.GetService();
var fileSystem = serviceProvider.GetService();
var app = new CommandLineApplication();
@@ -76,22 +76,28 @@ namespace Coverlet.Console
// Adjust log level based on user input.
logger.Level = verbosity.ParsedValue;
}
+
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = includeFilters.Values.ToArray(),
+ IncludeDirectories = includeDirectories.Values.ToArray(),
+ ExcludeFilters = excludeFilters.Values.ToArray(),
+ ExcludedSourceFiles = excludedSourceFiles.Values.ToArray(),
+ ExcludeAttributes = excludeAttributes.Values.ToArray(),
+ IncludeTestAssembly = includeTestAssembly.HasValue(),
+ SingleHit = singleHit.HasValue(),
+ MergeWith = mergeWith.Value(),
+ UseSourceLink = useSourceLink.HasValue()
+ };
+
Coverage coverage = new Coverage(module.Value,
- includeFilters.Values.ToArray(),
- includeDirectories.Values.ToArray(),
- excludeFilters.Values.ToArray(),
- excludedSourceFiles.Values.ToArray(),
- excludeAttributes.Values.ToArray(),
- includeTestAssembly.HasValue(),
- singleHit.HasValue(),
- mergeWith.Value(),
- useSourceLink.HasValue(),
- logger,
- serviceProvider.GetRequiredService(),
- fileSystem,
- serviceProvider.GetRequiredService(),
- serviceProvider.GetRequiredService());
- coverage.PrepareModules();
+ parameters,
+ logger,
+ serviceProvider.GetRequiredService(),
+ fileSystem,
+ serviceProvider.GetRequiredService(),
+ serviceProvider.GetRequiredService());
+ coverage.PrepareModules();
Process process = new Process();
process.StartInfo.FileName = target.Value();
diff --git a/src/coverlet.core/Coverage.cs b/src/coverlet.core/Coverage.cs
index f3d83aa..d0de3fa 100644
--- a/src/coverlet.core/Coverage.cs
+++ b/src/coverlet.core/Coverage.cs
@@ -10,6 +10,20 @@ using Newtonsoft.Json.Linq;
namespace Coverlet.Core
{
+ internal class CoverageParameters
+ {
+ public string Module { get; set; }
+ public string[] IncludeFilters { get; set; }
+ public string[] IncludeDirectories { get; set; }
+ public string[] ExcludeFilters { get; set; }
+ public string[] ExcludedSourceFiles { get; set; }
+ public string[] ExcludeAttributes { get; set; }
+ public bool IncludeTestAssembly { get; set; }
+ public bool SingleHit { get; set; }
+ public string MergeWith { get; set; }
+ public bool UseSourceLink { get; set; }
+ }
+
internal class Coverage
{
private string _module;
@@ -36,15 +50,7 @@ namespace Coverlet.Core
}
public Coverage(string module,
- string[] includeFilters,
- string[] includeDirectories,
- string[] excludeFilters,
- string[] excludedSourceFiles,
- string[] excludeAttributes,
- bool includeTestAssembly,
- bool singleHit,
- string mergeWith,
- bool useSourceLink,
+ CoverageParameters parameters,
ILogger logger,
IInstrumentationHelper instrumentationHelper,
IFileSystem fileSystem,
@@ -52,15 +58,15 @@ namespace Coverlet.Core
ICecilSymbolHelper cecilSymbolHelper)
{
_module = module;
- _includeFilters = includeFilters;
- _includeDirectories = includeDirectories ?? Array.Empty();
- _excludeFilters = excludeFilters;
- _excludedSourceFiles = excludedSourceFiles;
- _excludeAttributes = excludeAttributes;
- _includeTestAssembly = includeTestAssembly;
- _singleHit = singleHit;
- _mergeWith = mergeWith;
- _useSourceLink = useSourceLink;
+ _includeFilters = parameters.IncludeFilters;
+ _includeDirectories = parameters.IncludeDirectories ?? Array.Empty();
+ _excludeFilters = parameters.ExcludeFilters;
+ _excludedSourceFiles = parameters.ExcludedSourceFiles;
+ _excludeAttributes = parameters.ExcludeAttributes;
+ _includeTestAssembly = parameters.IncludeTestAssembly;
+ _singleHit = parameters.SingleHit;
+ _mergeWith = parameters.MergeWith;
+ _useSourceLink = parameters.UseSourceLink;
_logger = logger;
_instrumentationHelper = instrumentationHelper;
_fileSystem = fileSystem;
diff --git a/src/coverlet.msbuild.tasks/InstrumentationTask.cs b/src/coverlet.msbuild.tasks/InstrumentationTask.cs
index 1331bbb..98b35bc 100644
--- a/src/coverlet.msbuild.tasks/InstrumentationTask.cs
+++ b/src/coverlet.msbuild.tasks/InstrumentationTask.cs
@@ -138,28 +138,28 @@ namespace Coverlet.MSbuild.Tasks
try
{
- var includeFilters = _include?.Split(',');
- var includeDirectories = _includeDirectory?.Split(',');
- var excludeFilters = _exclude?.Split(',');
- var excludedSourceFiles = _excludeByFile?.Split(',');
- var excludeAttributes = _excludeByAttribute?.Split(',');
var fileSystem = ServiceProvider.GetService();
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = _include?.Split(','),
+ IncludeDirectories = _includeDirectory?.Split(','),
+ ExcludeFilters = _exclude?.Split(','),
+ ExcludedSourceFiles = _excludeByFile?.Split(','),
+ ExcludeAttributes = _excludeByAttribute?.Split(','),
+ IncludeTestAssembly = _includeTestAssembly,
+ SingleHit = _singleHit,
+ MergeWith = _mergeWith,
+ UseSourceLink = _useSourceLink
+ };
+
Coverage coverage = new Coverage(_path,
- includeFilters,
- includeDirectories,
- excludeFilters,
- excludedSourceFiles,
- excludeAttributes,
- _includeTestAssembly,
- _singleHit,
- _mergeWith,
- _useSourceLink,
- _logger,
- ServiceProvider.GetService(),
- fileSystem,
- ServiceProvider.GetService(),
- ServiceProvider.GetService());
+ parameters,
+ _logger,
+ ServiceProvider.GetService(),
+ ServiceProvider.GetService(),
+ ServiceProvider.GetService(),
+ ServiceProvider.GetService());
CoveragePrepareResult prepareResult = coverage.PrepareModules();
InstrumenterState = new TaskItem(System.IO.Path.GetTempFileName());
diff --git a/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs b/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs
index 3c174d4..3c0346d 100644
--- a/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs
+++ b/test/coverlet.collector.tests/CoverletCoverageDataCollectorTests.cs
@@ -114,7 +114,19 @@ namespace Coverlet.Collector.Tests
new Mock().Object,
new Mock().Object);
- Coverage coverage = new Coverage("abc.dll", null, null, null, null, null, true, true, "abc.json", true, It.IsAny(), instrumentationHelper, new Mock().Object, new Mock().Object, new Mock().Object);
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = null,
+ IncludeDirectories = null,
+ ExcludedSourceFiles = null,
+ ExcludeAttributes = null,
+ IncludeTestAssembly = true,
+ SingleHit = true,
+ MergeWith = "abc.json",
+ UseSourceLink = true
+ };
+
+ Coverage coverage = new Coverage("abc.dll", parameters, It.IsAny(), instrumentationHelper, new Mock().Object, new Mock().Object, new Mock().Object);
sessionStartProperties.Add("TestSources", new List { "abc.dll" });
_mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(coverage);
diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs b/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs
index bd398df..b143e42 100644
--- a/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs
+++ b/test/coverlet.core.tests/Coverage/CoverageTests.ExcludeFromCoverageAttribute.cs
@@ -33,9 +33,21 @@ namespace Coverlet.Core.Tests
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object,
new SourceRootTranslator(excludedbyattributeDll, new Mock().Object, new FileSystem()));
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" },
+ IncludeDirectories = Array.Empty(),
+ ExcludeFilters = Array.Empty(),
+ ExcludedSourceFiles = Array.Empty(),
+ ExcludeAttributes = Array.Empty(),
+ IncludeTestAssembly = true,
+ SingleHit = false,
+ MergeWith = string.Empty,
+ UseSourceLink = false
+ };
+
// test skip module include test assembly feature
- var coverage = new Coverage(excludedbyattributeDll, new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" }, Array.Empty(), Array.Empty(),
- Array.Empty(), Array.Empty(), true, false, string.Empty, false, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object,
+ var coverage = new Coverage(excludedbyattributeDll, parameters, loggerMock.Object, instrumentationHelper, partialMockFileSystem.Object,
new SourceRootTranslator(loggerMock.Object, new FileSystem()), new CecilSymbolHelper());
CoveragePrepareResult result = coverage.PrepareModules();
Assert.Empty(result.Results);
diff --git a/test/coverlet.core.tests/Coverage/CoverageTests.cs b/test/coverlet.core.tests/Coverage/CoverageTests.cs
index 92f2b92..10074ba 100644
--- a/test/coverlet.core.tests/Coverage/CoverageTests.cs
+++ b/test/coverlet.core.tests/Coverage/CoverageTests.cs
@@ -29,8 +29,20 @@ namespace Coverlet.Core.Tests
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object,
new SourceRootTranslator(module, new Mock().Object, new FileSystem()));
- var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty(),
- Array.Empty(), false, false, string.Empty, false, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = new string[] { "[coverlet.tests.projectsample.excludedbyattribute*]*" },
+ IncludeDirectories = Array.Empty(),
+ ExcludeFilters = Array.Empty(),
+ ExcludedSourceFiles = Array.Empty(),
+ ExcludeAttributes = Array.Empty(),
+ IncludeTestAssembly = false,
+ SingleHit = false,
+ MergeWith = string.Empty,
+ UseSourceLink = false
+ };
+
+ var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(), new SourceRootTranslator(_mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
coverage.PrepareModules();
var result = coverage.GetCoverageResult();
@@ -55,8 +67,20 @@ namespace Coverlet.Core.Tests
new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), new FileSystem(), new Mock().Object,
new SourceRootTranslator(module, new Mock().Object, new FileSystem()));
- var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), Array.Empty(), Array.Empty(), Array.Empty(), Array.Empty(),
- Array.Empty(), true, false, string.Empty, false, _mockLogger.Object, instrumentationHelper, new FileSystem(),
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = Array.Empty(),
+ IncludeDirectories = Array.Empty(),
+ ExcludeFilters = Array.Empty(),
+ ExcludedSourceFiles = Array.Empty(),
+ ExcludeAttributes = Array.Empty(),
+ IncludeTestAssembly = true,
+ SingleHit = false,
+ MergeWith = string.Empty,
+ UseSourceLink = false
+ };
+
+ var coverage = new Coverage(Path.Combine(directory.FullName, Path.GetFileName(module)), parameters, _mockLogger.Object, instrumentationHelper, new FileSystem(),
new SourceRootTranslator(module, _mockLogger.Object, new FileSystem()), new CecilSymbolHelper());
coverage.PrepareModules();
diff --git a/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs b/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs
index 41505ff..951915c 100644
--- a/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs
+++ b/test/coverlet.core.tests/Coverage/InstrumenterHelper.cs
@@ -86,19 +86,30 @@ namespace Coverlet.Core.Tests
SetTestContainer(newPath, disableRestoreModules);
static string[] defaultFilters(string _) => Array.Empty();
+
+ CoverageParameters parameters = new CoverageParameters
+ {
+ IncludeFilters = (includeFilter is null ? defaultFilters(fileName) : includeFilter(fileName)).Concat(
+ new string[]
+ {
+ $"[{Path.GetFileNameWithoutExtension(fileName)}*]{typeof(T).FullName}*"
+ }).ToArray(),
+ IncludeDirectories = Array.Empty(),
+ ExcludeFilters = (excludeFilter is null ? defaultFilters(fileName) : excludeFilter(fileName)).Concat(new string[]
+ {
+ "[xunit.*]*",
+ "[coverlet.*]*"
+ }).ToArray(),
+ ExcludedSourceFiles = Array.Empty(),
+ ExcludeAttributes = Array.Empty(),
+ IncludeTestAssembly = true,
+ SingleHit = false,
+ MergeWith = string.Empty,
+ UseSourceLink = false
+ };
+
// Instrument module
- Coverage coverage = new Coverage(newPath,
- includeFilters: (includeFilter is null ? defaultFilters(fileName) : includeFilter(fileName)).Concat(
- new string[]
- {
- $"[{Path.GetFileNameWithoutExtension(fileName)}*]{typeof(T).FullName}*"
- }).ToArray(),
- Array.Empty(),
- excludeFilters: (excludeFilter is null ? defaultFilters(fileName) : excludeFilter(fileName)).Concat(new string[]
- {
- "[xunit.*]*",
- "[coverlet.*]*"
- }).ToArray(), Array.Empty(), Array.Empty(), true, false, "", false, new Logger(logFile),
+ Coverage coverage = new Coverage(newPath, parameters, new Logger(logFile),
_processWideContainer.GetService(), _processWideContainer.GetService(), _processWideContainer.GetService(), _processWideContainer.GetService());
CoveragePrepareResult prepareResult = coverage.PrepareModules();