diff --git a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs index e3681b0a0..23f6436b1 100644 --- a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs +++ b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockDirectory.cs @@ -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 diff --git a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs index 6e2580d65..a1241df31 100644 --- a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs +++ b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFile.cs @@ -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 /// diff --git a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs index 97415a27c..e1455bf04 100644 --- a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs +++ b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySymlinkTests.cs @@ -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() { diff --git a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs index 3f56df55b..39f6b7c6b 100644 --- a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs +++ b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileSymlinkTests.cs @@ -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() {