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);
        }
Beispiel #4
0
        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);
        }