public void ReturnsTrueOnSuccessfulDisposal()
        {
            var disposable = new Disposable();
            var result     = disposable.DisposeSafely();

            Assert.IsTrue(result);
            Assert.IsTrue(disposable.DisposeWasCalled);
        }
        public void InvokesErrorHandlerOnExceptionDuringDispose()
        {
            var errorHandlerWasInvoked = false;
            var disposable             = new Disposable(throwException: true);
            var result = disposable.DisposeSafely(error => errorHandlerWasInvoked = true);

            Assert.IsFalse(result);
            Assert.IsTrue(errorHandlerWasInvoked);
            Assert.IsTrue(disposable.DisposeWasCalled);
        }
        public void SwallowsObjectDisposedException()
        {
            var errorHandlerWasInvoked = false;
            var disposable             = new Disposable();

            disposable.Dispose();
            Assert.IsTrue(disposable.DisposeWasCalled);

            var result = disposable.DisposeSafely(error => errorHandlerWasInvoked = true);

            Assert.IsTrue(result);
            Assert.IsFalse(errorHandlerWasInvoked);
        }