From b67bc59b5dd1440cd028e12e14d931a0e8f2f5fe Mon Sep 17 00:00:00 2001 From: Aditya Shrotri Date: Wed, 8 Jul 2020 20:24:15 -0700 Subject: [PATCH] GH-2703: Add hideskipped option for OpenCover * fixes #2703 --- .../Unit/Tools/OpenCover/OpenCoverTests.cs | 21 +++++++++ .../OpenCover/OpenCoverHideSkippedOption.cs | 45 +++++++++++++++++++ .../OpenCoverHideSkippedOptionExtensions.cs | 37 +++++++++++++++ .../Tools/OpenCover/OpenCoverRunner.cs | 15 +++++++ .../Tools/OpenCover/OpenCoverSettings.cs | 6 +++ 5 files changed, 124 insertions(+) create mode 100644 src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOption.cs create mode 100644 src/Cake.Common/Tools/OpenCover/OpenCoverHideSkippedOptionExtensions.cs 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(); }