@@ -20,7 +20,7 @@ public static IEnumerable<StepArgument> ExtractArguments<T>(this Expression<Acti
20
20
if ( methodCallExpression == null )
21
21
throw new InvalidOperationException ( "Please provide a *method call* lambda expression." ) ;
22
22
23
- return ExtractArguments ( methodCallExpression , value ) ;
23
+ return ExtractArguments ( methodCallExpression , value , false ) ;
24
24
}
25
25
26
26
public static IEnumerable < StepArgument > ExtractArguments < T > ( this Expression < Func < T , Task > > expression , T value )
@@ -33,7 +33,7 @@ public static IEnumerable<StepArgument> ExtractArguments<T>(this Expression<Func
33
33
if ( methodCallExpression == null )
34
34
throw new InvalidOperationException ( "Please provide a *method call* lambda expression." ) ;
35
35
36
- return ExtractArguments ( methodCallExpression , value ) ;
36
+ return ExtractArguments ( methodCallExpression , value , false ) ;
37
37
}
38
38
39
39
private static IEnumerable < StepArgument > ExtractArguments < T > ( Expression expression , T value )
@@ -71,21 +71,30 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(Expression expressi
71
71
private static IEnumerable < StepArgument > Invoke ( MethodCallExpression methodCallExpression , IEnumerable < StepArgument > args )
72
72
{
73
73
var constantExpression = methodCallExpression . Object as ConstantExpression ;
74
+ var stepArguments = args . ToArray ( ) ;
74
75
if ( constantExpression != null )
75
- return new [ ] { new StepArgument ( ( ) => methodCallExpression . Method . Invoke ( constantExpression . Value , args . Select ( s => s . Value ) . ToArray ( ) ) ) } ;
76
+ return new [ ] { new StepArgument ( ( ) => methodCallExpression . Method . Invoke ( constantExpression . Value , stepArguments . Select ( s => s . Value ) . ToArray ( ) ) ) } ;
76
77
77
- return new [ ] { new StepArgument ( ( ) => methodCallExpression . Method . Invoke ( args . First ( ) . Value , args . Skip ( 1 ) . Select ( s => s . Value ) . ToArray ( ) ) ) } ;
78
+ return new [ ] { new StepArgument ( ( ) =>
79
+ {
80
+ var value = stepArguments . First ( ) . Value ;
81
+ var parameters = stepArguments . Skip ( 1 ) . Select ( s => s . Value ) . ToArray ( ) ;
82
+ return methodCallExpression . Method . Invoke ( value , parameters ) ;
83
+ } ) } ;
78
84
}
79
85
80
- private static IEnumerable < StepArgument > ExtractArguments < T > ( MethodCallExpression methodCallExpression , T value )
86
+ private static IEnumerable < StepArgument > ExtractArguments < T > ( MethodCallExpression methodCallExpression , T value , bool extractArgsFromExpression = true )
81
87
{
82
88
var constants = new List < StepArgument > ( ) ;
83
89
foreach ( var arg in methodCallExpression . Arguments )
84
90
{
85
91
constants . AddRange ( ExtractArguments ( arg , value ) ) ;
86
92
}
87
93
88
- constants . AddRange ( ExtractArguments ( methodCallExpression . Object , value ) ) ;
94
+ if ( extractArgsFromExpression )
95
+ {
96
+ constants . AddRange ( ExtractArguments ( methodCallExpression . Object , value ) ) ;
97
+ }
89
98
90
99
return constants ;
91
100
}
0 commit comments