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); }
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); }
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); }