Ejemplo n.º 1
0
        public void EmptyStream()
        {
            byte[] buffer = new byte[16];

            CombinedStream sut = new CombinedStream();

            Assert.AreEqual(0, sut.Read(buffer, 0, buffer.Length));
        }
Ejemplo n.º 2
0
        public void TestCombinedStream()
        {
            DisposableFlag f1 = new DisposableFlag();
            DisposableFlag f2 = new DisposableFlag();

            Assert.IsFalse(f1.Disposed || f2.Disposed);

            Stream ms1 = new DisposingStream(new MemoryStream(Encoding.ASCII.GetBytes("Hello"))).WithDisposeOf(f1);
            Stream ms2 = new DisposingStream(new MemoryStream(Encoding.ASCII.GetBytes("There"))).WithDisposeOf(f2);

            Assert.AreEqual(ms1.Length, ms2.Length);

            int size = (int)ms1.Length;

            byte[] bytes = new byte[size * 2];

            using (Stream cs = new CombinedStream(ms1, ms2))
            {
                Assert.IsTrue(cs.CanRead);

                Assert.IsFalse(f1.Disposed);
                Assert.AreEqual(size, cs.Read(bytes, 0, size));
                Assert.IsFalse(f1.Disposed);                 //still not disposed util read of 0 bytes
                Assert.AreEqual(1, cs.Read(bytes, size, 1)); //read 1 more byte
                Assert.IsTrue(f1.Disposed);
                //now finish the second one...
                Assert.IsFalse(f2.Disposed);
                Assert.AreEqual(size - 1, cs.Read(bytes, size + 1, size - 1));
                Assert.IsFalse(f2.Disposed);//still not done
                Assert.AreEqual(-1, cs.ReadByte());
                Assert.IsTrue(f2.Disposed);
            }

            Assert.AreEqual("HelloThere", Encoding.ASCII.GetString(bytes));

            //both were disposed
            Assert.IsTrue(f1.Disposed && f2.Disposed);
        }
Ejemplo n.º 3
0
        public void CanReadStream(int requestedCount)
        {
            Random rnd = new Random();

            byte[] valueBytes1 = new byte[1024 * 1024];
            byte[] valueBytes2 = new byte[1024 * 1024];
            rnd.NextBytes(valueBytes1);
            rnd.NextBytes(valueBytes2);
            Stream stream1 = new ChunkMemoryStream(valueBytes1, 1024);
            Stream stream2 = new ChunkMemoryStream(valueBytes2, 1024);

            CombinedStream stream = new CombinedStream(stream1, stream2, inner => stream2 = inner);

            byte[] read  = new byte[2 * 1024 * 1024];
            int    nRead = stream.Read(read, 0, requestedCount);

            Assert.Equal(requestedCount, nRead);

            var upperBound = requestedCount > 1024 * 1024 ? 1024 * 1024 : requestedCount;

            for (int i = 0; i < upperBound; i++)
            {
                Assert.Equal(valueBytes1[i], read[i]);
            }
            if (requestedCount > 1024 * 1024)
            {
                for (int i = 0; i < requestedCount - 1024 * 1024; i++)
                {
                    Assert.Equal(valueBytes2[i], read[i + 1024 * 1024]);
                }
            }
            for (int i = requestedCount; i < 2 * 1024 * 1024; i++)
            {
                Assert.Equal(0, read[i]);
            }
        }