@@ -239,26 +239,138 @@ private static System.Collections.IEnumerable YieldParseInvalidFormatTestCases()
239239 yield return new object [ ] { "text/plain/foo" , typeof ( FormatException ) } ;
240240 }
241241
242- #if false
243242 [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
244243 public void TestParse ( string s , MimeType expected )
245- => Assert . AreEqual ( ( expected . Type , expected . SubType ) , MimeType . Parse ( s ) ) ;
246- #endif
244+ => Assert . AreEqual ( expected , MimeType . Parse ( s , provider : null ) ) ;
245+
246+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
247+ public void TestParse_ReadOnlySpanOfChar ( string s , MimeType expected )
248+ => Assert . AreEqual ( expected , MimeType . Parse ( s . AsSpan ( ) , provider : null ) ) ;
247249
248250 [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
249251 public void TestTryParse ( string s , MimeType expected )
250252 {
251- Assert . IsTrue ( MimeType . TryParse ( s , out MimeType result ) ) ;
253+ Assert . IsTrue ( MimeType . TryParse ( s , provider : null , out var result ) ) ;
252254 Assert . AreEqual ( expected , result ) ;
253255 }
254256
255- #if false
257+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
258+ public void TestTryParse_ReadOnlySpanOfChar ( string s , MimeType expected )
259+ {
260+ Assert . IsTrue ( MimeType . TryParse ( s . AsSpan ( ) , provider : null , out var result ) ) ;
261+ Assert . AreEqual ( expected , result ) ;
262+ }
263+
264+ #if FEATURE_GENERIC_MATH
265+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
266+ public void IParseable_Parse ( string s , MimeType expected )
267+ {
268+ Assert . AreEqual ( expected , Parse < MimeType > ( s ) ) ;
269+
270+ static TSelf Parse < TSelf > ( string s ) where TSelf : IParseable < TSelf >
271+ => TSelf . Parse ( s , provider : null ) ;
272+ }
273+
274+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
275+ public void ISpanParseable_Parse ( string s , MimeType expected )
276+ {
277+ Assert . AreEqual ( expected , Parse < MimeType > ( s . AsSpan ( ) ) ) ;
278+
279+ static TSelf Parse < TSelf > ( ReadOnlySpan < char > s ) where TSelf : ISpanParseable < TSelf >
280+ => TSelf . Parse ( s , provider : null ) ;
281+ }
282+
283+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
284+ public void IParseable_TryParse ( string s , MimeType expected )
285+ {
286+ Assert . IsTrue ( TryParse < MimeType > ( s , out var result ) ) ;
287+ Assert . AreEqual ( expected , result ) ;
288+
289+ static bool TryParse < TSelf > ( string s , out TSelf result ) where TSelf : IParseable < TSelf >
290+ => TSelf . TryParse ( s , provider : null , out result ) ;
291+ }
292+
293+ [ TestCaseSource ( nameof ( YieldParseValidTestCases ) ) ]
294+ public void ISpanParseable_TryParse ( string s , MimeType expected )
295+ {
296+ Assert . IsTrue ( TryParse < MimeType > ( s . AsSpan ( ) , out var result ) ) ;
297+ Assert . AreEqual ( expected , result ) ;
298+
299+ static bool TryParse < TSelf > ( ReadOnlySpan < char > s , out TSelf result ) where TSelf : ISpanParseable < TSelf >
300+ => TSelf . TryParse ( s , provider : null , out result ) ;
301+ }
302+ #endif
303+
256304 [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
257305 public void TestParse_InvalidFormat ( string s , Type expectedExceptionType )
258- => Assert . Throws ( expectedExceptionType , ( ) => MimeType . Parse ( s ) ) ;
259- #endif
306+ => Assert . Throws ( expectedExceptionType , ( ) => MimeType . Parse ( s , provider : null ) ) ;
307+
308+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
309+ public void TestParse_ReadOnlySpanOfChar_InvalidFormat ( string s , Type expectedExceptionType )
310+ {
311+ if ( s is null )
312+ Assert . Pass ( ) ;
313+
314+ Assert . Throws ( expectedExceptionType , ( ) => MimeType . Parse ( s . AsSpan ( ) , provider : null ) ) ;
315+ }
260316
261317 [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
262- public void TestTryParse_InvalidFormat ( string s , Type _ )
263- => Assert . IsFalse ( MimeType . TryParse ( s , out MimeType _ ) ) ;
318+ public void TestTryParse_InvalidFormat ( string s , Type discard )
319+ => Assert . IsFalse ( MimeType . TryParse ( s , provider : null , out _ ) ) ;
320+
321+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
322+ public void TestTryParse_ReadOnlySpanOfChar_InvalidFormat ( string s , Type discard )
323+ {
324+ if ( s is null )
325+ Assert . Pass ( ) ;
326+
327+ Assert . IsFalse ( MimeType . TryParse ( s . AsSpan ( ) , provider : null , out _ ) ) ;
328+ }
329+
330+ #if FEATURE_GENERIC_MATH
331+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
332+ public void IParseable_Parse_InvalidFormat ( string s , Type expectedExceptionType )
333+ {
334+ Assert . Throws ( expectedExceptionType , ( ) => Parse < MimeType > ( s ) ) ;
335+
336+ static TSelf Parse < TSelf > ( string s ) where TSelf : IParseable < TSelf >
337+ => TSelf . Parse ( s , provider : null ) ;
338+ }
339+
340+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
341+ public void ISpanParseable_Parse_InvalidFormat ( string s , Type expectedExceptionType )
342+ {
343+ if ( s is null )
344+ Assert . Pass ( ) ;
345+
346+ Assert . Throws ( expectedExceptionType , ( ) => Parse < MimeType > ( s . AsSpan ( ) ) ) ;
347+
348+ static TSelf Parse < TSelf > ( ReadOnlySpan < char > s ) where TSelf : ISpanParseable < TSelf >
349+ => TSelf . Parse ( s , provider : null ) ;
350+ }
351+
352+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
353+ public void IParseable_TryParse_InvalidFormat ( string s , Type discard )
354+ {
355+ if ( s is null )
356+ Assert . Pass ( ) ;
357+
358+ Assert . IsFalse ( TryParse < MimeType > ( s , out _ ) ) ;
359+
360+ static bool TryParse < TSelf > ( string s , out TSelf result ) where TSelf : IParseable < TSelf >
361+ => TSelf . TryParse ( s , provider : null , out result ) ;
362+ }
363+
364+ [ TestCaseSource ( nameof ( YieldParseInvalidFormatTestCases ) ) ]
365+ public void ISpanParseable_TryParse_InvalidFormat ( string s , Type discard )
366+ {
367+ if ( s is null )
368+ Assert . Pass ( ) ;
369+
370+ Assert . IsFalse ( TryParse < MimeType > ( s . AsSpan ( ) , out _ ) ) ;
371+
372+ static bool TryParse < TSelf > ( ReadOnlySpan < char > s , out TSelf result ) where TSelf : ISpanParseable < TSelf >
373+ => TSelf . TryParse ( s , provider : null , out result ) ;
374+ }
375+ #endif
264376}
0 commit comments