diff --git a/src/Verify.NUnit/Extensions.cs b/src/Verify.NUnit/Extensions.cs index e6054fb5c..a7b541247 100644 --- a/src/Verify.NUnit/Extensions.cs +++ b/src/Verify.NUnit/Extensions.cs @@ -22,17 +22,21 @@ public static bool TryGetParent(this TestAdapter adapter, [NotNullWhen(true)] ou return parent != null; } - public static IReadOnlyList? GetParameterNames(this TestAdapter adapter) + public static IReadOnlyList? GetParameterNames(this TestAdapter adapter, IReadOnlyList? methodParameterNames) { var method = adapter.Method!; - var methodParameterNames = method.MethodInfo.ParameterNames(); - if (!adapter.TryGetParent(out var parent)) { return methodParameterNames; } + var argumentsLength = parent.Arguments.Length; + if (argumentsLength == 0) + { + return methodParameterNames; + } + var names = GetConstructorParameterNames(method.TypeInfo.Type, parent.Arguments.Length); if (methodParameterNames == null) { diff --git a/src/Verify.NUnit/Verifier.cs b/src/Verify.NUnit/Verifier.cs index c44785e3e..2c050286a 100644 --- a/src/Verify.NUnit/Verifier.cs +++ b/src/Verify.NUnit/Verifier.cs @@ -33,13 +33,12 @@ static InnerVerifier BuildVerifier(string sourceFile, VerifySettings settings, b IReadOnlyList? parameterNames; if (settings.HasParameters) { - parameterNames = adapter.GetParameterNames(); + parameterNames = GetParameterNames(method, adapter); } else { - var (names, values) = GetParameterInfo(adapter); - settings.SetParameters(values); - parameterNames = names; + (parameterNames, var parameters) = GetParametersAndNames(method, adapter); + settings.SetParameters(parameters); } VerifierSettings.AssignTargetAssembly(type.Assembly); @@ -54,34 +53,58 @@ static InnerVerifier BuildVerifier(string sourceFile, VerifySettings settings, b pathInfo); } - static (IReadOnlyList? names, object?[] values) GetParameterInfo(TestAdapter adapter) + static IReadOnlyList? GetParameterNames(MethodInfo method, TestAdapter adapter) { - var method = adapter.Method!; - - var methodParameterNames = method.MethodInfo.ParameterNames(); + var methodParameterNames = method.ParameterNames(); + return adapter.GetParameterNames(methodParameterNames); + } + static (IReadOnlyList? names, object?[] parameters) GetParametersAndNames(MethodInfo method, TestAdapter adapter) + { + var methodParameterNames = method.ParameterNames(); + var parameterNames = adapter.GetParameterNames(methodParameterNames); if (!adapter.TryGetParent(out var parent)) { - return (methodParameterNames, adapter.Arguments); + return (parameterNames, adapter.Arguments); } var argumentsLength = parent.Arguments.Length; if (argumentsLength == 0) { - return (methodParameterNames, adapter.Arguments); + return (parameterNames, adapter.Arguments); } - var names = method.TypeInfo.Type.GetConstructorParameterNames(argumentsLength); if (methodParameterNames == null) { - return (names.ToList(), parent.Arguments); + return (parameterNames, parent.Arguments); } return ( - [.. names, .. methodParameterNames], + parameterNames, [.. parent.Arguments, .. adapter.Arguments]); } + static object?[] GetParameters(TestAdapter adapter, IReadOnlyList? methodParameterNames) + { + if (!adapter.TryGetParent(out var parent)) + { + return adapter.Arguments; + } + + var argumentsLength = parent.Arguments.Length; + if (argumentsLength == 0) + { + return adapter.Arguments; + } + + if (methodParameterNames == null) + { + return parent.Arguments; + } + + return [.. parent.Arguments, .. adapter.Arguments]; + } + static SettingsTask Verify( VerifySettings? settings, string sourceFile,