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)); }
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()); }
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()); }
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()); }
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()); }
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(); }
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) {} }
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)); }
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()); }
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)); }