diff --git a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs index ea15019a1..e80deb61d 100644 --- a/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs +++ b/src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs @@ -107,6 +107,7 @@ public MockFileData(MockFileData template) Attributes = template.Attributes; Contents = template.Contents.ToArray(); CreationTime = template.CreationTime; + FileVersionInfo = template.FileVersionInfo; LastAccessTime = template.LastAccessTime; LastWriteTime = template.LastWriteTime; #if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET diff --git a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs index 751b259e1..55a7b1f01 100644 --- a/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs +++ b/tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs @@ -654,6 +654,82 @@ public async Task MockFileInfo_CopyTo_ThrowsExceptionIfSourceDoesNotExist() await That(action).Throws(); } + [Test] + public async Task MockFileInfo_CopyTo_ShouldPreserveMockFileDataFileVersionInfo() + { + string sourcePath = XFS.Path(@"c:\temp\file.txt"); + string destinationPath = XFS.Path(@"c:\temp\file2.txt"); + var expectedFileVersionInfo = new MockFileVersionInfo( + sourcePath, + fileVersion: "1.2.3.4", + productVersion: "5.6.7-beta", + fileDescription: "Demo file"); + var fileSystem = new MockFileSystem(new Dictionary + { + { sourcePath, new MockFileData("Demo text content") { FileVersionInfo = expectedFileVersionInfo } } + }); + + fileSystem.FileInfo.New(sourcePath).CopyTo(destinationPath); + + var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath); + + await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo); + await That(fileVersionInfo.FileVersion).IsEqualTo("1.2.3.4"); + await That(fileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta"); + await That(fileVersionInfo.FileDescription).IsEqualTo("Demo file"); + } + + [Test] + public async Task MockFileInfo_MoveTo_ShouldPreserveMockFileDataFileVersionInfo() + { + string sourcePath = XFS.Path(@"c:\temp\file.txt"); + string destinationPath = XFS.Path(@"c:\temp\file2.txt"); + var expectedFileVersionInfo = new MockFileVersionInfo( + sourcePath, + fileVersion: "1.2.3.4", + productVersion: "5.6.7-beta", + fileDescription: "Demo file"); + var fileSystem = new MockFileSystem(new Dictionary + { + { sourcePath, new MockFileData("Demo text content") { FileVersionInfo = expectedFileVersionInfo } } + }); + + fileSystem.FileInfo.New(sourcePath).MoveTo(destinationPath); + + var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath); + + await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo); + await That(fileVersionInfo.FileVersion).IsEqualTo("1.2.3.4"); + await That(fileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta"); + await That(fileVersionInfo.FileDescription).IsEqualTo("Demo file"); + } + + [Test] + public async Task MockFileInfo_Replace_ShouldPreserveMockFileDataFileVersionInfo() + { + string sourcePath = XFS.Path(@"c:\temp\file.txt"); + string destinationPath = XFS.Path(@"c:\temp\file2.txt"); + var expectedFileVersionInfo = new MockFileVersionInfo( + sourcePath, + fileVersion: "1.2.3.4", + productVersion: "5.6.7-beta", + fileDescription: "Demo file"); + var fileSystem = new MockFileSystem(new Dictionary + { + { sourcePath, new MockFileData("Demo text content") { FileVersionInfo = expectedFileVersionInfo } }, + { destinationPath, new MockFileData("Demo2 text content") } + }); + + fileSystem.FileInfo.New(sourcePath).Replace(destinationPath, null); + + var fileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath); + + await That(fileVersionInfo).IsEqualTo(expectedFileVersionInfo); + await That(fileVersionInfo.FileVersion).IsEqualTo("1.2.3.4"); + await That(fileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta"); + await That(fileVersionInfo.FileDescription).IsEqualTo("Demo file"); + } + [TestCase(@"..\..\..\c.txt")] [TestCase(@"c:\a\b\c.txt")] [TestCase(@"c:\a\c.txt")]