public async Task IfBodyIsNull_ThenForEachAsyncThrowsArgumentNullException_SyncDelegateOverload()
        {
            IPagedEnumerable <string> seq = new PagedAlphabet();

            var ex = await Assert.ThrowsAsync <ArgumentNullException>(() => seq.ForEachAsync((Action <string>)null));

            Assert.Equal("body", ex.ParamName);
        }
        public async Task ToListAsyncCorrectlyHandlesEmptyCollections()
        {
            var seq = new PagedAlphabet(4, 0);

            var list = await seq.ToListAsync();

            Assert.Empty(list);
        }
        public async Task ForEachAsyncFuncSupportsCancellation()
        {
            PagedAlphabet seq = new PagedAlphabet(4, 10);

            //Call with an already cancelled cancellation token
            using CancellationTokenSource source = new CancellationTokenSource();
            source.Cancel();

            await Assert.ThrowsAsync <OperationCanceledException>(async() => await seq.ForEachAsync(item => Task.Delay(0), source.Token));
        }
        public async Task ToListAsyncCollectsAllElementsOfSequence()
        {
            var seq = new PagedAlphabet(4, 10);

            var list = await seq.ToListAsync();

            Assert.Equal(10, list.Count);
            Assert.Equal("A", list.First());
            Assert.Equal("J", list.Last());
        }
        public async Task ForEachAsyncVisitsEveryMemberOfTheSequence_SyncDelegateOverload()
        {
            var visited = new List <string>();

            var seq = new PagedAlphabet();

            await seq.ForEachAsync(s => visited.Add(s));

            Assert.Equal(26, visited.Count);
            Assert.Equal("A", visited.First());
            Assert.Equal("Z", visited.Last());
        }
        public async Task ForEachAsyncVisitsEveryMemberOfTheSequence()
        {
            var visited = new List <string>();

            var seq = new PagedAlphabet();

            await seq.ForEachAsync(s => { visited.Add(s); return(Task.Delay(0)); });

            Assert.Equal(26, visited.Count);
            Assert.Equal("A", visited.First());
            Assert.Equal("Z", visited.Last());
        }
        public async Task ToListAsyncSupportsCancellation()
        {
            PagedAlphabet seq = new PagedAlphabet(4, 10);

            //Call with an already cancelled cancellation token
            using (CancellationTokenSource source = new CancellationTokenSource())
            {
                source.Cancel();

                await Assert.ThrowsAsync <OperationCanceledException>(async() => await seq.ToListAsync(source.Token));
            }
        }