diff --git a/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs b/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs index 7d8fd0f16..6ae8ba1bb 100644 --- a/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs +++ b/src/coverlet.collector/DataCollection/CoverletSettingsParser.cs @@ -131,6 +131,13 @@ private string[] ParseExcludeFilters(XmlElement configurationElement) } } + // if we've only one element mean that we only added CoverletConstants.DefaultExcludeFilter + // so add default exclusions + if (excludeFilters.Count == 1) + { + excludeFilters.Add("[xunit*]*"); + } + return excludeFilters.ToArray(); } diff --git a/src/coverlet.console/Program.cs b/src/coverlet.console/Program.cs index 6fb305488..e26ab1199 100644 --- a/src/coverlet.console/Program.cs +++ b/src/coverlet.console/Program.cs @@ -57,6 +57,12 @@ static int Main(string[] args) logger.Level = verbosity.ParsedValue; } + // We add default exclusion filter if no specified + if (excludeFilters.Values.Count == 0) + { + excludeFilters.Values.Add("[xunit*]*"); + } + Coverage coverage = new Coverage(module.Value, includeFilters.Values.ToArray(), includeDirectories.Values.ToArray(), diff --git a/src/coverlet.msbuild.tasks/InstrumentationTask.cs b/src/coverlet.msbuild.tasks/InstrumentationTask.cs index 5242bdb03..35ed96b54 100644 --- a/src/coverlet.msbuild.tasks/InstrumentationTask.cs +++ b/src/coverlet.msbuild.tasks/InstrumentationTask.cs @@ -104,6 +104,12 @@ public override bool Execute() var excludedSourceFiles = _excludeByFile?.Split(','); var excludeAttributes = _excludeByAttribute?.Split(','); + // We add default exclusion filter if no specified + if (excludeFilters is null || excludeFilters.Length == 0) + { + excludeFilters = new string[] { "[xunit*]*" }; + } + Coverage coverage = new Coverage(_path, includeFilters, includeDirectories, excludeFilters, excludedSourceFiles, excludeAttributes, _includeTestAssembly, _singleHit, _mergeWith, _useSourceLink, _logger); CoveragePrepareResult prepareResult = coverage.PrepareModules(); InstrumenterState = new TaskItem(System.IO.Path.GetTempFileName()); diff --git a/test/coverlet.collector.tests/CoverletSettingsParserTests.cs b/test/coverlet.collector.tests/CoverletSettingsParserTests.cs index f392dd4fa..5b57a033e 100644 --- a/test/coverlet.collector.tests/CoverletSettingsParserTests.cs +++ b/test/coverlet.collector.tests/CoverletSettingsParserTests.cs @@ -78,5 +78,33 @@ private void CreateCoverletNodes(XmlDocument doc, XmlElement configElement, stri node.InnerText = nodeValue; configElement.AppendChild(node); } + + [Fact] + public void ParseShouldSkipXunitModulesIfEmptyExclude() + { + var testModules = new List { "abc.dll" }; + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(null, testModules); + + Assert.Equal("[coverlet.*]*", coverletSettings.ExcludeFilters[0]); + Assert.Equal("[xunit*]*", coverletSettings.ExcludeFilters[1]); + Assert.Equal(2, coverletSettings.ExcludeFilters.Length); + } + + [Fact] + public void ParseShouldNotSkipXunitModulesIfNotEmptyExclude() + { + var testModules = new List { "abc.dll" }; + var doc = new XmlDocument(); + var configElement = doc.CreateElement("Configuration"); + this.CreateCoverletNodes(doc, configElement, CoverletConstants.ExcludeFiltersElementName, "[coverlet.*.tests?]*"); + + CoverletSettings coverletSettings = _coverletSettingsParser.Parse(configElement, testModules); + + Assert.Equal("[coverlet.*]*", coverletSettings.ExcludeFilters[0]); + Assert.Equal("[coverlet.*.tests?]*", coverletSettings.ExcludeFilters[1]); + Assert.Equal(2, coverletSettings.ExcludeFilters.Length); + Assert.DoesNotContain("[xunit*]*", coverletSettings.ExcludeFilters); + } } }