Skip to content

Commit 90f411d

Browse files
gittingfgreinacher
authored andcommitted
Prevent duplicate dispose exception (#349)
* Prevent duplicate dispose exception * Address PR comments
1 parent 85c51a2 commit 90f411d

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,35 @@ public void MockFileStream_Constructor_ReadTypeNotWritable()
7474
Assert.IsFalse(stream.CanWrite);
7575
Assert.Throws<NotSupportedException>(() => stream.WriteByte(1));
7676
}
77+
78+
[Test]
79+
public void MockFileStream_Close_MultipleCallsDontThrow()
80+
{
81+
var fileSystem = new MockFileSystem();
82+
var path = XFS.Path("C:\\test");
83+
fileSystem.AddFile(path, new MockFileData("Bla"));
84+
var stream = fileSystem.File.OpenRead(path);
85+
86+
// Act
87+
stream.Close();
88+
89+
// Assert
90+
Assert.DoesNotThrow(() => stream.Close());
91+
}
92+
93+
[Test]
94+
public void MockFileStream_Dispose_MultipleCallsDontThrow()
95+
{
96+
var fileSystem = new MockFileSystem();
97+
var path = XFS.Path("C:\\test");
98+
fileSystem.AddFile(path, new MockFileData("Bla"));
99+
var stream = fileSystem.File.OpenRead(path);
100+
101+
// Act
102+
stream.Dispose();
103+
104+
// Assert
105+
Assert.DoesNotThrow(() => stream.Dispose());
106+
}
77107
}
78108
}

System.IO.Abstractions.TestingHelpers/MockFileStream.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class MockFileStream : MemoryStream
66
private readonly IMockFileDataAccessor mockFileDataAccessor;
77
private readonly string path;
88
private readonly bool canWrite = true;
9+
private bool disposed;
910

1011
public enum StreamType
1112
{
@@ -53,8 +54,13 @@ public override void Close()
5354
#else
5455
protected override void Dispose(bool disposing)
5556
{
57+
if (disposed)
58+
{
59+
return;
60+
}
5661
InternalFlush();
5762
base.Dispose(disposing);
63+
disposed = true;
5864
}
5965
#endif
6066

0 commit comments

Comments
 (0)