@@ -85,6 +85,7 @@ public void CompareParameterMetadata(
85
85
CheckForRemovedParameterAlias ( cmdlet , oldParameter , newParameter , issueLogger ) ;
86
86
CheckParameterValidationSets ( cmdlet , oldParameter , newParameter , issueLogger ) ;
87
87
CheckForValidateNotNullOrEmpty ( cmdlet , oldParameter , newParameter , issueLogger ) ;
88
+ CheckParameterValidateRange ( cmdlet , oldParameter , newParameter , issueLogger ) ;
88
89
}
89
90
// If the parameter cannot be found, log an issue
90
91
else
@@ -177,6 +178,12 @@ private void CheckParameterValidationSets(
177
178
var oldValidateSet = oldParameter . ValidateSet ;
178
179
var newValidateSet = newParameter . ValidateSet ;
179
180
181
+ // If there is no validate set in the new assembly, return
182
+ if ( newValidateSet . Count == 0 )
183
+ {
184
+ return ;
185
+ }
186
+
180
187
// If there was no validate set in the old assembly, but there is
181
188
// one in the new assembly, log an issue
182
189
if ( oldValidateSet . Count == 0 && newValidateSet . Count > 0 )
@@ -214,13 +221,72 @@ private void CheckParameterValidationSets(
214
221
severity : 0 ,
215
222
problemId : ProblemIds . BreakingChangeProblemId . RemovedValidateSetValue ,
216
223
description : string . Format ( Properties . Resources . RemovedValidateSetValueDescription ,
217
- oldParameter . Name , oldValue , cmdlet . Name ) ,
224
+ oldParameter . Name , cmdlet . Name , oldValue ) ,
218
225
remediation : string . Format ( Properties . Resources . RemovedValidateSetValueRemediation ,
219
226
oldValue , oldParameter . Name ) ) ;
220
227
}
221
228
}
222
229
}
223
230
231
+ /// <summary>
232
+ /// Check if the parameter gained a validation range for values, or if the
233
+ /// existing validation range for values excludes values previously accepted.
234
+ /// </summary>
235
+ /// <param name="cmdlet">The cmdlet whose parameter metadata is currently being checked.</param>
236
+ /// <param name="oldParameter">The parameter metadata from the old (serialized) assembly.</param>
237
+ /// <param name="newParameter">The parameter metadata from new assembly.</param>
238
+ /// <param name="issueLogger">ReportLogger that will keep track of the issues found.</param>
239
+ private void CheckParameterValidateRange (
240
+ CmdletBreakingChangeMetadata cmdlet ,
241
+ ParameterMetadata oldParameter ,
242
+ ParameterMetadata newParameter ,
243
+ ReportLogger < BreakingChangeIssue > issueLogger )
244
+ {
245
+ if ( newParameter . ValidateRangeMin != null && newParameter . ValidateRangeMax != null )
246
+ {
247
+ // If the old parameter had no validation range, but the new parameter does, log an issue
248
+ if ( oldParameter . ValidateRangeMin == null && oldParameter . ValidateRangeMax == null )
249
+ {
250
+ issueLogger . LogBreakingChangeIssue (
251
+ cmdlet : cmdlet ,
252
+ severity : 0 ,
253
+ problemId : ProblemIds . BreakingChangeProblemId . AddedValidateRange ,
254
+ description : string . Format ( Properties . Resources . AddedValidateRangeDescription ,
255
+ oldParameter . Name , cmdlet . Name ) ,
256
+ remediation : string . Format ( Properties . Resources . AddedValidateRangeRemediation ,
257
+ oldParameter . Name ) ) ;
258
+ }
259
+ else
260
+ {
261
+ // If the minimum value of the range has increased, log an issue
262
+ if ( oldParameter . ValidateRangeMin < newParameter . ValidateRangeMin )
263
+ {
264
+ issueLogger . LogBreakingChangeIssue (
265
+ cmdlet : cmdlet ,
266
+ severity : 0 ,
267
+ problemId : ProblemIds . BreakingChangeProblemId . ChangedValidateRangeMinimum ,
268
+ description : string . Format ( Properties . Resources . ChangedValidateRangeMinimumDescription ,
269
+ oldParameter . Name , oldParameter . ValidateRangeMin , newParameter . ValidateRangeMin ) ,
270
+ remediation : string . Format ( Properties . Resources . ChangedValidateRangeMinimumRemediation ,
271
+ oldParameter . Name , oldParameter . ValidateRangeMin ) ) ;
272
+ }
273
+
274
+ // If the maximum value of the range has decreased, log an issue
275
+ if ( oldParameter . ValidateRangeMax > newParameter . ValidateRangeMax )
276
+ {
277
+ issueLogger . LogBreakingChangeIssue (
278
+ cmdlet : cmdlet ,
279
+ severity : 0 ,
280
+ problemId : ProblemIds . BreakingChangeProblemId . ChangedValidateRangeMaximum ,
281
+ description : string . Format ( Properties . Resources . ChangedValidateRangeMaximumDescription ,
282
+ oldParameter . Name , oldParameter . ValidateRangeMax , newParameter . ValidateRangeMax ) ,
283
+ remediation : string . Format ( Properties . Resources . ChangedValidateRangeMaximumRemediation ,
284
+ oldParameter . Name , oldParameter . ValidateRangeMax ) ) ;
285
+ }
286
+ }
287
+ }
288
+ }
289
+
224
290
/// <summary>
225
291
/// Check if the parameter now supports the ValidateNotNullOrEmpty attribute
226
292
/// </summary>
0 commit comments