From c0cf71bec95fabafb4860564aecd464ba59254ef Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Mon, 29 Feb 2016 11:51:56 +0000 Subject: Implement IDisposable for CodedInputStream and CodedOutputStream This fixes issue #679 and issue #1282. (The .gitignore change is just around ncrunch; I can put it in a separate PR if you really want.) --- .../Google.Protobuf.Test/CodedOutputStreamTest.cs | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs') diff --git a/csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs b/csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs index 3297fe87..48bf6d60 100644 --- a/csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs +++ b/csharp/src/Google.Protobuf.Test/CodedOutputStreamTest.cs @@ -387,5 +387,33 @@ namespace Google.Protobuf Assert.IsTrue(cin.IsAtEnd); } } + + [Test] + public void Dispose_DisposesUnderlyingStream() + { + var memoryStream = new MemoryStream(); + Assert.IsTrue(memoryStream.CanWrite); + using (var cos = new CodedOutputStream(memoryStream)) + { + cos.WriteRawByte(0); + Assert.AreEqual(0, memoryStream.Position); // Not flushed yet + } + Assert.AreEqual(1, memoryStream.ToArray().Length); // Flushed data from CodedOutputStream to MemoryStream + Assert.IsFalse(memoryStream.CanWrite); // Disposed + } + + [Test] + public void Dispose_WithLeaveOpen() + { + var memoryStream = new MemoryStream(); + Assert.IsTrue(memoryStream.CanWrite); + using (var cos = new CodedOutputStream(memoryStream, true)) + { + cos.WriteRawByte(0); + Assert.AreEqual(0, memoryStream.Position); // Not flushed yet + } + Assert.AreEqual(1, memoryStream.Position); // Flushed data from CodedOutputStream to MemoryStream + Assert.IsTrue(memoryStream.CanWrite); // We left the stream open + } } } \ No newline at end of file -- cgit v1.2.3