Skip to content

Commit 8c96d0b

Browse files
tomwildefgreinacher
authored andcommitted
Truncate existing files when writing via FileMode.Create/CreateNew (#470)
Fixes #465
1 parent a85d997 commit 8c96d0b

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using NUnit.Framework;
3+
using System.Text;
34

45
namespace System.IO.Abstractions.TestingHelpers.Tests
56
{
@@ -44,6 +45,30 @@ public void MockFileStreamFactory_CreateForNonExistingFile_ShouldReturnStream(Fi
4445
Assert.IsNotNull(result);
4546
}
4647

48+
[Test]
49+
[TestCase(FileMode.Create)]
50+
[TestCase(FileMode.CreateNew)]
51+
public void MockFileStreamFactory_CreateForAnExistingFile_ShouldTruncateExistingFile(FileMode fileMode)
52+
{
53+
var fileSystem = new MockFileSystem();
54+
string FilePath = XFS.Path("C:\\File.txt");
55+
56+
using(var stream = fileSystem.FileStream.Create(FilePath, fileMode, System.IO.FileAccess.Write))
57+
{
58+
var data = Encoding.UTF8.GetBytes("1234567890");
59+
stream.Write(data, 0, data.Length);
60+
}
61+
62+
using(var stream = fileSystem.FileStream.Create(FilePath, fileMode, System.IO.FileAccess.Write))
63+
{
64+
var data = Encoding.UTF8.GetBytes("AAAAA");
65+
stream.Write(data, 0, data.Length);
66+
}
67+
68+
var text = fileSystem.File.ReadAllText(FilePath);
69+
Assert.AreEqual("AAAAA", text);
70+
}
71+
4772
[Test]
4873
[TestCase(FileMode.Create)]
4974
[TestCase(FileMode.Open)]

System.IO.Abstractions.TestingHelpers/MockFileStreamFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,14 @@ private static MockFileStream.StreamType GetStreamType(FileMode mode, FileAccess
7878
{
7979
return MockFileStream.StreamType.TRUNCATE;
8080
}
81+
else if (mode == FileMode.Create)
82+
{
83+
return MockFileStream.StreamType.TRUNCATE;
84+
}
85+
else if (mode == FileMode.CreateNew)
86+
{
87+
return MockFileStream.StreamType.TRUNCATE;
88+
}
8189
else
8290
{
8391
return MockFileStream.StreamType.WRITE;

0 commit comments

Comments
 (0)