public void DisposeWhenNotStarted()
        {
            // ARRANGE
            var streamA = new DisposedStream(8);
            var streamB = new DisposedStream(8);
            var chain   = new ChainedStream(new[] { streamA, streamB });

            // ACT
            chain.Dispose();

            // ASSERT
            streamA.Disposed.Should().BeTrue();
            streamB.Disposed.Should().BeTrue();
        }
        private static void Read_WhenDisposeIsDisabled_DoesNotDisposeStreams(Func <ChainedStream, byte[], int, int, int> readFunc)
        {
            // ARRANGE
            var streamA = new DisposedStream(8);
            var streamB = new DisposedStream(8);
            var chain   = new ChainedStream(new[] { streamA, streamB }, false);

            // ACT
            readFunc(chain, new byte[12], 0, 12);

            // ASSERT
            streamA.Disposed.Should().BeFalse();
            streamB.Disposed.Should().BeFalse();
        }
        public void DisposeWhenAllFinished()
        {
            // ARRANGE
            var streamA = new DisposedStream(8);
            var streamB = new DisposedStream(8);
            var chain   = new ChainedStream(new[] { streamA, streamB });

            chain.Read(new byte[16], 0, 16);

            // ACT
            chain.Dispose();

            // ASSERT
            streamA.Disposed.Should().BeTrue();
            streamB.Disposed.Should().BeTrue();
        }