diff --git a/src/Cake.Common.Tests/Unit/Tools/OpenCover/OpenCoverTests.cs b/src/Cake.Common.Tests/Unit/Tools/OpenCover/OpenCoverTests.cs
index 05f858c604..809ff565fe 100644
--- a/src/Cake.Common.Tests/Unit/Tools/OpenCover/OpenCoverTests.cs
+++ b/src/Cake.Common.Tests/Unit/Tools/OpenCover/OpenCoverTests.cs
@@ -344,6 +344,27 @@ public void Should_Append_LogLevel()
"-log:All", result.Args);
}
+ [Fact]
+ public void Should_Append_HideSkipped()
+ {
+ // Given
+ var fixture = new OpenCoverFixture();
+ fixture.Settings.HideSkippedOption = OpenCoverHideSkippedOption.File
+ | OpenCoverHideSkippedOption.MissingPdb
+ | OpenCoverHideSkippedOption.Filter
+ | OpenCoverHideSkippedOption.All
+ | OpenCoverHideSkippedOption.Attribute;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("-target:\"/Working/tools/Test.exe\" " +
+ "-targetargs:\"-argument\" " +
+ "-register:user -output:\"/Working/result.xml\" " +
+ "-hideskipped:All", result.Args);
+ }
+
[Fact]
public void Should_Append_MergeByHash()
{
diff --git a/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOption.cs b/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOption.cs
new file mode 100644
index 0000000000..c41d753cb6
--- /dev/null
+++ b/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOption.cs
@@ -0,0 +1,45 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Cake.Common.Tools.OpenCover
+{
+ using System;
+
+ ///
+ /// Represents the hide skipped option for OpenCover.
+ ///
+ [Flags]
+ public enum OpenCoverHideSkippedOption
+ {
+ ///
+ /// Removes no information from output file.
+ ///
+ None = 0,
+
+ ///
+ /// Removes information from output files that relates to classes/modules that have been skipped (filtered) due to use of the -excludebyfile -switch.
+ ///
+ File = 1,
+
+ ///
+ /// Removes information from output files that relates to classes/modules that have been skipped (filtered) due to use of the -filter -switch.
+ ///
+ Filter = 2,
+
+ ///
+ /// Removes information from output files that relates to classes/modules that have been skipped (filtered) due to use of the -excludebyattribute -switch.
+ ///
+ Attribute = 4,
+
+ ///
+ /// Removes missing Pdb information from output file.
+ ///
+ MissingPdb = 8,
+
+ ///
+ /// Removes all information from output file.
+ ///
+ All = File | Filter | Attribute | MissingPdb
+ }
+}
diff --git a/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOptionExtensions.cs b/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOptionExtensions.cs
new file mode 100644
index 0000000000..f0cb016a1f
--- /dev/null
+++ b/src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOptionExtensions.cs
@@ -0,0 +1,37 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Cake.Common.Tools.OpenCover
+{
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Linq;
+
+ ///
+ /// Extensions class for .
+ ///
+ public static class OpenCoverHideSkippedOptionExtensions
+ {
+ ///
+ /// Get flags.
+ ///
+ ///
+ /// The input.
+ ///
+ ///
+ /// The .
+ ///
+ public static IEnumerable GetFlags(this OpenCoverHideSkippedOption openCoverHideSkippedOption)
+ {
+ foreach (OpenCoverHideSkippedOption value in Enum.GetValues(openCoverHideSkippedOption.GetType()))
+ {
+ if (openCoverHideSkippedOption.HasFlag(value))
+ {
+ yield return value;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Cake.Common/Tools/OpenCover/OpenCoverRunner.cs b/src/Cake.Common/Tools/OpenCover/OpenCoverRunner.cs
index b80b7f42b2..04ff448974 100644
--- a/src/Cake.Common/Tools/OpenCover/OpenCoverRunner.cs
+++ b/src/Cake.Common/Tools/OpenCover/OpenCoverRunner.cs
@@ -16,6 +16,7 @@ namespace Cake.Common.Tools.OpenCover
///
public sealed class OpenCoverRunner : Tool
{
+ private const string HideSkippedConstant = "-hideskipped";
private readonly ICakeEnvironment _environment;
///
@@ -165,6 +166,20 @@ private ProcessArgumentBuilder GetArguments(
builder.AppendSwitch("-log", ":", settings.LogLevel.ToString());
}
+ // HideSkipped Option
+ if (settings.HideSkippedOption != OpenCoverHideSkippedOption.None)
+ {
+ if (settings.HideSkippedOption == OpenCoverHideSkippedOption.All)
+ {
+ builder.AppendSwitch(HideSkippedConstant, ":", "All");
+ }
+ else
+ {
+ var hideSkippedOptions = string.Join(";", settings.HideSkippedOption.GetFlags());
+ builder.AppendSwitch(HideSkippedConstant, ":", hideSkippedOptions);
+ }
+ }
+
// Merge by hash
if (settings.MergeByHash)
{
diff --git a/src/Cake.Common/Tools/OpenCover/OpenCoverSettings.cs b/src/Cake.Common/Tools/OpenCover/OpenCoverSettings.cs
index 0dc7606d34..21470b2ed0 100644
--- a/src/Cake.Common/Tools/OpenCover/OpenCoverSettings.cs
+++ b/src/Cake.Common/Tools/OpenCover/OpenCoverSettings.cs
@@ -76,6 +76,11 @@ public sealed class OpenCoverSettings : ToolSettings
///
public OpenCoverLogLevel LogLevel { get; set; }
+ ///
+ /// Gets or sets the hide skipped option of OpenCover.
+ ///
+ public OpenCoverHideSkippedOption HideSkippedOption { get; set; }
+
///
/// Gets or sets a value indicating whether to merge the coverage results for an assembly
/// regardless of where it was loaded assuming it has the same file-hash in each location.
@@ -115,6 +120,7 @@ public OpenCoverSettings()
_excludedFileFilters = new HashSet(StringComparer.Ordinal);
Register = "user";
LogLevel = OpenCoverLogLevel.Info;
+ HideSkippedOption = OpenCoverHideSkippedOption.None;
_excludeDirectories = new HashSet();
_searchDirectories = new HashSet();
}