Skip to content

Commit

Permalink
Ensure attributes follow when moving a directory
Browse files Browse the repository at this point in the history
With the test helpers, when a directory is moved, any custom attributes
such as hidden or system are not moved to the destination directory.
  • Loading branch information
Matt Dwen committed Mar 1, 2017
1 parent 4ce9e62 commit 7e3f694
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
25 changes: 25 additions & 0 deletions TestHelpers.Tests/MockDirectoryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1011,6 +1011,31 @@ public void MockDirectory_Move_ShouldMove(string sourceDirName, string destDirNa
Assert.IsTrue(fileSystem.File.Exists(XFS.Path(destDirName + filePathTwo)));
}

[Test]
public void MockDirectory_Move_ShouldMoveDirectoryAtrributes()
{
// Arrange
const string sourceDirName = @"a:\folder1\";
const string destDirName = @"a:\folder2\";
const string filePathOne = "file1.txt";
const string filePathTwo = "file2.txt";
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ XFS.Path(sourceDirName + filePathOne) , new MockFileData("aaa") },
{ XFS.Path(sourceDirName + filePathTwo) , new MockFileData("bbb") },
});

var sourceDirectoryInfo = fileSystem.DirectoryInfo.FromDirectoryName(sourceDirName);
sourceDirectoryInfo.Attributes |= FileAttributes.System;

// Act
fileSystem.DirectoryInfo.FromDirectoryName(sourceDirName).MoveTo(destDirName);

// Assert
var destDirectoryInfo = fileSystem.DirectoryInfo.FromDirectoryName(destDirName);
Assert.IsTrue(destDirectoryInfo.Attributes.HasFlag(FileAttributes.System));
}

[Test]
public void MockDirectory_GetCurrentDirectory_ShouldReturnValueFromFileSystemConstructor() {
string directory = XFS.Path(@"D:\folder1\folder2");
Expand Down
5 changes: 5 additions & 0 deletions TestingHelpers/MockDirectory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,11 @@ public override void Move(string sourceDirName, string destDirName)
//Make sure that the destination exists
mockFileDataAccessor.Directory.CreateDirectory(fullDestPath);

//Copy over the attributes
var sourceDirectoryInfo = mockFileDataAccessor.DirectoryInfo.FromDirectoryName(sourceDirName);
var destDirectoryInfo = mockFileDataAccessor.DirectoryInfo.FromDirectoryName(destDirName);
destDirectoryInfo.Attributes = sourceDirectoryInfo.Attributes;

//Recursively move all the subdirectories from the source into the destination directory
var subdirectories = GetDirectories(fullSourcePath);
foreach (var subdirectory in subdirectories)
Expand Down

0 comments on commit 7e3f694

Please sign in to comment.