@@ -18,7 +18,7 @@ public static class MustBeFileExtensionTests
1818 "...." ,
1919 ".docx." ,
2020 ] ;
21-
21+
2222 public static readonly TheoryData < string > ValidFileExtensionsData =
2323 [
2424 ".txt" ,
@@ -83,25 +83,25 @@ public static void CallerArgumentExpression()
8383
8484 [ Theory ]
8585 [ MemberData ( nameof ( ValidFileExtensionsData ) ) ]
86- public static void ValidFileExtensions_Span ( string input )
86+ public static void ValidFileExtensions_ReadOnlySpan ( string input )
8787 {
8888 var span = input . AsSpan ( ) ;
89-
89+
9090 var result = span . MustBeFileExtension ( ) ;
91-
91+
9292 result . Equals ( span , StringComparison . Ordinal ) . Should ( ) . BeTrue ( ) ;
9393 }
9494
9595 [ Theory ]
9696 [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
97- public static void InvalidFileExtensions_Span ( string invalidString )
97+ public static void InvalidFileExtensions_ReadOnlySpan ( string invalidString )
9898 {
9999 var act = ( ) =>
100100 {
101101 var span = new ReadOnlySpan < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
102102 span . MustBeFileExtension ( "parameterName" ) ;
103103 } ;
104-
104+
105105 act . Should ( ) . Throw < StringException > ( )
106106 . And . Message . Should ( ) . Contain (
107107 $ "parameterName must be a valid file extension, but it actually is { invalidString } "
@@ -110,7 +110,7 @@ public static void InvalidFileExtensions_Span(string invalidString)
110110
111111 [ Theory ]
112112 [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
113- public static void CustomExceptionInvalidFileExtensions_Span ( string invalidString )
113+ public static void CustomExceptionInvalidFileExtensions_ReadOnlySpan ( string invalidString )
114114 {
115115 var exception = new Exception ( ) ;
116116
@@ -124,15 +124,182 @@ public static void CustomExceptionInvalidFileExtensions_Span(string invalidStrin
124124 }
125125
126126 [ Fact ]
127- public static void CallerArgumentExpression_Span ( )
127+ public static void CallerArgumentExpression_ReadOnlySpan ( )
128128 {
129129 var act = ( ) =>
130130 {
131131 var invalidSpan = "txt" . AsSpan ( ) ;
132132 invalidSpan . MustBeFileExtension ( ) ;
133133 } ;
134-
134+
135+ act . Should ( ) . Throw < StringException > ( )
136+ . WithParameterName ( "invalidSpan" ) ;
137+ }
138+
139+ [ Theory ]
140+ [ MemberData ( nameof ( ValidFileExtensionsData ) ) ]
141+ public static void ValidFileExtensions_Span ( string input )
142+ {
143+ var span = input . AsSpan ( ) . ToArray ( ) . AsSpan ( ) ;
144+
145+ var result = span . MustBeFileExtension ( ) ;
146+
147+ result . ToString ( ) . Should ( ) . Be ( input ) ;
148+ }
149+
150+ [ Theory ]
151+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
152+ public static void InvalidFileExtensions_Span ( string invalidString )
153+ {
154+ var act = ( ) =>
155+ {
156+ var span = new Span < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
157+ span . MustBeFileExtension ( "parameterName" ) ;
158+ } ;
159+
160+ act . Should ( ) . Throw < StringException > ( )
161+ . And . Message . Should ( ) . Contain (
162+ $ "parameterName must be a valid file extension, but it actually is { invalidString } "
163+ ) ;
164+ }
165+
166+ [ Theory ]
167+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
168+ public static void CustomExceptionInvalidFileExtensions_Span ( string invalidString )
169+ {
170+ var exception = new Exception ( ) ;
171+
172+ var act = ( ) =>
173+ {
174+ var span = new Span < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
175+ span . MustBeFileExtension ( _ => exception ) ;
176+ } ;
177+
178+ act . Should ( ) . Throw < Exception > ( ) . Which . Should ( ) . BeSameAs ( exception ) ;
179+ }
180+
181+ [ Fact ]
182+ public static void CallerArgumentExpression_Span ( )
183+ {
184+ var act = ( ) =>
185+ {
186+ var charArray = "txt" . ToCharArray ( ) ;
187+ var invalidSpan = new Span < char > ( charArray ) ;
188+ invalidSpan . MustBeFileExtension ( ) ;
189+ } ;
190+
135191 act . Should ( ) . Throw < StringException > ( )
136192 . WithParameterName ( "invalidSpan" ) ;
137193 }
194+
195+ [ Theory ]
196+ [ MemberData ( nameof ( ValidFileExtensionsData ) ) ]
197+ public static void ValidFileExtensions_Memory ( string input )
198+ {
199+ var memory = input . ToCharArray ( ) . AsMemory ( ) ;
200+
201+ var result = memory . MustBeFileExtension ( ) ;
202+
203+ result . ToString ( ) . Should ( ) . Be ( input ) ;
204+ }
205+
206+ [ Theory ]
207+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
208+ public static void InvalidFileExtensions_Memory ( string invalidString )
209+ {
210+ var act = ( ) =>
211+ {
212+ var memory = new Memory < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
213+ memory . MustBeFileExtension ( "parameterName" ) ;
214+ } ;
215+
216+ act . Should ( ) . Throw < StringException > ( )
217+ . And . Message . Should ( ) . Contain (
218+ $ "parameterName must be a valid file extension, but it actually is { invalidString } "
219+ ) ;
220+ }
221+
222+ [ Theory ]
223+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
224+ public static void CustomExceptionInvalidFileExtensions_Memory ( string invalidString )
225+ {
226+ var exception = new Exception ( ) ;
227+
228+ var act = ( ) =>
229+ {
230+ var memory = new Memory < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
231+ memory . MustBeFileExtension ( _ => exception ) ;
232+ } ;
233+
234+ act . Should ( ) . Throw < Exception > ( ) . Which . Should ( ) . BeSameAs ( exception ) ;
235+ }
236+
237+ [ Fact ]
238+ public static void CallerArgumentExpression_Memory ( )
239+ {
240+ var act = ( ) =>
241+ {
242+ var charArray = "txt" . ToCharArray ( ) ;
243+ var invalidMemory = new Memory < char > ( charArray ) ;
244+ invalidMemory . MustBeFileExtension ( ) ;
245+ } ;
246+
247+ act . Should ( ) . Throw < StringException > ( )
248+ . WithParameterName ( "invalidMemory" ) ;
249+ }
250+
251+ [ Theory ]
252+ [ MemberData ( nameof ( ValidFileExtensionsData ) ) ]
253+ public static void ValidFileExtensions_ReadOnlyMemory ( string input )
254+ {
255+ var memory = input . AsMemory ( ) ;
256+
257+ var result = memory . MustBeFileExtension ( ) ;
258+
259+ result . Equals ( memory ) . Should ( ) . BeTrue ( ) ;
260+ }
261+
262+ [ Theory ]
263+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
264+ public static void InvalidFileExtensions_ReadOnlyMemory ( string invalidString )
265+ {
266+ var act = ( ) =>
267+ {
268+ var memory = new ReadOnlyMemory < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
269+ memory . MustBeFileExtension ( "parameterName" ) ;
270+ } ;
271+
272+ act . Should ( ) . Throw < StringException > ( )
273+ . And . Message . Should ( ) . Contain (
274+ $ "parameterName must be a valid file extension, but it actually is { invalidString } "
275+ ) ;
276+ }
277+
278+ [ Theory ]
279+ [ MemberData ( nameof ( InvalidFileExtensionsData ) ) ]
280+ public static void CustomExceptionInvalidFileExtensions_ReadOnlyMemory ( string invalidString )
281+ {
282+ var exception = new Exception ( ) ;
283+
284+ var act = ( ) =>
285+ {
286+ var memory = new ReadOnlyMemory < char > ( invalidString ? . ToCharArray ( ) ?? [ ] ) ;
287+ memory . MustBeFileExtension ( _ => exception ) ;
288+ } ;
289+
290+ act . Should ( ) . Throw < Exception > ( ) . Which . Should ( ) . BeSameAs ( exception ) ;
291+ }
292+
293+ [ Fact ]
294+ public static void CallerArgumentExpression_ReadOnlyMemory ( )
295+ {
296+ var act = void ( ) =>
297+ {
298+ var invalidMemory = "txt" . AsMemory ( ) ;
299+ invalidMemory . MustBeFileExtension ( ) ;
300+ } ;
301+
302+ act . Should ( ) . Throw < StringException > ( )
303+ . WithParameterName ( "invalidMemory" ) ;
304+ }
138305}
0 commit comments