Пример #1
0
        public async Task RegistedServices_CausesDeferralOfSuspension()
        {
            // Create two services which will complete suspension when their tasks complete

            TaskCompletionSource <bool> tcs1 = new TaskCompletionSource <bool>();
            TaskCompletionSource <bool> tcs2 = new TaskCompletionSource <bool>();

            MockService service1 = new MockService(tcs1.Task);
            MockService service2 = new MockService(tcs2.Task);

            // Create the LifetimeManager

            TestableLifetimeManager lifetimeManager = CreateLifetimeManager(new[] { service1, service2 });

            // Suspend the LifetimeManager

            MockSuspendingEventArgs suspendingEventArgs = new MockSuspendingEventArgs();

            lifetimeManager.Suspend(suspendingEventArgs);

            // Check that the suspension is deferred

            Assert.True(suspendingEventArgs.IsDeferred);

            // Check that the suspension is deferred on completion of first service

            tcs1.SetResult(true);
            await Task.Yield();

            Assert.True(suspendingEventArgs.IsDeferred);

            // Check that the suspension is completed on completion of second service

            tcs2.SetResult(true);
            await Task.Yield();

            Assert.False(suspendingEventArgs.IsDeferred);
        }
Пример #2
0
        public async Task RegistedServices_CausesDeferralOfSuspension()
        {
            var tcs1 = new TaskCompletionSource<bool>();
            var service1 = Substitute.For<ILifetimeAware>();
            service1.OnSuspending().Returns(tcs1.Task);

            var tcs2 = new TaskCompletionSource<bool>();
            var service2 = Substitute.For<ILifetimeAware>();
            service2.OnSuspending().Returns(tcs2.Task);

            TestableLifetimeManager lifetimeManager = CreateLifetimeManager(new[] { service1, service2 });

            MockSuspendingEventArgs suspendingEventArgs = new MockSuspendingEventArgs();
            lifetimeManager.Suspend(suspendingEventArgs);

            Assert.IsTrue(suspendingEventArgs.IsDeferred);

            tcs1.SetResult(true);
            await Task.Yield();
            Assert.IsTrue(suspendingEventArgs.IsDeferred);

            tcs2.SetResult(true);
            await Task.Yield();
            Assert.IsFalse(suspendingEventArgs.IsDeferred);
        }
Пример #3
0
        public async Task RegistedServices_CausesDeferralOfSuspension()
        {
            // Create two services which will complete suspension when their tasks complete

            TaskCompletionSource<bool> tcs1 = new TaskCompletionSource<bool>();
            TaskCompletionSource<bool> tcs2 = new TaskCompletionSource<bool>();

            MockService service1 = new MockService(tcs1.Task);
            MockService service2 = new MockService(tcs2.Task);

            // Create the LifetimeManager

            TestableLifetimeManager lifetimeManager = CreateLifetimeManager(new[] { service1, service2 });

            // Suspend the LifetimeManager

            MockSuspendingEventArgs suspendingEventArgs = new MockSuspendingEventArgs();
            lifetimeManager.Suspend(suspendingEventArgs);

            // Check that the suspension is deferred

            Assert.IsTrue(suspendingEventArgs.IsDeferred);

            // Check that the suspension is deferred on completion of first service

            tcs1.SetResult(true);
            await Task.Yield();
            Assert.IsTrue(suspendingEventArgs.IsDeferred);

            // Check that the suspension is completed on completion of second service

            tcs2.SetResult(true);
            await Task.Yield();
            Assert.IsFalse(suspendingEventArgs.IsDeferred);
        }