Skip to content

Commit 70ea5e5

Browse files
authored
Ensure MockFile.Copy clones contents (#354)
* Ensure MockFile.Copy clones contents Fixes #353 * Adapt formatting
1 parent 9694572 commit 70ea5e5

3 files changed

Lines changed: 45 additions & 3 deletions

File tree

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,27 @@ public void MockFile_Copy_ShouldOverwriteFileWhenOverwriteFlagIsTrue()
2727
Assert.AreEqual(copyResult.Contents, sourceContents.Contents);
2828
}
2929

30+
[Test]
31+
public void MockFile_Copy_ShouldCloneContents()
32+
{
33+
var sourceFileName = XFS.Path(@"c:\source\demo.txt");
34+
var destFileName = XFS.Path(@"c:\source\demo_copy.txt");
35+
36+
var mockFileSystem = new MockFileSystem();
37+
mockFileSystem.AddFile(sourceFileName, "Original");
38+
mockFileSystem.File.Copy(sourceFileName, destFileName);
39+
40+
using (var stream = mockFileSystem.File.Open(sourceFileName, FileMode.Open, FileAccess.ReadWrite))
41+
{
42+
var binaryWriter = new System.IO.BinaryWriter(stream);
43+
44+
binaryWriter.Seek(0, SeekOrigin.Begin);
45+
binaryWriter.Write("Modified");
46+
}
47+
48+
Assert.AreEqual("Original", mockFileSystem.File.ReadAllText(destFileName));
49+
}
50+
3051
[Test]
3152
public void MockFile_Copy_ShouldCreateFileAtNewDestination()
3253
{

System.IO.Abstractions.TestingHelpers/MockFile.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ public override void Copy(string sourceFileName, string destFileName, bool overw
129129
mockFileDataAccessor.RemoveFile(destFileName);
130130
}
131131

132-
var sourceFile = mockFileDataAccessor.GetFile(sourceFileName);
133-
mockFileDataAccessor.AddFile(destFileName, sourceFile);
132+
var sourceFileData = mockFileDataAccessor.GetFile(sourceFileName);
133+
mockFileDataAccessor.AddFile(destFileName, new MockFileData(sourceFileData));
134134
}
135135

136136
public override Stream Create(string path)

System.IO.Abstractions.TestingHelpers/MockFileData.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,27 @@ public MockFileData(byte[] contents)
8181
Contents = contents ?? throw new ArgumentNullException(nameof(contents));
8282
}
8383

84+
85+
/// <summary>
86+
/// Initializes a new instance of the <see cref="MockFileData"/> class by copying the given <see cref="MockFileData"/>.
87+
/// </summary>
88+
/// <param name="template">The template instance.</param>
89+
/// <exception cref="ArgumentNullException">Thrown if <paramref name="template"/> is <see langword="null" />.</exception>
90+
public MockFileData(MockFileData template)
91+
{
92+
if (template == null)
93+
{
94+
throw new ArgumentNullException(nameof(template));
95+
}
96+
97+
accessControl = template.accessControl;
98+
Attributes = template.Attributes;
99+
TextContents = template.TextContents;
100+
CreationTime = template.CreationTime;
101+
LastAccessTime = template.LastAccessTime;
102+
LastWriteTime = template.LastWriteTime;
103+
}
104+
84105
/// <summary>
85106
/// Gets or sets the byte contents of the <see cref="MockFileData"/>.
86107
/// </summary>
@@ -141,4 +162,4 @@ public FileSecurity AccessControl
141162
set { accessControl = value; }
142163
}
143164
}
144-
}
165+
}

0 commit comments

Comments
 (0)