public override void Execute(ActionExecutionContext context) { _context = context; UpdateIndicator(context, _message); // Wrap the inner result in a SequentialResult s.t. it gets injected by the container but avoid deep nesting var wrapper = new WorkerThreadResultDecorator(_inner); wrapper.Completed += OnInnerCompleted; wrapper.Execute(context); }
public override void Execute(ActionExecutionContext context) { _context = context; UpdateIndicator(context, _message); // Wrap the inner result in a SequentialResult s.t. it gets injected by the container but avoid deep nesting var wrapper = new WorkerThreadResultDecorator(_inner); wrapper.Completed += OnInnerCompleted; wrapper.Execute(context); }
public void DecoratorFailsWithSameError() { var waitHandle = new ManualResetEvent(false); var inner = TestHelper.MockResult(true, null).Object; var sut = new WorkerThreadResultDecorator(inner); sut.Completed += (sender, args) => { Assert.IsTrue(args.WasCancelled); waitHandle.Set(); }; sut.Execute(null); waitHandle.WaitOne(3000); }
public void DecoratorFailsWithSameError() { var waitHandle = new ManualResetEvent(false); var error = new Exception("foo"); var inner = TestHelper.MockResult(false, error).Object; var sut = new WorkerThreadResultDecorator(inner); sut.Completed += (sender, args) => { Assert.AreSame(error, args.Error); waitHandle.Set(); }; sut.Execute(null); waitHandle.WaitOne(3000); }
public void InnerResultIsExecutedOnWorkerThread() { int threadId = Thread.CurrentThread.ManagedThreadId; var waitHandle = new ManualResetEvent(false); int? innerThreadId = null; var inner = new DelegateResult(() => { innerThreadId = Thread.CurrentThread.ManagedThreadId; waitHandle.Set(); }); var sut = new WorkerThreadResultDecorator(inner); sut.Execute(null); waitHandle.WaitOne(3000); Assert.IsNotNull(innerThreadId); Assert.AreNotEqual(threadId, innerThreadId.Value); }
public void DecoratorDoesntCompleteOnWorkerThreadWhenContextIsGiven() { var waitHandle = new ManualResetEvent(false); var sendInvoked = false; var contextMock = new Mock<SynchronizationContext>(); contextMock.Setup(x => x.Send(It.IsAny<SendOrPostCallback>(), It.IsAny<object>())) .Callback<SendOrPostCallback, object>((cb, args) => { Assert.IsInstanceOf<ResultCompletionEventArgs>(args); sendInvoked = true; waitHandle.Set(); }); SynchronizationContext.SetSynchronizationContext(contextMock.Object); var inner = new DelegateResult(() => { }); var sut = new WorkerThreadResultDecorator(inner); sut.Execute(null); waitHandle.WaitOne(3000); Assert.IsTrue(sendInvoked); }