示例#1
0
        public async Task WriteAsync()
        {
            var main  = new MemoryStream();
            var other = new MemoryStream();

            await using var target = new TeeStream(main, other);

            await using var wr = new StreamWriter(target);

            var data = "Test data".AsMemory();
            await wr.WriteAsync(data);

            await wr.FlushAsync();

            var other2 = new MemoryStream();

            target.Add(other2);

            await wr.WriteAsync(" after add");

            await wr.FlushAsync();

            Assert.AreEqual("Test data after add", Read(other));
            Assert.AreEqual(" after add", Read(other2));
        }
示例#2
0
        public void TestTeeStream()
        {
            MemoryStream ms1 = new MemoryStream(), ms2 = new MemoryStream();
            TeeStream    stream = new TeeStream(ms1, ms2);

            byte[] bytes = Encoding.UTF8.GetBytes("Hello, world!");
            stream.Write(bytes);
            Assert.AreEqual(ms1.Position, ms2.Position);
            TestHelpers.AssertArrayEquals(bytes, ms1.ToArray());
            TestHelpers.AssertArrayEquals(bytes, ms2.ToArray());
        }
示例#3
0
        public void Write_NoTap()
        {
            byte[] data = Encoding.ASCII.GetBytes("Hello, World!");

            var sink = new MemoryStream();
            var tee  = new TeeStream(sink);

            tee.Write(data, 0, data.Length);

            CollectionAssert.AreEqual(data, sink.ToArray());
        }
示例#4
0
        public void Read_NoTap()
        {
            byte[] data = Encoding.ASCII.GetBytes("Hello, World!");

            var tee  = new TeeStream(new MemoryStream(data));
            var sink = new MemoryStream();

            tee.CopyTo(sink);

            CollectionAssert.AreEqual(data, sink.ToArray());
        }
示例#5
0
        public void Read_Offset()
        {
            byte[] data = Encoding.ASCII.GetBytes("Hello, World!");

            var tap = new MemoryStream();
            var tee = new TeeStream(new MemoryStream(data), readTap: tap);

            byte[] buf   = new byte[50 + data.Length];
            int    nread = tee.Read(buf, 50, data.Length);

            Assert.AreEqual(data.Length, nread);
            CollectionAssert.AreEqual(data, tap.ToArray());
        }
示例#6
0
        public void LeaveOpen()
        {
            var main  = new MemoryStream();
            var other = new MemoryStream();

            using var target = new TeeStream(main, other, true);

            target.Dispose();

            Assert.IsTrue(main.CanSeek, "Not disposed");

            main.Dispose();
            other.Dispose();
        }
示例#7
0
        public void DisposeAll()
        {
            var main  = new MemoryStream();
            var other = new MemoryStream();

            using var target = new TeeStream(main, other);
            using var wr     = new StreamWriter(target);

            wr.Dispose();

            try
            {
                Read(main);
                Assert.Fail("Expected stream to be closed.");
            }catch (ObjectDisposedException) {}
        }
示例#8
0
        public void WritesToAll()
        {
            var main  = new MemoryStream();
            var other = new MemoryStream();

            var data = "Test text";

            using var target = new TeeStream(main, other);

            using var wr = new StreamWriter(target);
            wr.Write(data);

            wr.Flush();

            Assert.AreEqual(data, Read(main));
            Assert.AreEqual(data, Read(other));
        }
示例#9
0
        public void Write_Offset()
        {
            byte[] data = Encoding.ASCII.GetBytes("Hello, World!");
            byte[] buf;

            using (var mem = new MemoryStream())
            {
                mem.Write(new byte[50]);
                mem.Write(data);
                buf = mem.ToArray();
            }

            var sink = new MemoryStream();
            var tap  = new MemoryStream();
            var tee  = new TeeStream(sink, writeTap: tap);

            tee.Write(buf, 50, data.Length);

            CollectionAssert.AreEqual(data, sink.ToArray());
            CollectionAssert.AreEqual(data, tap.ToArray());
        }
示例#10
0
        public void WritesToAdded()
        {
            using var main  = new MemoryStream();
            using var other = new MemoryStream();

            var target = new TeeStream(main, other);

            using var wr = new StreamWriter(target);

            wr.Write("Test");
            wr.Flush();

            var other2 = new MemoryStream();

            target.Add(other2);

            wr.Write(" after added");

            wr.Flush();

            Assert.AreEqual("Test after added", Read(main));
            Assert.AreEqual("Test after added", Read(other));
            Assert.AreEqual(" after added", Read(other2));
        }