public void DisposingContainerDisposesOwnedObjects()
        {
            ILifetimeContainer   container = new LifetimeContainer();
            MockDisposableObject mdo       = new MockDisposableObject();

            container.Add(mdo);
            container.Dispose();

            Assert.IsTrue(mdo.WasDisposed);
        }
        public void RemovingItemsFromContainerDoesNotDisposeThem()
        {
            ILifetimeContainer   container = new LifetimeContainer();
            MockDisposableObject mdo       = new MockDisposableObject();

            container.Add(mdo);
            container.Remove(mdo);
            container.Dispose();

            Assert.IsFalse(mdo.WasDisposed);
        }
        public void DisposingItemsFromContainerDisposesInReverseOrderAdded()
        {
            ILifetimeContainer  container = new LifetimeContainer();
            DisposeOrderCounter obj1      = new DisposeOrderCounter();
            DisposeOrderCounter obj2      = new DisposeOrderCounter();
            DisposeOrderCounter obj3      = new DisposeOrderCounter();

            container.Add(obj1);
            container.Add(obj2);
            container.Add(obj3);

            container.Dispose();

            Assert.AreEqual(1, obj3.DisposePosition);
            Assert.AreEqual(2, obj2.DisposePosition);
            Assert.AreEqual(3, obj1.DisposePosition);
        }