public object InvokeBinding(IBinding binding, IContextManager contextManager, object[] arguments, ITestTracer testTracer, out TimeSpan duration) { MethodInfo methodInfo; Delegate bindingAction; EnsureReflectionInfo(binding, out methodInfo, out bindingAction); try { object result; Stopwatch stopwatch = new Stopwatch(); using (CreateCultureInfoScope(contextManager)) { stopwatch.Start(); object[] invokeArgs = new object[arguments == null ? 1 : arguments.Length + 1]; if (arguments != null) Array.Copy(arguments, 0, invokeArgs, 1, arguments.Length); invokeArgs[0] = contextManager; result = bindingAction.DynamicInvoke(invokeArgs); if (result is Task) { ((Task) result).Wait(); } stopwatch.Stop(); } if (runtimeConfiguration.TraceTimings && stopwatch.Elapsed >= runtimeConfiguration.MinTracedDuration) { testTracer.TraceDuration(stopwatch.Elapsed, binding.Method, arguments); } duration = stopwatch.Elapsed; return result; } catch (ArgumentException ex) { throw errorProvider.GetCallError(binding.Method, ex); } catch (TargetInvocationException invEx) { var ex = invEx.InnerException; ex = ex.PreserveStackTrace(errorProvider.GetMethodText(binding.Method)); throw ex; } catch (AggregateException agEx) //from Task.Wait(); { var ex = agEx.InnerExceptions.First(); ex = ex.PreserveStackTrace(errorProvider.GetMethodText(binding.Method)); throw ex; } }
public virtual void OnFeatureEnd() { // if the unit test provider would execute the fixture teardown code // only delayed (at the end of the execution), we ignore the // feature-end call, if the feature has been closed already if (_unitTestRuntimeProvider.DelayedFixtureTearDown && FeatureContext == null) { return; } FireEvents(HookType.AfterFeature); if (_specFlowConfiguration.TraceTimings) { FeatureContext.Stopwatch.Stop(); var duration = FeatureContext.Stopwatch.Elapsed; _testTracer.TraceDuration(duration, "Feature: " + FeatureContext.FeatureInfo.Title); } _contextManager.CleanupFeatureContext(); }
public virtual async Task <(object result, TimeSpan duration)> InvokeBindingAsync(IBinding binding, IContextManager contextManager, object[] arguments, ITestTracer testTracer) { MethodInfo methodInfo; Delegate bindingAction; EnsureReflectionInfo(binding, out methodInfo, out bindingAction); try { object result; Stopwatch stopwatch = new Stopwatch(); using (CreateCultureInfoScope(contextManager)) { stopwatch.Start(); object[] invokeArgs = new object[arguments == null ? 1 : arguments.Length + 1]; if (arguments != null) { Array.Copy(arguments, 0, invokeArgs, 1, arguments.Length); } invokeArgs[0] = contextManager; result = await BindingDelegateInvoker.InvokeDelegateAsync(bindingAction, invokeArgs); stopwatch.Stop(); } if (specFlowConfiguration.TraceTimings && stopwatch.Elapsed >= specFlowConfiguration.MinTracedDuration) { testTracer.TraceDuration(stopwatch.Elapsed, binding.Method, arguments); } return(result, stopwatch.Elapsed); } catch (ArgumentException ex) { throw errorProvider.GetCallError(binding.Method, ex); } catch (TargetInvocationException invEx) { var ex = invEx.InnerException; ex = ex.PreserveStackTrace(errorProvider.GetMethodText(binding.Method)); throw ex; } catch (AggregateException aggregateEx) { var ex = aggregateEx.InnerExceptions.First(); ex = ex.PreserveStackTrace(errorProvider.GetMethodText(binding.Method)); throw ex; } }
public object InvokeBinding(IBinding binding, IContextManager contextManager, object[] arguments, ITestTracer testTracer, out TimeSpan duration) { MethodInfo methodInfo; Delegate bindingAction; EnsureReflectionInfo(binding, out methodInfo, out bindingAction); try { object result; Stopwatch stopwatch = new Stopwatch(); using (CreateCultureInfoScope(contextManager)) { stopwatch.Start(); object[] invokeArgs = new object[arguments == null ? 1 : arguments.Length + 1]; if (arguments != null) { Array.Copy(arguments, 0, invokeArgs, 1, arguments.Length); } invokeArgs[0] = contextManager; result = bindingAction.DynamicInvoke(invokeArgs); stopwatch.Stop(); } if (runtimeConfiguration.TraceTimings && stopwatch.Elapsed >= runtimeConfiguration.MinTracedDuration) { testTracer.TraceDuration(stopwatch.Elapsed, binding.Method, arguments); } duration = stopwatch.Elapsed; return(result); } catch (ArgumentException ex) { throw errorProvider.GetCallError(binding.Method, ex); } catch (TargetInvocationException invEx) { var ex = invEx.InnerException; ex = ex.PreserveStackTrace(errorProvider.GetMethodText(binding.Method)); throw ex; } }
public object InvokeAction(object[] arguments, ITestTracer testTracer, out TimeSpan duration) { try { object result; Stopwatch stopwatch = new Stopwatch(); using (CreateCultureInfoScope()) { stopwatch.Start(); result = BindingAction.DynamicInvoke(arguments); stopwatch.Stop(); } if (RuntimeConfiguration.Current.TraceTimings && stopwatch.Elapsed >= RuntimeConfiguration.Current.MinTracedDuration) { testTracer.TraceDuration(stopwatch.Elapsed, MethodInfo, arguments); } duration = stopwatch.Elapsed; return result; } catch (ArgumentException ex) { throw errorProvider.GetCallError(MethodInfo, ex); } catch (TargetInvocationException invEx) { var ex = invEx.InnerException; ex = ex.PreserveStackTrace(errorProvider.GetMethodText(MethodInfo)); throw ex; } }
public object InvokeAction(IContextManager contextManager, object[] arguments, ITestTracer testTracer, out TimeSpan duration) { try { object result; Stopwatch stopwatch = new Stopwatch(); using (CreateCultureInfoScope(contextManager)) { stopwatch.Start(); object[] invokeArgs = new object[arguments == null ? 1 : arguments.Length + 1]; if (arguments != null) Array.Copy(arguments, 0, invokeArgs, 1, arguments.Length); invokeArgs[0] = contextManager; result = BindingAction.DynamicInvoke(invokeArgs); stopwatch.Stop(); } if (runtimeConfiguration.TraceTimings && stopwatch.Elapsed >= runtimeConfiguration.MinTracedDuration) { testTracer.TraceDuration(stopwatch.Elapsed, MethodInfo, arguments); } duration = stopwatch.Elapsed; return result; } catch (ArgumentException ex) { throw errorProvider.GetCallError(MethodInfo, ex); } catch (TargetInvocationException invEx) { var ex = invEx.InnerException; ex = ex.PreserveStackTrace(errorProvider.GetMethodText(MethodInfo)); throw ex; } }