@@ -57,13 +57,24 @@ private ApiVersion()
5757 /// <param name="version">The version number.</param>
5858 /// <param name="status">The optional version status.</param>
5959 public ApiVersion ( double version , string ? status = default )
60+ : this ( version , status , IsValidStatus ) { }
61+
62+ /// <summary>
63+ /// Initializes a new instance of the <see cref="ApiVersion"/> class.
64+ /// </summary>
65+ /// <param name="version">The version number.</param>
66+ /// <param name="status">The optional version status.</param>
67+ /// <param name="isValidStatus">The function used to valid status.</param>
68+ protected ApiVersion ( double version , string ? status , Func < string ? , bool > isValidStatus )
6069 {
6170 if ( version < 0d || double . IsNaN ( version ) || double . IsInfinity ( version ) )
6271 {
6372 throw new ArgumentOutOfRangeException ( nameof ( version ) ) ;
6473 }
6574
66- Status = ValidateStatus ( status ) ;
75+ Status = ValidateStatus (
76+ status ,
77+ isValidStatus ?? throw new ArgumentNullException ( nameof ( isValidStatus ) ) ) ;
6778
6879 var number = new decimal ( version ) ;
6980 var bits = decimal . GetBits ( number ) ;
@@ -75,7 +86,21 @@ private ApiVersion()
7586 MinorVersion = minor ;
7687 }
7788
78- internal ApiVersion ( DateOnly ? groupVersion , int ? majorVersion , int ? minorVersion , string ? status )
89+ /// <summary>
90+ /// Initializes a new instance of the <see cref="ApiVersion"/> class.
91+ /// </summary>
92+ /// <param name="groupVersion">The optional group version.</param>
93+ /// <param name="majorVersion">The optional major version.</param>
94+ /// <param name="minorVersion">The optional minor version.</param>
95+ /// <param name="status">The optional version status.</param>
96+ /// <param name="isValidStatus">The optional function used to valid status.
97+ /// The default value is <see cref="IsValidStatus(string?)"/>.</param>
98+ protected internal ApiVersion (
99+ DateOnly ? groupVersion ,
100+ int ? majorVersion ,
101+ int ? minorVersion ,
102+ string ? status ,
103+ Func < string ? , bool > ? isValidStatus = default )
79104 {
80105 if ( majorVersion . HasValue && majorVersion . Value < 0 )
81106 {
@@ -87,7 +112,7 @@ internal ApiVersion( DateOnly? groupVersion, int? majorVersion, int? minorVersio
87112 throw new ArgumentOutOfRangeException ( nameof ( minorVersion ) ) ;
88113 }
89114
90- Status = ValidateStatus ( status ) ;
115+ Status = ValidateStatus ( status , isValidStatus ?? IsValidStatus ) ;
91116 GroupVersion = groupVersion ;
92117 MajorVersion = majorVersion ;
93118 MinorVersion = minorVersion ;
@@ -303,14 +328,9 @@ public virtual string ToString( string? format, IFormatProvider? formatProvider
303328#pragma warning restore CA1062 // Validate arguments of public methods
304329 }
305330
306- private static string ? ValidateStatus ( string ? status )
331+ private static string ? ValidateStatus ( string ? status , Func < string ? , bool > isValid )
307332 {
308- if ( status is not null && status . Length == 0 )
309- {
310- return default ;
311- }
312-
313- if ( IsValidStatus ( status ) )
333+ if ( isValid ( status ) )
314334 {
315335 return status ;
316336 }
0 commit comments