public void AfterDispose_UnusableMethodsThrow()
        {
            var subject = new SmallBlockMemoryStream();

            subject.Dispose();

            long dummy;
            var  buffer      = new byte[1];
            var  dummyTarget = new MemoryStream();
            var  actions     = new Action[]
            {
                () => dummy = subject.Length,
                () => subject.SetLength(0),
                () => dummy            = subject.Capacity,
                () => subject.Capacity = 100,
                () => dummy            = subject.Position,
                () => subject.Position = 0,
                () => subject.Seek(0, SeekOrigin.Begin),
                () => subject.Write(buffer, 0, 1),
                () => subject.WriteByte(1),
                () => CallWriteTo(subject, dummyTarget),
                () => subject.Read(buffer, 0, 1),
                () => subject.ReadByte()
            };

            foreach (var action in actions)
            {
                action.ShouldThrow <ObjectDisposedException>();
            }
        }
        public void Read_withBadParameters_fails()
        {
            var subject = new SmallBlockMemoryStream();
            var data    = new byte[10];

            Action action = () => subject.Read(null, 0, 0);

            action.ShouldThrow <ArgumentException>();

            action = () => subject.Read(data, -10, 0);
            action.ShouldThrow <ArgumentException>();

            action = () => subject.Read(data, 0, -10);
            action.ShouldThrow <ArgumentException>();

            action = () => subject.Read(data, 0, 20);
            action.ShouldThrow <ArgumentException>();
        }
        public void ReadPastEnd_succeedsWithCorrectReadLength()
        {
            const int dataLength = 100;
            const int readLength = 110;
            var       writeData  = MakeTestData(dataLength);
            var       subject    = new SmallBlockMemoryStream();

            subject.Write(writeData, 0, dataLength);
            subject.Position = 0;
            var readData = new byte[readLength];
            var read     = subject.Read(readData, 0, readLength);

            Assert.AreEqual(writeData.Length, read);
        }