public void Read_SingleStream_ReadFromThePositionAfterTheEnd()
        {
            ConcatReadingStream s = Create(CreateCharStm('a', 'g'));

            s.Position = 10;
            CheckRead(s, 100, "");
        }
        public void Read_SingleStream_ReadFromMiddleOfTheStream_ReadMoreThanExists()
        {
            ConcatReadingStream s = Create(CreateCharStm('a', 'g'));

            s.Position = 4;
            CheckRead(s, 100, "ef");
        }
        public void Read_SingleStream_ReadExactlyFromTheEndOfTheStream()
        {
            ConcatReadingStream s = Create(CreateCharStm('a', 'g'));

            s.Position = 6;
            CheckRead(s, 100, "");
        }
        ConcatReadingStream Create(params MemoryStream[] streams)
        {
            ConcatReadingStream ret = new ConcatReadingStream();

            ret.Update(streams);
            return(ret);
        }
        public void Read_SingleStream_ReadFromMiddleOfTheStream()
        {
            ConcatReadingStream s = Create(CreateCharStm('a', 'g'));

            s.Position = 3;
            CheckRead(s, "def");
        }
        public void Read_TwoStreams_ReadExactlyWholeStream()
        {
            ConcatReadingStream s = Create(
                CreateCharStm('a', 'g'),
                CreateCharStm('o', 'u')
                );

            CheckRead(s, 100, "abcdefopqrst");
        }
        void CheckRead(ConcatReadingStream stm, int bytesToRead, string expectation)
        {
            byte[] buf     = new byte[bytesToRead];
            long   savePos = stm.Position;
            int    read    = stm.Read(buf, 0, bytesToRead);

            Assert.AreEqual(expectation.Length, read);
            Assert.AreEqual(expectation, Encoding.ASCII.GetString(buf, 0, read));
            Assert.AreEqual(savePos + read, stm.Position);
        }
        public void Read_TwoStreams_ReadFromTheMiddleOfTheSecondStream()
        {
            ConcatReadingStream s = Create(
                CreateCharStm('0', '7'),
                CreateCharStm('o', 'u')
                );

            s.Position = 8;
            CheckRead(s, 2, "pq");
        }
        public void Read_TwoStreams_ReadFromTheMiddleOfTheFirstStreamToTheMiddleOfTheSecondStream()
        {
            ConcatReadingStream s = Create(
                CreateCharStm('0', '7'),
                CreateCharStm('o', 'u')
                );

            s.Position = 4;
            CheckRead(s, 7, "456opqr");
        }
        public void Read_ThreeStreams_ReadOverTheSteamInTheMiddle()
        {
            ConcatReadingStream s = Create(
                CreateCharStm('0', '7'),
                CreateCharStm('a', 'f'),
                CreateCharStm('o', 'u')
                );

            s.Position = 5;
            CheckRead(s, 10, "56abcdeopq");
        }
        public void Read_TwoStreams_ReadNothing()
        {
            ConcatReadingStream s = Create(
                CreateCharStm('0', '7'),
                CreateCharStm('o', 'u')
                );

            s.Position = 8;
            CheckRead(s, 0, "");
            Assert.AreEqual(s.Position, (long)8);
        }
 void CheckRead(ConcatReadingStream stm, string expectation)
 {
     CheckRead(stm, expectation.Length, expectation);
 }