@@ -13,6 +13,8 @@ public sealed class ObjectiveCTest : TranslationUnitTest
1313 [ Test ]
1414 public void Method_Selector ( )
1515 {
16+ AssertNeedNewClangSharp ( ) ;
17+
1618 var inputContents = $@ "
1719@interface MyClass
1820 @property int P1;
@@ -48,6 +50,8 @@ @interface MyClass
4850 [ Test ]
4951 public void Category_TypeParamList ( )
5052 {
53+ AssertNeedNewClangSharp ( ) ;
54+
5155 var inputContents = $@ "
5256@interface MyClass
5357@end
@@ -94,6 +98,8 @@ @protocol P2
9498 [ Test ]
9599 public void Method_IsPropertyAccessor ( )
96100 {
101+ AssertNeedNewClangSharp ( ) ;
102+
97103 var inputContents = $@ "
98104@interface MyClass
99105 @property int P1;
@@ -126,9 +132,49 @@ @interface MyClass
126132 Assert . That ( methodStaticMethod . IsPropertyAccessor , Is . False , "methodStaticMethod.IsPropertyAccessor" ) ;
127133 }
128134
135+ [ Test ]
136+ public void TypeParams ( )
137+ {
138+ AssertNeedNewClangSharp ( ) ;
139+
140+ var inputContents = $$ """
141+ @interface NSObject
142+ @end
143+
144+ @interface MyClass<A, B> : NSObject
145+ @end
146+
147+ @interface MyClass<T, Y> (MyCategory)
148+ @end
149+
150+ """ ;
151+ using var translationUnit = CreateTranslationUnit ( inputContents , "objective-c++" ) ;
152+
153+ var classes = translationUnit . TranslationUnitDecl . Decls . OfType < ObjCInterfaceDecl > ( ) . ToList ( ) ;
154+
155+ var myClass = classes . SingleOrDefault ( v => v . Name == "MyClass" ) ! ;
156+ Assert . That ( myClass , Is . Not . Null , "MyClass" ) ;
157+ Assert . That ( myClass . TypeParamList , Is . Not . Null , "myClass TypeParamList" ) ;
158+ var myClassTypeParams = myClass . TypeParamList . ToList ( ) ;
159+ Assert . That ( myClassTypeParams . Count , Is . EqualTo ( 2 ) , "myClassTypeParams.Count" ) ;
160+ Assert . That ( myClassTypeParams [ 0 ] . Name , Is . EqualTo ( "A" ) , "myClassTypeParams[0].Name" ) ;
161+ Assert . That ( myClassTypeParams [ 1 ] . Name , Is . EqualTo ( "B" ) , "myClassTypeParams[1].Name" ) ;
162+
163+ var categories = translationUnit . TranslationUnitDecl . Decls . OfType < ObjCCategoryDecl > ( ) . ToList ( ) ;
164+ var myCategory = categories . SingleOrDefault ( v => v . Name == "MyCategory" ) ! ;
165+ Assert . That ( myCategory , Is . Not . Null , "MyCategory" ) ;
166+ Assert . That ( myCategory . TypeParamList , Is . Not . Null , "myCategory TypeParamList" ) ;
167+ var myCategoryTypeParams = myCategory . TypeParamList . ToList ( ) ;
168+ Assert . That ( myCategoryTypeParams . Count , Is . EqualTo ( 2 ) , "myCategoryTypeParams.Count" ) ;
169+ Assert . That ( myCategoryTypeParams [ 0 ] . Name , Is . EqualTo ( "T" ) , "myCategoryTypeParams[0].Name" ) ;
170+ Assert . That ( myCategoryTypeParams [ 1 ] . Name , Is . EqualTo ( "Y" ) , "myCategoryTypeParams[1].Name" ) ;
171+ }
172+
129173 [ Test ]
130174 public void PointerTypes ( )
131175 {
176+ AssertNeedNewClangSharp ( ) ;
177+
132178 var inputContents = """
133179@interface MyClass
134180-(void)instanceMethod:(MyClass **)ptrToPtrToMyClass;
@@ -158,6 +204,8 @@ @interface MyClass
158204 [ Test ]
159205 public void BlockTypes ( )
160206 {
207+ AssertNeedNewClangSharp ( ) ;
208+
161209 var inputContents = $$ """
162210@interface MyClass
163211-(MyClass *(^)(id))instanceMethod1;
0 commit comments