StepArgumentTransformation stack overflow exception
AnsweredHi - I'm having some confusing results with using StepArgumentTransformation. I have a simple feature file as follows:
My step def is as follows:
When I run the test, I see the transform method fire for all parameter values as expected:
Standard Output:
Given I have a value 'abc'
Transform: abc
Given: abc
-> done: StepArgExStepDefinitions.GivenIHaveAValue("abc") (0.0s)
When I have another value 'xyz'
Transform: xyz
When: xyz
-> done: StepArgExStepDefinitions.WhenIHaveAnotherValue("xyz") (0.0s)
Then I have something else '123'
Transform: 123
Then: 123
-> done: StepArgExStepDefinitions.ThenIHaveSomethingElse("123") (0.0s)
However problems occur when I try to filter parameter data with any sort of regular expression. For example:
With this expression, I'd expect the Transform method to only run for my Then step since it contains at least one numerical value.
However - Specflow throws a stack overflow exception and aborts the test (stack trace below). I'm using SpecFlow with VS2022. I assume this is a bug and if so, has it been reported?
Stack Trace:
The active test run was aborted. Reason: Test host process crashed : Stack overflow.
at System.Text.RegularExpressions.Match.get_Groups()
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.GetStepTransformationArgumentsFromRegex(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.String, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.DoTransform(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.Object, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.Convert(System.Object, TechTalk.SpecFlow.Bindings.Reflection.IBindingType, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter+<>c__DisplayClass8_0.<GetStepTransformationArgumentsFromRegex>b__1(System.String, Int32)
at System.Linq.Enumerable+<SelectIterator>d__174`2[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.GetStepTransformationArgumentsFromRegex(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.String, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.DoTransform(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.Object, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.Convert(System.Object, TechTalk.SpecFlow.Bindings.Reflection.IBindingType, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter+<>c__DisplayClass8_0.<GetStepTransformationArgumentsFromRegex>b__1(System.String, Int32)
at System.Linq.Enumerable+<SelectIterator>d__174`2[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.GetStepTransformationArgumentsFromRegex(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.String, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.DoTransform(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.Object, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.Convert(System.Object, TechTalk.SpecFlow.Bindings.Reflection.IBindingType, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter+<>c__DisplayClass8_0.<GetStepTransformationArgumentsFromRegex>b__1(System.String, Int32)
at System.Linq.Enumerable+<SelectIterator>d__174`2[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.GetStepTransformationArgumentsFromRegex(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.String, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.DoTransform(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.Object, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.Convert(System.Object, TechTalk.SpecFlow.Bindings.Reflection.IBindingType, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter+<>c__DisplayClass8_0.<GetStepTransformationArgumentsFromRegex>b__1(System.String, Int32)
at System.Linq.Enumerable+<SelectIterator>d__174`2[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Linq.Enumerable.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.GetStepTransformationArgumentsFromRegex(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.String, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.DoTransform(TechTalk.SpecFlow.Bindings.IStepArgumentTransformationBinding, System.Object, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter.Convert(System.Object, TechTalk.SpecFlow.Bindings.Reflection.IBindingType, System.Globalization.CultureInfo)
at TechTalk.SpecFlow.Bindings.StepArgumentTypeConverter+<>c__DisplayClass8_0.<GetStepTransformationArgumentsFromRegex>b__1(System.String, Int32)
at System.Linq.Enumerable+<SelectIterator>d__174`2[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].AddRange(System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Collections.Generic.EnumerableHelpers.ToArray[[System.__Canon, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.Generic.IEnumerable`1<System.__Canon>)
at System.Linq.Enumerable
-
Hi - Any comments from SpecFlow/Tricentis? Should I go ahead and post issue on github?
Thanks,
John
0 -
GH Issue 2561 posted here:
0 -
Hi - Any updates or suggestions from the SpecFlow team? I have not seen any responses on my GH issue either...
Thanks!
John
0 -
Answered in the GitHub issue
0
Please sign in to leave a comment.
Comments
4 comments