public void SetException_Should_RunContinuationIfOneIsPresent()
        {
            var taskSlim = new TaskSlim(null);

            taskSlim.IsCompleted.Should().BeFalse();
            taskSlim.HasContinuation.Should().BeFalse();
            taskSlim.HasException.Should().BeFalse();
            taskSlim.RunContinuationAsync.Should().BeFalse();

            var runCont = false;

            taskSlim.OnCompleted(() =>
            {
                runCont = true;

                Assert.Throws <Exception>(() =>
                {
                    taskSlim.GetResult();                     // throws the exception
                });
            });

            taskSlim.SetException(new Exception("nope"), runContinuationAsync: false);

            runCont.Should().BeTrue();
        }
        public void OnCompleted_Should_RunContinuationIfCompleted()
        {
            var taskSlim = new TaskSlim(null);

            taskSlim.IsCompleted.Should().BeFalse();
            taskSlim.HasContinuation.Should().BeFalse();
            taskSlim.HasException.Should().BeFalse();
            taskSlim.RunContinuationAsync.Should().BeFalse();

            taskSlim.SetCompleted(runContinuationAsync: false);

            var runCont = false;
            taskSlim.OnCompleted(() =>
            {
                runCont = true;
                taskSlim.GetResult();
            });

            runCont.Should().BeTrue();
        }
        public void OnCompleted_Should_RunContinuationIfCompleted()
        {
            var taskSlim = new TaskSlim(null);

            taskSlim.IsCompleted.Should().BeFalse();
            taskSlim.HasContinuation.Should().BeFalse();
            taskSlim.HasException.Should().BeFalse();
            taskSlim.RunContinuationAsync.Should().BeFalse();

            taskSlim.SetCompleted(runContinuationAsync: false);

            var runCont = false;

            taskSlim.OnCompleted(() =>
            {
                runCont = true;
                taskSlim.GetResult();
            });

            runCont.Should().BeTrue();
        }
        public void OnCompleted_Should_RunContinuationIfCompletedWithException()
        {
            var taskSlim = new TaskSlim(null);

            taskSlim.IsCompleted.Should().BeFalse();
            taskSlim.HasContinuation.Should().BeFalse();
            taskSlim.HasException.Should().BeFalse();
            taskSlim.RunContinuationAsync.Should().BeFalse();

            taskSlim.SetException(new Exception("nope"), runContinuationAsync: false);

            var runCont = false;
            taskSlim.OnCompleted(() =>
            {
                runCont = true;

                Assert.Throws<Exception>(() =>
                {
                    taskSlim.GetResult(); // throws the exception
                });
            });

            runCont.Should().BeTrue();
        }