Skip to content

Commit 0a8ed37

Browse files
Erikfgreinacher
authored andcommitted
Clone binary contents rather than text contents (#378)
Fixes #375 When copying a file, TextContents (and underlying a TextReader) was used to copy a file rather than the actual byte[] Contents. This caused an issue when the bytes could not be read using the default UTF8 encoding.
1 parent f5e93df commit 0a8ed37

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,28 @@ public void MockFile_Copy_ShouldCloneContents()
4848
Assert.AreEqual("Original", mockFileSystem.File.ReadAllText(destFileName));
4949
}
5050

51+
[Test]
52+
public void MockFile_Copy_ShouldCloneBinaryContents()
53+
{
54+
var sourceFileName = XFS.Path(@"c:\source\demo.bin");
55+
var destFileName = XFS.Path(@"c:\source\demo_copy.bin");
56+
57+
byte[] original = new byte[] { 0xC0 };
58+
var mockFileSystem = new MockFileSystem();
59+
mockFileSystem.AddFile(sourceFileName, new MockFileData(original));
60+
mockFileSystem.File.Copy(sourceFileName, destFileName);
61+
62+
using (var stream = mockFileSystem.File.Open(sourceFileName, FileMode.Open, FileAccess.ReadWrite))
63+
{
64+
var binaryWriter = new System.IO.BinaryWriter(stream);
65+
66+
binaryWriter.Seek(0, SeekOrigin.Begin);
67+
binaryWriter.Write("Modified");
68+
}
69+
70+
CollectionAssert.AreEqual(original, mockFileSystem.File.ReadAllBytes(destFileName));
71+
}
72+
5173
[Test]
5274
public void MockFile_Copy_ShouldCreateFileAtNewDestination()
5375
{

System.IO.Abstractions.TestingHelpers/MockFileData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public MockFileData(MockFileData template)
9696

9797
accessControl = template.accessControl;
9898
Attributes = template.Attributes;
99-
TextContents = template.TextContents;
99+
Contents = template.Contents.ToArray();
100100
CreationTime = template.CreationTime;
101101
LastAccessTime = template.LastAccessTime;
102102
LastWriteTime = template.LastWriteTime;

0 commit comments

Comments
 (0)