@@ -20,7 +20,7 @@ public static IEnumerable<StepArgument> ExtractArguments<T>(this Expression<Acti
2020 if ( methodCallExpression == null )
2121 throw new InvalidOperationException ( "Please provide a *method call* lambda expression." ) ;
2222
23- return ExtractArguments ( methodCallExpression , value ) ;
23+ return ExtractArguments ( methodCallExpression , value , false ) ;
2424 }
2525
2626 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
3333 if ( methodCallExpression == null )
3434 throw new InvalidOperationException ( "Please provide a *method call* lambda expression." ) ;
3535
36- return ExtractArguments ( methodCallExpression , value ) ;
36+ return ExtractArguments ( methodCallExpression , value , false ) ;
3737 }
3838
3939 private static IEnumerable < StepArgument > ExtractArguments < T > ( Expression expression , T value )
@@ -71,21 +71,30 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(Expression expressi
7171 private static IEnumerable < StepArgument > Invoke ( MethodCallExpression methodCallExpression , IEnumerable < StepArgument > args )
7272 {
7373 var constantExpression = methodCallExpression . Object as ConstantExpression ;
74+ var stepArguments = args . ToArray ( ) ;
7475 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 ( ) ) ) } ;
7677
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+ } ) } ;
7884 }
7985
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 )
8187 {
8288 var constants = new List < StepArgument > ( ) ;
8389 foreach ( var arg in methodCallExpression . Arguments )
8490 {
8591 constants . AddRange ( ExtractArguments ( arg , value ) ) ;
8692 }
8793
88- constants . AddRange ( ExtractArguments ( methodCallExpression . Object , value ) ) ;
94+ if ( extractArgsFromExpression )
95+ {
96+ constants . AddRange ( ExtractArguments ( methodCallExpression . Object , value ) ) ;
97+ }
8998
9099 return constants ;
91100 }
0 commit comments