From 72cc0606f490c2aa45dda6db0bb0f72cedde7ebf Mon Sep 17 00:00:00 2001 From: Logan Dam Date: Thu, 8 Nov 2018 21:15:46 +0200 Subject: [PATCH 1/4] Call base.Close() in MockFileStream.Close() --- System.IO.Abstractions.TestingHelpers/MockFileStream.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs index 68095d85a..f984dd5f5 100644 --- a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs +++ b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs @@ -66,6 +66,7 @@ public override void Close() { InternalFlush(); OnClose(); + base.Close(); } #else protected override void Dispose(bool disposing) From 16dcfdcad5d2ba1531978698ec4a7a4f30d157f5 Mon Sep 17 00:00:00 2001 From: Logan Dam Date: Thu, 8 Nov 2018 21:32:29 +0200 Subject: [PATCH 2/4] Check if we are closed already before trying to close again (fixes multiple calls to Close() throwing) --- System.IO.Abstractions.TestingHelpers/MockFileStream.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs index f984dd5f5..e405880f8 100644 --- a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs +++ b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs @@ -8,6 +8,7 @@ public class MockFileStream : MemoryStream private readonly bool canWrite = true; private readonly FileOptions options; private bool disposed; + private bool closed; public enum StreamType { @@ -64,9 +65,14 @@ public MockFileStream( #if NET40 public override void Close() { + if(closed) + { + return; + } InternalFlush(); OnClose(); base.Close(); + closed = true; } #else protected override void Dispose(bool disposing) From 5477fe7f81cdf2d9b55e49dfd6085997cab4d6af Mon Sep 17 00:00:00 2001 From: Logan Dam Date: Fri, 9 Nov 2018 11:18:34 +0200 Subject: [PATCH 3/4] - Call base.Close() before OnClose() to keep consistent with Dispose() - Whitespace fix --- System.IO.Abstractions.TestingHelpers/MockFileStream.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs index e405880f8..b9dc51e6a 100644 --- a/System.IO.Abstractions.TestingHelpers/MockFileStream.cs +++ b/System.IO.Abstractions.TestingHelpers/MockFileStream.cs @@ -65,13 +65,13 @@ public MockFileStream( #if NET40 public override void Close() { - if(closed) + if (closed) { return; } InternalFlush(); - OnClose(); base.Close(); + OnClose(); closed = true; } #else From c7f96cc7b41e7ac1d1d7be845ab640871dfaa760 Mon Sep 17 00:00:00 2001 From: Logan Dam Date: Fri, 9 Nov 2018 11:19:23 +0200 Subject: [PATCH 4/4] Added test case for #397 --- .../MockFileStreamTests.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs b/System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs index ec3781b4c..89fe72551 100644 --- a/System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs +++ b/System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs @@ -106,5 +106,20 @@ public void MockFileStream_Dispose_MultipleCallsDontThrow() // Assert Assert.DoesNotThrow(() => stream.Dispose()); } + + [Test] + public void MockFileStream_Dispose_OperationsAfterDisposeThrow() + { + var fileSystem = new MockFileSystem(); + var path = XFS.Path("C:\\test"); + fileSystem.AddFile(path, new MockFileData(new byte[0])); + var stream = fileSystem.FileInfo.FromFileName(path).OpenWrite(); + + // Act + stream.Dispose(); + + // Assert + Assert.Throws(() => stream.WriteByte(0)); + } } }