public void FinallyAddRemoveThreadSafe()
        {
            var called = 0;
            var value  = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            void FinallyAction(IMutableAsyncToken <MyClass> result)
            {
                called++;

                Assert.AreSame(token, result);

                token.Remove(FinallyAction);
            }

            token.OnFinally(_ =>
            {
                token.Remove(FinallyAction);
            });
            token.OnFinally(FinallyAction);

            token.Fail(value);

            Assert.AreEqual(1, called);
        }
        public void SucceedAddRemoveThreadSafe()
        {
            var called = 0;
            var value  = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            void SucceedAction(MyClass result)
            {
                called++;

                Assert.AreSame(value, result);

                token.Remove(SucceedAction);
            }

            token.OnSuccess(_ =>
            {
                token.Remove(SucceedAction);
            });
            token.OnSuccess(SucceedAction);

            token.Succeed(value);

            Assert.AreEqual(1, called);
        }
Example #3
0
        /// <inheritdoc cref="IAsyncToken{T}"/>
        public IMutableAsyncToken <TR> Map <TR>(Func <T, TR> map)
        {
            var output = new MutableAsyncToken <TR>();

            OnSuccess(value => output.Succeed(map(value)));
            OnFailure(output.Fail);

            return(output);
        }
        public void FinallyPost()
        {
            var isCalled = false;
            var value    = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            token.Fail(value);

            token
            .OnFinally(result =>
            {
                isCalled = true;

                Assert.AreSame(token, result);
            });

            Assert.IsTrue(isCalled);
        }
        public void FinallyMulti()
        {
            var called = 0;
            var value  = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            token
            .OnFinally(result =>
            {
                called++;

                Assert.AreSame(token, result);
            });

            token.Fail(value);
            token.Fail(value);

            Assert.AreEqual(2, called);
        }
        public void SucceedPost()
        {
            var isCalled = false;
            var value    = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            token.Succeed(value);

            token
            .OnSuccess(result =>
            {
                isCalled = true;

                Assert.AreSame(value, result);
            })
            .OnFailure(exception => throw exception);

            Assert.IsTrue(isCalled);
        }
        public void Fail()
        {
            var isCalled = false;
            var value    = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            token
            .OnFailure(result =>
            {
                isCalled = true;

                Assert.AreSame(value, result);
            })
            .OnSuccess(result => throw new Exception());

            token.Fail(value);

            Assert.IsTrue(isCalled);
        }
        public void SucceedMulti()
        {
            var called = 0;
            var value  = new MyClass();

            var token = new MutableAsyncToken <MyClass>();

            token
            .OnSuccess(result =>
            {
                called++;

                Assert.AreSame(value, result);
            })
            .OnFailure(exception => throw exception);

            token.Succeed(value);
            token.Succeed(value);

            Assert.AreEqual(2, called);
        }
        public void FailMultiPrePost()
        {
            var called = 0;
            var value  = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            token.Fail(value);

            token
            .OnFailure(result =>
            {
                called++;

                Assert.AreSame(value, result);
            })
            .OnSuccess(exception => throw new Exception());

            token.Fail(value);

            Assert.AreEqual(2, called);
        }
        public void FailAddRemove()
        {
            var called = 0;
            var value  = new Exception();

            var token = new MutableAsyncToken <MyClass>();

            token.Fail(value);

            void FailAction(Exception result)
            {
                called++;

                Assert.AreSame(value, result);
            }

            token.OnFailure(FailAction);
            token.Remove(FailAction);

            token.Fail(value);

            Assert.AreEqual(1, called);
        }