示例#1
0
        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);
        }
示例#2
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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }