Skip to content

Commit

Permalink
feat: add ReparsePoint attribute when creating a symbolic link (#1024)
Browse files Browse the repository at this point in the history
Files or directories which are a symbolic link should have the `ReparsePoint` attribute set.
  • Loading branch information
vbreuss committed Aug 21, 2023
1 parent 57ffb85 commit 34ae96a
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTar
mockFileDataAccessor.AddDirectory(path);
mockFileDataAccessor.GetFile(path).LinkTarget = pathToTarget;

return new MockDirectoryInfo(mockFileDataAccessor, path);
var directoryInfo = new MockDirectoryInfo(mockFileDataAccessor, path);
directoryInfo.Attributes |= FileAttributes.ReparsePoint;
return directoryInfo;
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,9 @@ public override IFileSystemInfo CreateSymbolicLink(string path, string pathToTar
destFileData.LinkTarget = pathToTarget;
mockFileDataAccessor.AddFile(path, destFileData);

return new MockFileInfo(mockFileDataAccessor, path);
var mockFileInfo = new MockFileInfo(mockFileDataAccessor, path);
mockFileInfo.Attributes |= FileAttributes.ReparsePoint;
return mockFileInfo;
}
#endif
/// <inheritdoc />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,20 @@ public void MockDirectory_CreateSymbolicLink_ShouldFailIfTargetDoesNotExist()
Assert.That(ex.Message.Contains(pathToTarget));
}

[Test]
public void MockDirectory_CreateSymbolicLink_ShouldSetReparsePointAttribute()
{
var path = "foo";
var pathToTarget = "bar";
var fileSystem = new MockFileSystem();
fileSystem.Directory.CreateDirectory(pathToTarget);

fileSystem.Directory.CreateSymbolicLink(path, pathToTarget);

var attributes = fileSystem.DirectoryInfo.New(path).Attributes;
Assert.IsTrue(attributes.HasFlag(FileAttributes.ReparsePoint));
}

[Test]
public void MockDirectory_ResolveLinkTarget_ShouldReturnPathOfTargetLink()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,20 @@ public void MockFile_CreateSymbolicLink_ShouldFailIfPathDirectoryDoesNotExist()
Assert.That(ex.Message.Contains(path));
}

[Test]
public void MockFile_CreateSymbolicLink_ShouldSetReparsePointAttribute()
{
var path = "foo.txt";
var pathToTarget = "bar.txt";
var fileSystem = new MockFileSystem();
fileSystem.File.WriteAllText(pathToTarget, "some content");

fileSystem.File.CreateSymbolicLink(path, pathToTarget);

var attributes = fileSystem.FileInfo.New(path).Attributes;
Assert.IsTrue(attributes.HasFlag(FileAttributes.ReparsePoint));
}

[Test]
public void MockFile_ResolveLinkTarget_ShouldReturnPathOfTargetLink()
{
Expand Down

0 comments on commit 34ae96a

Please sign in to comment.