Skip to content

Commit aebb626

Browse files
authored
feat: add Null to MockFileStream to shadow the static Stream.Null field (#1025)
Fixes #1009 This is a suggestion based on the [workaround by @sheila-stewart](#1009 (comment)).
1 parent 4c5b0c1 commit aebb626

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileStream.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ namespace System.IO.Abstractions.TestingHelpers
99
[Serializable]
1010
public class MockFileStream : FileSystemStream, IFileSystemAclSupport
1111
{
12+
/// <summary>
13+
/// Wrapper around a <see cref="Stream" /> with no backing store, which
14+
/// is used as a replacement for a <see cref="FileSystemStream" />. As such
15+
/// it implements the same properties and methods as a <see cref="FileSystemStream" />.
16+
/// </summary>
17+
public new static FileSystemStream Null { get; } = new NullFileSystemStream();
18+
19+
private class NullFileSystemStream : FileSystemStream
20+
{
21+
/// <summary>
22+
/// Initializes a new instance of <see cref="NullFileSystemStream" />.
23+
/// </summary>
24+
public NullFileSystemStream() : base(Null, ".", true)
25+
{
26+
27+
}
28+
}
29+
1230
private readonly IMockFileDataAccessor mockFileDataAccessor;
1331
private readonly string path;
1432
private readonly FileAccess access = FileAccess.ReadWrite;

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,5 +226,24 @@ public void MockFileStream_FlushBool_ShouldNotChangePosition([Values] bool flush
226226
Assert.AreEqual(200, stream.Position);
227227
}
228228
}
229+
230+
[Test]
231+
public void MockFileStream_Null_ShouldReturnSingletonObject()
232+
{
233+
var result1 = MockFileStream.Null;
234+
var result2 = MockFileStream.Null;
235+
236+
Assert.AreSame(result1, result2);
237+
}
238+
239+
[Test]
240+
public void MockFileStream_Null_ShouldHaveExpectedProperties()
241+
{
242+
var result = MockFileStream.Null;
243+
244+
Assert.AreEqual(result.Name, ".");
245+
Assert.AreEqual(result.Length, 0);
246+
Assert.AreEqual(result.IsAsync, true);
247+
}
229248
}
230249
}

0 commit comments

Comments
 (0)