private static IInvocationDescriptor GetInvocationDescriptor(object actual) { IInvocationDescriptor invocationDescriptor = actual as IInvocationDescriptor; if (invocationDescriptor == null) { TestDelegate testDelegate = actual as TestDelegate; if (testDelegate == null) { throw new ArgumentException( String.Format("The actual value must be a TestDelegate or ActualValueDelegate but was {0}", actual.GetType().Name), "actual"); } invocationDescriptor = new VoidInvocationDescriptor(testDelegate); } return(invocationDescriptor); }
internal static Exception Intercept(object invocation) { IInvocationDescriptor invocationDescriptor = GetInvocationDescriptor(invocation); #if NET_4_5 if (AsyncInvocationRegion.IsAsyncOperation(invocationDescriptor.Delegate)) { using (AsyncInvocationRegion region = AsyncInvocationRegion.Create(invocationDescriptor.Delegate)) { object result = invocationDescriptor.Invoke(); try { region.WaitForPendingOperationsToComplete(result); return(null); } catch (Exception ex) { return(ex); } } } else #endif { try { invocationDescriptor.Invoke(); return(null); } catch (Exception ex) { return(ex); } } }