Skip to content

Commit 2495e6f

Browse files
committed
Merge pull request #147 from JakeGinnivan/ExpressionFix
Expression fix
2 parents 2bb1521 + 091f3a1 commit 2495e6f

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

TestStack.BDDfy.Tests/Scanner/FluentScanner/ExpressionExtensionsTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ public void ComplexArgument()
209209
AssertReturnedArguments(arguments, 1, "Foo");
210210
}
211211

212+
[Test]
213+
public void ComplexArgumentMethodCall()
214+
{
215+
container.Target = 1;
216+
container.SubContainer = new ContainerType { Target2 = "Foo" };
217+
218+
var arguments = GetArguments(x => x.MethodWithInputs(container.Target, container.SubContainer.ToString()), new ClassUnderTest());
219+
AssertReturnedArguments(arguments, 1, "Foo");
220+
}
221+
212222
[Test]
213223
public void ComplexArgument2()
214224
{

TestStack.BDDfy/Scanners/StepScanners/Fluent/ExpressionExtensions.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,11 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(Expression expressi
7070

7171
private static IEnumerable<StepArgument> Invoke(MethodCallExpression methodCallExpression, IEnumerable<StepArgument> args)
7272
{
73-
var value = ((ConstantExpression)methodCallExpression.Object).Value;
74-
return new[] { new StepArgument(() => methodCallExpression.Method.Invoke(value, args.Select(s => s.Value).ToArray())) };
73+
var constantExpression = methodCallExpression.Object as ConstantExpression;
74+
if (constantExpression != null)
75+
return new[] { new StepArgument(() => methodCallExpression.Method.Invoke(constantExpression.Value, args.Select(s => s.Value).ToArray())) };
76+
77+
return new[] { new StepArgument(() => methodCallExpression.Method.Invoke(args.First().Value, args.Skip(1).Select(s => s.Value).ToArray())) };
7578
}
7679

7780
private static IEnumerable<StepArgument> ExtractArguments<T>(MethodCallExpression methodCallExpression, T value)

0 commit comments

Comments
 (0)