Skip to content

Commit df30ba4

Browse files
vbreussvbtig
andauthored
fix: #870 Moving a readonly file duplicates the file (#873)
Fix function call order also in second `Move` method Co-authored-by: Valentin Breuß <v.breuss@tig.at>
1 parent ad875d7 commit df30ba4

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

src/System.IO.Abstractions.TestingHelpers/MockFile.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
using System.Runtime.Versioning;
55
using System.Security.AccessControl;
66
using System.Text;
7-
using System.Threading;
8-
using System.Threading.Tasks;
97

108
namespace System.IO.Abstractions.TestingHelpers
119
{
@@ -397,8 +395,8 @@ public override void Move(string sourceFileName, string destFileName)
397395
}
398396
VerifyDirectoryExists(destFileName);
399397

400-
mockFileDataAccessor.AddFile(destFileName, new MockFileData(sourceFile));
401398
mockFileDataAccessor.RemoveFile(sourceFileName);
399+
mockFileDataAccessor.AddFile(destFileName, new MockFileData(sourceFile));
402400
}
403401

404402
#if FEATURE_FILE_MOVE_WITH_OVERWRITE
@@ -443,8 +441,8 @@ public override void Move(string sourceFileName, string destFileName, bool overw
443441
}
444442
VerifyDirectoryExists(destFileName);
445443

446-
mockFileDataAccessor.AddFile(destFileName, new MockFileData(sourceFile));
447444
mockFileDataAccessor.RemoveFile(sourceFileName);
445+
mockFileDataAccessor.AddFile(destFileName, new MockFileData(sourceFile));
448446
}
449447
#endif
450448

tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileMoveTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@ public void MockFile_Move_ShouldMoveFileWithinMemoryFileSystem()
2727
Assert.That(fileSystem.FileExists(sourceFilePath), Is.False);
2828
}
2929

30+
[Test]
31+
public void MockFile_Move_WithReadOnlyAttribute_ShouldThrowUnauthorizedAccessExceptionAndNotMoveFile()
32+
{
33+
var sourceFilePath = @"c:\foo.txt";
34+
var destFilePath = @"c:\bar.txt";
35+
var fileSystem = new MockFileSystem();
36+
fileSystem.File.WriteAllText(sourceFilePath, "this is some content");
37+
fileSystem.File.SetAttributes(sourceFilePath, FileAttributes.ReadOnly);
38+
39+
Assert.Throws<UnauthorizedAccessException>(() => fileSystem.File.Move(sourceFilePath, destFilePath));
40+
41+
Assert.That(fileSystem.File.Exists(sourceFilePath), Is.EqualTo(true));
42+
Assert.That(fileSystem.File.Exists(destFilePath), Is.EqualTo(false));
43+
}
44+
3045
[Test]
3146
public void MockFile_Move_SameSourceAndTargetIsANoOp()
3247
{

0 commit comments

Comments
 (0)