Skip to content

Commit 624ef0f

Browse files
authored
Return non zero exit code for ThresholdStatistic.Minimum even when no coverage (#1206)
Return non zero exit code for ThresholdStatistic.Minimum even when no coverage
1 parent 383684f commit 624ef0f

File tree

2 files changed

+52
-42
lines changed

2 files changed

+52
-42
lines changed

src/coverlet.core/CoverageResult.cs

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -118,26 +118,16 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
118118
{
119119
case ThresholdStatistic.Minimum:
120120
{
121+
if (!Modules.Any())
122+
thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, 0, 0, 0);
123+
121124
foreach (var module in Modules)
122125
{
123126
double line = summary.CalculateLineCoverage(module.Value).Percent;
124127
double branch = summary.CalculateBranchCoverage(module.Value).Percent;
125128
double method = summary.CalculateMethodCoverage(module.Value).Percent;
126-
127-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line)
128-
{
129-
thresholdTypeFlags |= ThresholdTypeFlags.Line;
130-
}
131129

132-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch)
133-
{
134-
thresholdTypeFlags |= ThresholdTypeFlags.Branch;
135-
}
136-
137-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method)
138-
{
139-
thresholdTypeFlags |= ThresholdTypeFlags.Method;
140-
}
130+
thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method);
141131
}
142132
}
143133
break;
@@ -146,21 +136,8 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
146136
double line = summary.CalculateLineCoverage(Modules).AverageModulePercent;
147137
double branch = summary.CalculateBranchCoverage(Modules).AverageModulePercent;
148138
double method = summary.CalculateMethodCoverage(Modules).AverageModulePercent;
149-
150-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line)
151-
{
152-
thresholdTypeFlags |= ThresholdTypeFlags.Line;
153-
}
154139

155-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch)
156-
{
157-
thresholdTypeFlags |= ThresholdTypeFlags.Branch;
158-
}
159-
160-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method)
161-
{
162-
thresholdTypeFlags |= ThresholdTypeFlags.Method;
163-
}
140+
thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method);
164141
}
165142
break;
166143
case ThresholdStatistic.Total:
@@ -169,25 +146,37 @@ public ThresholdTypeFlags GetThresholdTypesBelowThreshold(CoverageSummary summar
169146
double branch = summary.CalculateBranchCoverage(Modules).Percent;
170147
double method = summary.CalculateMethodCoverage(Modules).Percent;
171148

172-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) && lineThresholdValue > line)
173-
{
174-
thresholdTypeFlags |= ThresholdTypeFlags.Line;
175-
}
176-
177-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) && branchThresholdValue > branch)
178-
{
179-
thresholdTypeFlags |= ThresholdTypeFlags.Branch;
180-
}
181-
182-
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) && methodThresholdValue > method)
183-
{
184-
thresholdTypeFlags |= ThresholdTypeFlags.Method;
185-
}
149+
thresholdTypeFlags = CompareThresholdValues(thresholdTypeFlagValues, thresholdTypeFlags, line, branch, method);
186150
}
187151
break;
188152
}
189153

190154
return thresholdTypeFlags;
191155
}
156+
157+
private static ThresholdTypeFlags CompareThresholdValues(
158+
Dictionary<ThresholdTypeFlags, double> thresholdTypeFlagValues, ThresholdTypeFlags thresholdTypeFlags,
159+
double line, double branch, double method)
160+
{
161+
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Line, out var lineThresholdValue) &&
162+
lineThresholdValue > line)
163+
{
164+
thresholdTypeFlags |= ThresholdTypeFlags.Line;
165+
}
166+
167+
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Branch, out var branchThresholdValue) &&
168+
branchThresholdValue > branch)
169+
{
170+
thresholdTypeFlags |= ThresholdTypeFlags.Branch;
171+
}
172+
173+
if (thresholdTypeFlagValues.TryGetValue(ThresholdTypeFlags.Method, out var methodThresholdValue) &&
174+
methodThresholdValue > method)
175+
{
176+
thresholdTypeFlags |= ThresholdTypeFlags.Method;
177+
}
178+
179+
return thresholdTypeFlags;
180+
}
192181
}
193182
}

test/coverlet.core.tests/CoverageResultTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,26 @@ public void TestGetThresholdTypesBelowThresholdAllFail()
148148
ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic);
149149
Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags);
150150
}
151+
152+
[Fact]
153+
public void TestGetThresholdTypesBelowThresholdWhenNoModuleInstrumented()
154+
{
155+
CoverageResult result = new CoverageResult();
156+
result.Modules = new Modules();
157+
158+
CoverageSummary summary = new CoverageSummary();
159+
Dictionary<ThresholdTypeFlags, double> thresholdTypeFlagValues = new Dictionary<ThresholdTypeFlags, double>()
160+
{
161+
{ ThresholdTypeFlags.Line, 80 },
162+
{ ThresholdTypeFlags.Method, 80 },
163+
{ ThresholdTypeFlags.Branch, 80 },
164+
};
165+
166+
ThresholdTypeFlags thresholdTypeFlags = ThresholdTypeFlags.Line | ThresholdTypeFlags.Branch | ThresholdTypeFlags.Method;
167+
ThresholdStatistic thresholdStatic = ThresholdStatistic.Minimum;
168+
169+
ThresholdTypeFlags resThresholdTypeFlags = result.GetThresholdTypesBelowThreshold(summary, thresholdTypeFlagValues, thresholdStatic);
170+
Assert.Equal(thresholdTypeFlags, resThresholdTypeFlags);
171+
}
151172
}
152173
}

0 commit comments

Comments
 (0)