示例#1
0
        public void CreateNext_HandlesExceptionsFromPreviousTokenRegistration()
        {
            using var series = new CancellationSeries();
            var token1 = series.CreateNext();

            var exception = new Exception();

            token1.Register(() => throw exception);

            var aggregateException = Assert.Throws <AggregateException>(() => series.CreateNext());

            Assert.Same(exception, aggregateException.InnerExceptions.Single());
            Assert.True(token1.IsCancellationRequested);
        }
示例#2
0
        public void CreateNext_ThrowsIfDisposed()
        {
            var series = new CancellationSeries();

            series.Dispose();

            Assert.Throws <ObjectDisposedException>(() => series.CreateNext());
        }
示例#3
0
        public void CreateNext_CancelsPreviousToken()
        {
            using var series = new CancellationSeries();
            var token1 = series.CreateNext();

            Assert.False(token1.IsCancellationRequested);

            var token2 = series.CreateNext();

            Assert.True(token1.IsCancellationRequested);
            Assert.False(token2.IsCancellationRequested);

            var token3 = series.CreateNext();

            Assert.True(token2.IsCancellationRequested);
            Assert.False(token3.IsCancellationRequested);
        }
示例#4
0
        public void CreateNext_ReturnsNonCancelledToken()
        {
            using var series = new CancellationSeries();
            var token = series.CreateNext();

            Assert.False(token.IsCancellationRequested);
            Assert.True(token.CanBeCanceled);
        }
示例#5
0
        public void CreateNext_ReturnsCancelledTokenIfInputTokenAlreadyCancelled()
        {
            var cts = new CancellationTokenSource();

            using var series = new CancellationSeries();
            cts.Cancel();

            var token = series.CreateNext(cts.Token);

            Assert.True(token.IsCancellationRequested);
        }
示例#6
0
        public void CancellingSuperTokenCancelsIssuedToken()
        {
            var cts = new CancellationTokenSource();

            using var series = new CancellationSeries(cts.Token);
            var token = series.CreateNext();

            Assert.False(token.IsCancellationRequested);

            cts.Cancel();

            Assert.True(token.IsCancellationRequested);
        }