44using ArchUnitNET . Domain ;
55using ArchUnitNET . Domain . Dependencies ;
66using ArchUnitNET . Domain . Extensions ;
7- using ArchUnitNET . Loader ;
87using ArchUnitNETTests . Fluent . Extensions ;
8+ using JetBrains . Annotations ;
99using Type = System . Type ;
1010
1111namespace ArchUnitNETTests . Domain . Dependencies . Members
@@ -19,7 +19,9 @@ private static object[] BuildMethodCallDependencyTestData(
1919 Type originType ,
2020 string nameOfOriginMember ,
2121 Type targetType ,
22- string nameOfTargetMember
22+ string nameOfTargetMember ,
23+ [ CanBeNull ] IEnumerable < Type > declaringGenericArgumentsTypes = null ,
24+ [ CanBeNull ] IEnumerable < Type > memberGenericArgumentsTypes = null
2325 )
2426 {
2527 var originClass = Architecture . GetClassOfType ( originType ) ;
@@ -30,13 +32,19 @@ string nameOfTargetMember
3032 originMember ,
3133 new MethodMemberInstance (
3234 targetMember ,
33- Enumerable . Empty < GenericArgument > ( ) ,
34- Enumerable . Empty < GenericArgument > ( )
35+ CreateGenericArguments ( declaringGenericArgumentsTypes ?? [ ] ) ,
36+ CreateGenericArguments ( memberGenericArgumentsTypes ?? [ ] )
3537 )
3638 ) ;
3739 return new object [ ] { originMember , expectedDependency } ;
3840 }
3941
42+ private static IEnumerable < GenericArgument > CreateGenericArguments ( IEnumerable < Type > classTypes )
43+ {
44+ return classTypes . Select ( x => Architecture . GetClassOfType ( x ) )
45+ . Select ( x => new GenericArgument ( new TypeInstance < Class > ( x ) ) ) ;
46+ }
47+
4048 private static object [ ] BuildMethodSignatureDependencyTestData (
4149 Type originType ,
4250 string nameOfOriginMember ,
@@ -171,6 +179,56 @@ IEnumerator IEnumerable.GetEnumerator()
171179 }
172180 }
173181
182+ public class MethodCallGenericConstructorArgumentsDependencyTestData : IEnumerable < object [ ] >
183+ {
184+ private readonly List < object [ ] > _methodCallDependencyData = new List < object [ ] >
185+ {
186+ BuildMethodCallDependencyTestData (
187+ typeof ( ClassWithMethodWithGenericConstructorArguments ) ,
188+ nameof ( ClassWithMethodWithGenericConstructorArguments . Method ) . BuildMethodMemberName ( ) ,
189+ typeof ( ClassWithGenericConstructorArguments < > ) ,
190+ StaticConstants . ConstructorNameBase . BuildMethodMemberName ( ) ,
191+ [ typeof ( ClassForGenericArgument ) ] ,
192+ [ ]
193+ )
194+ } ;
195+
196+ public IEnumerator < object [ ] > GetEnumerator ( )
197+ {
198+ return _methodCallDependencyData . GetEnumerator ( ) ;
199+ }
200+
201+ IEnumerator IEnumerable . GetEnumerator ( )
202+ {
203+ return GetEnumerator ( ) ;
204+ }
205+ }
206+
207+ public class MethodCallGenericMethodArgumentsDependencyTestData : IEnumerable < object [ ] >
208+ {
209+ private readonly List < object [ ] > _methodCallDependencyData = new List < object [ ] >
210+ {
211+ BuildMethodCallDependencyTestData (
212+ typeof ( ClassWithMethodWithGenericMethodArguments ) ,
213+ nameof ( ClassWithMethodWithGenericMethodArguments . Method ) . BuildMethodMemberName ( ) ,
214+ typeof ( ClassWithGenericMethodArguments ) ,
215+ nameof ( ClassWithGenericMethodArguments . Method ) . BuildMethodMemberName ( ) ,
216+ [ ] ,
217+ [ typeof ( ClassForGenericArgument ) ]
218+ )
219+ } ;
220+
221+ public IEnumerator < object [ ] > GetEnumerator ( )
222+ {
223+ return _methodCallDependencyData . GetEnumerator ( ) ;
224+ }
225+
226+ IEnumerator IEnumerable . GetEnumerator ( )
227+ {
228+ return GetEnumerator ( ) ;
229+ }
230+ }
231+
174232 public class ConstructorTestData : IEnumerable < object [ ] >
175233 {
176234 private readonly List < object [ ] > _methodCallDependencyData = new List < object [ ] >
0 commit comments