diff --git a/src/coverlet.core/CoverageResult.cs b/src/coverlet.core/CoverageResult.cs index ef29a2db4..e02e5e0f5 100644 --- a/src/coverlet.core/CoverageResult.cs +++ b/src/coverlet.core/CoverageResult.cs @@ -118,26 +118,16 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar { case ThresholdStatistic.Minimum: { + if (!Modules.Any()) + 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; @@ -146,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: @@ -169,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 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