Skip to content

Commit

Permalink
less reflection for nunit
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonCropp committed Sep 16, 2024
1 parent d213839 commit 7a6d89b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 16 deletions.
10 changes: 7 additions & 3 deletions src/Verify.NUnit/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,21 @@ public static bool TryGetParent(this TestAdapter adapter, [NotNullWhen(true)] ou
return parent != null;
}

public static IReadOnlyList<string>? GetParameterNames(this TestAdapter adapter)
public static IReadOnlyList<string>? GetParameterNames(this TestAdapter adapter, IReadOnlyList<string>? 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)
{
Expand Down
49 changes: 36 additions & 13 deletions src/Verify.NUnit/Verifier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,12 @@ static InnerVerifier BuildVerifier(string sourceFile, VerifySettings settings, b
IReadOnlyList<string>? 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);
Expand All @@ -54,34 +53,58 @@ static InnerVerifier BuildVerifier(string sourceFile, VerifySettings settings, b
pathInfo);
}

static (IReadOnlyList<string>? names, object?[] values) GetParameterInfo(TestAdapter adapter)
static IReadOnlyList<string>? GetParameterNames(MethodInfo method, TestAdapter adapter)
{
var method = adapter.Method!;

var methodParameterNames = method.MethodInfo.ParameterNames();
var methodParameterNames = method.ParameterNames();
return adapter.GetParameterNames(methodParameterNames);
}

static (IReadOnlyList<string>? 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<string>? 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,
Expand Down

0 comments on commit 7a6d89b

Please sign in to comment.