public void IsEnlistedDisposable() { Action dispose = () => { }; IDisposable first = dispose.ToDisposable(); IDisposable second = dispose.ToDisposable(); using (DisposableContext dc = new DisposableContext()) { dc.Enlist(first); Assert.IsTrue(dc.IsEnlisted(first)); using (DisposableContext dc2 = new DisposableContext()) { dc2.Enlist(second); Assert.IsFalse(dc2.IsEnlisted(first)); Assert.IsTrue(dc2.IsEnlisted(second)); } Assert.IsTrue(dc.IsEnlisted(first)); Assert.IsTrue(dc.IsEnlisted(second)); Assert.IsFalse(dc.IsEnlisted(dispose.ToDisposable())); } }
public void Dispose_WhenHasEnlistent_DisposesEnlistment() { bool disposed = false; Action dispose = () => disposed = true; using (DisposableContext dc = new DisposableContext()) { dc.Enlist(dispose.ToDisposable()); } Assert.IsTrue(disposed); }
public void DisposeHandlesExceptionsGracefully() { bool disposed = false; Action dispose = () => disposed = true; Action throwOnDispose = () => { Assert.IsFalse(disposed); throw new InvalidOperationException(); }; try { using (DisposableContext dc = new DisposableContext()) { dc.Enlist(throwOnDispose.ToDisposable()); dc.Enlist(dispose.ToDisposable()); } } catch (AggregateException ex) { Assert.IsTrue(disposed); Assert.AreEqual(1, ex.InnerExceptions.Count); Assert.IsAssignableFrom <InvalidOperationException>(ex.InnerExceptions[0]); } }