From e1cdb93d3fb2cc53a3d1bda98d2cb5cda8b2784e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20M=C3=BCller?= Date: Tue, 3 Aug 2021 22:39:55 +0200 Subject: [PATCH 1/2] Return ThresholdTypeFlags for ThresholdStatistic.Minimum even when there are no Modules instrumented --- src/coverlet.core/CoverageResult.cs | 3 +++ .../CoverageResultTests.cs | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/coverlet.core/CoverageResult.cs b/src/coverlet.core/CoverageResult.cs index ef29a2db4..77a5a6597 100644 --- a/src/coverlet.core/CoverageResult.cs +++ b/src/coverlet.core/CoverageResult.cs @@ -118,6 +118,9 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar { case ThresholdStatistic.Minimum: { + if (!Modules.Any()) + return ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; + foreach (var module in Modules) { double line = summary.CalculateLineCoverage(module.Value).Percent; diff --git a/test/coverlet.core.tests/CoverageResultTests.cs b/test/coverlet.core.tests/CoverageResultTests.cs index c02d02ce4..d391ac45c 100644 --- a/test/coverlet.core.tests/CoverageResultTests.cs +++ b/test/coverlet.core.tests/CoverageResultTests.cs @@ -148,5 +148,26 @@ public void TestGetThresholdTypesBelowThresholdAllFail() ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); } + + [Fact] + public void TestGetThresholdTypesBelowThresholdWhenNoModuleInstrumented() + { + CoverageResult result = new CoverageResult(); + result.Modules = new Modules(); + + CoverageSummary summary = new CoverageSummary(); + Dictionary thresholdTypeFlagValues = new Dictionary() + { + { ThresholdTypeFlags.Line, 80 }, + { ThresholdTypeFlags.Method, 80 }, + { ThresholdTypeFlags.Branch, 80 }, + }; + + ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; + ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum; + + ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic); + Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags); + } } } \ No newline at end of file From d36e75a78362d378cc2ed92d1cc1ecdc5dd3543f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20M=C3=BCller?= Date: Tue, 3 Aug 2021 23:33:51 +0200 Subject: [PATCH 2/2] bugfix --- src/coverlet.core/CoverageResult.cs | 72 ++++++++++++----------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/src/coverlet.core/CoverageResult.cs b/src/coverlet.core/CoverageResult.cs index 77a5a6597..e02e5e0f5 100644 --- a/src/coverlet.core/CoverageResult.cs +++ b/src/coverlet.core/CoverageResult.cs @@ -119,28 +119,15 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar case ThresholdStatistic.Minimum: { if (!Modules.Any()) - return ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method; + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, 0, 0, 0); foreach (var module in Modules) { double line = summary.CalculateLineCoverage(module.Value).Percent; double branch = summary.CalculateBranchCoverage(module.Value).Percent; double method = summary.CalculateMethodCoverage(module.Value).Percent; - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line) - { - thresholdTypeFlags |= ThresholdTypeFlags.Line; - } - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch) - { - thresholdTypeFlags |= ThresholdTypeFlags.Branch; - } - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method) - { - thresholdTypeFlags |= ThresholdTypeFlags.Method; - } + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); } } break; @@ -149,21 +136,8 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar double line = summary.CalculateLineCoverage(Modules).AverageModulePercent; double branch = summary.CalculateBranchCoverage(Modules).AverageModulePercent; double method = summary.CalculateMethodCoverage(Modules).AverageModulePercent; - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line) - { - thresholdTypeFlags |= ThresholdTypeFlags.Line; - } - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch) - { - thresholdTypeFlags |= ThresholdTypeFlags.Branch; - } - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method) - { - thresholdTypeFlags |= ThresholdTypeFlags.Method; - } + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); } break; case ThresholdStatistic.Total: @@ -172,25 +146,37 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar double branch = summary.CalculateBranchCoverage(Modules).Percent; double method = summary.CalculateMethodCoverage(Modules).Percent; - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line) - { - thresholdTypeFlags |= ThresholdTypeFlags.Line; - } - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch) - { - thresholdTypeFlags |= ThresholdTypeFlags.Branch; - } - - if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method) - { - thresholdTypeFlags |= ThresholdTypeFlags.Method; - } + thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method); } break; } return thresholdTypeFlags; } + + private static ThresholdTypeFlags CompareThresholdValues( + Dictionary thresholdTypeFlagValues, ThresholdTypeFlags thresholdTypeFlags, + double line, double branch, double method) + { + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && + lineThresholdValue > line) + { + thresholdTypeFlags |= ThresholdTypeFlags.Line; + } + + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && + branchThresholdValue > branch) + { + thresholdTypeFlags |= ThresholdTypeFlags.Branch; + } + + if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && + methodThresholdValue > method) + { + thresholdTypeFlags |= ThresholdTypeFlags.Method; + } + + return thresholdTypeFlags; + } } } \ No newline at end of file