public void ThenTryAsyncTOut_WhenExecuteIsNull_ThrowsArgumentNullException()
        {
            TryResult t = "";
            Func <Task <TryResult <int> > > t2 = null;

            Assert.ThrowsAsync <ArgumentNullException>(() => t.ThenTryAsync(t2));
        }
        public async Task ThenTryAsyncTOut_WhenTryFailed_ReturnsOriginalError()
        {
            TryResult t = "err";

            var t2 = await t.ThenTryAsync <int>(async() => 1);

            Assert.AreEqual(t.ErrorMessage, t2.ErrorMessage);
        }
        public async Task ThenTryAsync_WhenTryFailed_DoesNotExecute()
        {
            TryResult t = "err";

            var executed = false;
            await t.ThenTryAsync(async() =>
            {
                executed = true;
                return(TryResult.Succeed());
            });

            Assert.IsFalse(executed);
        }
        public async Task ThenTryAsync_WhenTrySucceeded_Executes()
        {
            TryResult t = TryResult.Succeed();

            var executed = false;
            await t.ThenTryAsync(async() =>
            {
                executed = true;
                return(TryResult.Succeed());
            });

            Assert.IsTrue(executed);
        }
        public void ThenTryAsync_WhenExecuteIsNull_ThrowsArgumentNullException()
        {
            TryResult t = "";

            Assert.ThrowsAsync <ArgumentNullException>(() => t.ThenTryAsync(null));
        }
        public void ThenTryAsync_WhenTryResultIsNull_ThrowsArgumentNullException()
        {
            TryResult t = null;

            Assert.ThrowsAsync <ArgumentNullException>(() => t.ThenTryAsync(async() => TryResult.Succeed()));
        }
        public void ThenTryAsyncTOut_WhenTryResultIsNull_ThrowsArgumentNullException()
        {
            TryResult t = null;

            Assert.ThrowsAsync <ArgumentNullException>(() => t.ThenTryAsync <int>(async() => 1));
        }