public void WriteStreamGetter_ReturnsWriteStream()
        {
            Stream stream;
            var    sut = new ReadWriteSegregatingStream(stream = fixture.CreateStream(), fixture.CreateStream());

            Assert.AreSame(stream, sut.WriteStream);
        }
        public void CanWrite_IsDelegatedToWriteStream_ForCanWriteAsTrue()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForCanWrite(), fixture.CreateStream());

            Assert.IsTrue(sut.CanWrite);

            fixture.Verify();
        }
        public void CanTimeout_IsDelegatedToWriteStream_ForCanTimeoutAsFalseFalse()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForCanTimeout(false), fixture.CreateStream());

            Assert.IsFalse(sut.CanTimeout);

            fixture.Verify();
        }
        public void CanTimeout_IsDelegatedToWriteAndReadStream_ForCanTimeoutAsTrueTrue()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForCanTimeout(), fixture.CreateStream_ForCanTimeout());

            Assert.IsTrue(sut.CanTimeout);

            fixture.Verify();
        }
        public void ReadStreamGetter_ReturnsReadStream()
        {
            var stream = default(Stream);

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), stream = fixture.CreateStream());

            Assert.AreSame(stream, sut.ReadStream);
        }
        public void CanRead_IsDelegatedToReadStream_ForCanReadAsFalse()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream_ForCanRead(false));

            Assert.IsFalse(sut.CanRead);

            fixture.Verify();
        }
        public void Flush_IsDelegatedToWriteStreamAndReadStream()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForFlush(), fixture.CreateStream_ForFlush());

            sut.Flush();

            fixture.Verify();
        }
        public void Seek_WherePositionsDiffer_Throws()
        {
            var position          = 42;
            var differingPosition = 17;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForSeek(position, SeekOrigin.Begin, position), fixture.CreateStream_ForSeek(position, SeekOrigin.Begin, differingPosition));

            sut.Seek(position, SeekOrigin.Begin);
        }
        public void ReadByte_IsDelegatedToReadStream()
        {
            var value = 42;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream_ForReadByte(value));

            Assert.AreEqual(value, sut.ReadByte());

            fixture.Verify();
        }
        public void Read_IsDelegatedToReadStream()
        {
            var buffer = new byte[100];

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream_ForRead(buffer, 0, buffer.Length));

            Assert.AreEqual(buffer.Length, sut.Read(buffer, 0, buffer.Length));

            fixture.Verify();
        }
        public void GetWriteTimeout_IsDelegatedToWriteStream()
        {
            var timeout = 42;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForGetWriteTimeout(timeout), fixture.CreateStream());

            Assert.AreEqual(timeout, sut.WriteTimeout);

            fixture.Verify();
        }
        public void WriteByte_IsDelegatedToWriteStream()
        {
            var value = (byte)42;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForWriteByte(value), fixture.CreateStream());

            sut.WriteByte(value);

            fixture.Verify();
        }
        public void SetLength_IsDelegatedToWriteStreamAndReadStream()
        {
            var value = 100;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForSetLength(value), fixture.CreateStream_ForSetLength(value));

            sut.SetLength(value);

            fixture.Verify();
        }
        public void Seek_IsDelegatedToWriteStreamAndReadStream()
        {
            var position = 42;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForSeek(position, SeekOrigin.Begin, position), fixture.CreateStream_ForSeek(position, SeekOrigin.Begin, position));

            Assert.AreEqual(position, sut.Seek(position, SeekOrigin.Begin));

            fixture.Verify();
        }
        public void Write_IsDelegatedToWriteStream()
        {
            var buffer = new byte[100];

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForWrite(buffer, 0, buffer.Length), fixture.CreateStream());

            sut.Write(buffer, 0, buffer.Length);

            fixture.Verify();
        }
        public void SetWriteTimeout_IsDelegatedToWriteStream()
        {
            var timeout = 42;

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForSetWriteTimeout(timeout), fixture.CreateStream());

            sut.WriteTimeout = timeout;

            fixture.Verify();
        }
        public void EndRead_IsDelegatedToReadStream()
        {
            var bufferSize  = 4711;
            var asyncResult = Task.FromResult(bufferSize);

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream_ForEndRead(asyncResult));

            Assert.AreEqual(bufferSize, sut.EndRead(asyncResult));

            fixture.Verify();
        }
        public void EndWrite_IsDelegatedToWriteStream()
        {
            var bufferSize  = 4711;
            var asyncResult = Task.FromResult(bufferSize);

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForEndWrite(asyncResult), fixture.CreateStream());

            sut.EndWrite(asyncResult);

            fixture.Verify();
        }
        public void FlushAsync_IsDelegatedToWriteStreamAndReadStream()
        {
            using (var cts = new CancellationTokenSource()) {
                var cancellationToken = cts.Token;

                var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForFlushAsync(cancellationToken), fixture.CreateStream_ForFlushAsync(cancellationToken));

                var task = sut.FlushAsync(cancellationToken);

                Assert.IsInstanceOfType(task, typeof(Task));
            }

            fixture.Verify();
        }
        public void BeginWrite_IsDelegatedToWriteStream()
        {
            var           buffer   = new byte[100];
            AsyncCallback callback = ar => { };
            var           state    = new object();

            var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForBeginWrite(buffer, callback, state), fixture.CreateStream());

            var asyncResult = sut.BeginWrite(buffer, 0, buffer.Length, callback, state);

            Assert.IsInstanceOfType(asyncResult, typeof(Task <int>));
            Assert.AreEqual(buffer.Length, ((Task <int>)asyncResult).Result);

            fixture.Verify();
        }
        public void CopyToAsync_IsDelegatedToReadStream()
        {
            using (var cts = new CancellationTokenSource()) {
                var destination       = Stream.Null;
                var bufferSize        = 4711;
                var cancellationToken = cts.Token;

                var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream_ForCopyToAsync(destination, bufferSize, cancellationToken));

                var task = sut.CopyToAsync(destination, bufferSize, cancellationToken);

                Assert.IsInstanceOfType(task, typeof(Task));
            }

            fixture.Verify();
        }
        public void WriteAsync_IsDelegatedToWriteStream()
        {
            var buffer = new byte[100];

            using (var cts = new CancellationTokenSource()) {
                var cancellationToken = cts.Token;

                var sut = new ReadWriteSegregatingStream(fixture.CreateStream_ForWriteAsync(buffer, 0, buffer.Length, cancellationToken), fixture.CreateStream());

                var task = sut.WriteAsync(buffer, 0, buffer.Length, cancellationToken);

                Assert.IsInstanceOfType(task, typeof(Task));
            }

            fixture.Verify();
        }
 public void CreateNew_WhereReadStreamIsNull_Throws()
 {
     var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), null);
 }
        public void InitializeLifetimeService_Throws()
        {
            var sut = new ReadWriteSegregatingStream(fixture.CreateStream(), fixture.CreateStream());

            sut.InitializeLifetimeService();
        }