Skip to content

Commit 0cd2666

Browse files
author
Jake Ginnivan
committed
Try to invoke methods to include value in step title, if we fail just ignore
1 parent 7ac863f commit 0cd2666

4 files changed

Lines changed: 64 additions & 0 deletions

File tree

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,23 @@ public void ComplexArgumentWhenContainerIsNull()
226226
AssertReturnedArguments(arguments, new object[] { null });
227227
}
228228

229+
[Test]
230+
public void MethodCallValue()
231+
{
232+
var arguments = GetArguments(x => x.MethodWithInputs(GetNumberThree(), GetFooString()), new ClassUnderTest());
233+
AssertReturnedArguments(arguments, new object[] { 3, "Foo" });
234+
}
235+
236+
private string GetFooString()
237+
{
238+
return "Foo";
239+
}
240+
241+
private int GetNumberThree()
242+
{
243+
return 3;
244+
}
245+
229246
[Test]
230247
public void ArrayInputArgumentsProvidedUsingInheritedProperty()
231248
{
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Linq;
2+
using NUnit.Framework;
3+
using Shouldly;
4+
5+
namespace TestStack.BDDfy.Tests.Scanner.FluentScanner
6+
{
7+
[TestFixture]
8+
public class StepTitleTests
9+
{
10+
[Test]
11+
public void MethodCallInStepTitle()
12+
{
13+
var story = this.Given(_ => GivenAValueOf(AMethodCall()))
14+
.BDDfy();
15+
16+
story.Scenarios.Single().Steps.Single().Title.ShouldBe("Given a value of Some value");
17+
}
18+
19+
private string AMethodCall()
20+
{
21+
return "Some value";
22+
}
23+
24+
private void GivenAValueOf(string result)
25+
{
26+
27+
}
28+
}
29+
}

TestStack.BDDfy.Tests/TestStack.BDDfy.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
<Compile Include="Scanner\FluentScanner\DoesNotConflictWithnSubstitute.cs" />
9090
<Compile Include="Scanner\FluentScanner\FluentWithExamples.cs" />
9191
<Compile Include="Scanner\FluentScanner\InlineAssertions.cs" />
92+
<Compile Include="Scanner\FluentScanner\StepTitleTests.cs" />
9293
<Compile Include="Scanner\ReflectiveScanner\ReflectiveWithExamples.cs" />
9394
<Compile Include="Scanner\StepScanners\Examples\ExampleTableTests.cs" />
9495
<Compile Include="Scanner\StepScanners\Examples\ExampleValueTests.cs" />

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,26 @@ private static IEnumerable<StepArgument> ExtractArguments<T>(Expression expressi
6161
if (unaryExpression != null)
6262
return ExtractArguments(unaryExpression, value);
6363

64+
var methodCallExpression = expression as MethodCallExpression;
65+
if (methodCallExpression != null)
66+
return Invoke(methodCallExpression, ExtractArguments(methodCallExpression, value));
67+
6468
return new StepArgument[0];
6569
}
6670

71+
private static IEnumerable<StepArgument> Invoke(MethodCallExpression methodCallExpression, IEnumerable<StepArgument> args)
72+
{
73+
try
74+
{
75+
var value = ((ConstantExpression)methodCallExpression.Object).Value;
76+
return new[] { new StepArgument(methodCallExpression.Method.Invoke(value, args.Select(s => s.Value).ToArray())) };
77+
}
78+
catch (Exception)
79+
{
80+
return Enumerable.Empty<StepArgument>();
81+
}
82+
}
83+
6784
private static IEnumerable<StepArgument> ExtractArguments<T>(MethodCallExpression methodCallExpression, T value)
6885
{
6986
var constants = new List<StepArgument>();

0 commit comments

Comments
 (0)