@@ -330,6 +330,65 @@ unsafe class C
330330 Token . Punctuation . CloseBrace ] ) ;
331331 } ) ;
332332
333+ it ( `class with various generic type constraints (#301)` , async ( ) => {
334+ const input = Input . InNamespace ( `
335+ class NotNullContainer<T> where T : notnull
336+ {
337+ private unsafe static void DisplaySize<T>()
338+ where T : unmanaged { }
339+ public override void M<T>(T? item)
340+ where T : default { }
341+ }` , namespaceStyle ) ;
342+ const tokens = await tokenize ( input ) ;
343+
344+ tokens . should . deep . equal ( [
345+ Token . Keyword . Definition . Class ,
346+ Token . Identifier . ClassName ( "NotNullContainer" ) ,
347+ Token . Punctuation . TypeParameter . Begin ,
348+ Token . Identifier . TypeParameterName ( "T" ) ,
349+ Token . Punctuation . TypeParameter . End ,
350+ Token . Keyword . Modifier . Where ,
351+ Token . Identifier . TypeParameterName ( "T" ) ,
352+ Token . Punctuation . Colon ,
353+ Token . Keyword . Constraint . NotNull ,
354+ Token . Punctuation . OpenBrace ,
355+ Token . Keyword . Modifier . Private ,
356+ Token . Keyword . Modifier . Unsafe ,
357+ Token . Keyword . Modifier . Static ,
358+ Token . PrimitiveType . Void ,
359+ Token . Identifier . MethodName ( "DisplaySize" ) ,
360+ Token . Punctuation . TypeParameter . Begin ,
361+ Token . Identifier . TypeParameterName ( "T" ) ,
362+ Token . Punctuation . TypeParameter . End ,
363+ Token . Punctuation . OpenParen ,
364+ Token . Punctuation . CloseParen ,
365+ Token . Keyword . Modifier . Where ,
366+ Token . Identifier . TypeParameterName ( "T" ) ,
367+ Token . Punctuation . Colon ,
368+ Token . Keyword . Constraint . Unmanaged ,
369+ Token . Punctuation . OpenBrace ,
370+ Token . Punctuation . CloseBrace ,
371+ Token . Keyword . Modifier . Public ,
372+ Token . Keyword . Modifier . Override ,
373+ Token . PrimitiveType . Void ,
374+ Token . Identifier . MethodName ( "M" ) ,
375+ Token . Punctuation . TypeParameter . Begin ,
376+ Token . Identifier . TypeParameterName ( "T" ) ,
377+ Token . Punctuation . TypeParameter . End ,
378+ Token . Punctuation . OpenParen ,
379+ Token . Type ( "T" ) ,
380+ Token . Punctuation . QuestionMark ,
381+ Token . Identifier . ParameterName ( "item" ) ,
382+ Token . Punctuation . CloseParen ,
383+ Token . Keyword . Modifier . Where ,
384+ Token . Identifier . TypeParameterName ( "T" ) ,
385+ Token . Punctuation . Colon ,
386+ Token . Keyword . Constraint . Default ,
387+ Token . Punctuation . OpenBrace ,
388+ Token . Punctuation . CloseBrace ,
389+ Token . Punctuation . CloseBrace ] ) ;
390+ } ) ;
391+
333392 it ( `primary constructor (${ styleName } Namespace)` , async ( ) => {
334393
335394 const input = Input . InNamespace ( `
0 commit comments