Пример #1
0
        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()));
            }
        }
Пример #2
0
 public void Current_WithoutNested_ReturnsCorrectInstance()
 {
     using (DisposableContext dc = new DisposableContext())
     {
         Assert.IsTrue(ReferenceEquals(dc, DisposableContext.Current));
     }
 }
Пример #3
0
        public void Dispose_WhenHasEnlistent_DisposesEnlistment()
        {
            bool   disposed = false;
            Action dispose  = () => disposed = true;

            using (DisposableContext dc = new DisposableContext())
            {
                dc.Enlist(dispose.ToDisposable());
            }

            Assert.IsTrue(disposed);
        }
Пример #4
0
        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]);
            }
        }