Skip to content

Commit 602af4b

Browse files
fix: update FileVersionInfos when calling CopyTo, MoveTo and Replace on a IFileInfo
1 parent 7e5f54a commit 602af4b

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

src/TestableIO.System.IO.Abstractions.TestingHelpers/MockFileData.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public MockFileData(MockFileData template)
107107
Attributes = template.Attributes;
108108
Contents = template.Contents.ToArray();
109109
CreationTime = template.CreationTime;
110+
FileVersionInfo = template.FileVersionInfo;
110111
LastAccessTime = template.LastAccessTime;
111112
LastWriteTime = template.LastWriteTime;
112113
#if FEATURE_FILE_SYSTEM_INFO_LINK_TARGET

tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,82 @@ public async Task MockFileInfo_CopyTo_ThrowsExceptionIfSourceDoesNotExist()
654654
await That(action).Throws<FileNotFoundException>();
655655
}
656656

657+
[Test]
658+
public async Task MockFileInfo_CopyTo_ShouldPreserveMockFileDataFileVersionInfo()
659+
{
660+
string sourcePath = XFS.Path(@"c:\temp\file.txt");
661+
string destinationPath = XFS.Path(@"c:\temp\file2.txt");
662+
var fileVersionInfo = new MockFileVersionInfo(
663+
sourcePath,
664+
fileVersion: "1.2.3.4",
665+
productVersion: "5.6.7-beta",
666+
fileDescription: "Demo file");
667+
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
668+
{
669+
{ sourcePath, new MockFileData("Demo text content") { FileVersionInfo = fileVersionInfo } }
670+
});
671+
672+
fileSystem.FileInfo.New(sourcePath).CopyTo(destinationPath);
673+
674+
var copiedFileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);
675+
676+
await That(copiedFileVersionInfo).IsEqualTo(fileVersionInfo);
677+
await That(copiedFileVersionInfo.FileVersion).IsEqualTo("1.2.3.4");
678+
await That(copiedFileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta");
679+
await That(copiedFileVersionInfo.FileDescription).IsEqualTo("Demo file");
680+
}
681+
682+
[Test]
683+
public async Task MockFileInfo_MoveTo_ShouldPreserveMockFileDataFileVersionInfo()
684+
{
685+
string sourcePath = XFS.Path(@"c:\temp\file.txt");
686+
string destinationPath = XFS.Path(@"c:\temp\file2.txt");
687+
var fileVersionInfo = new MockFileVersionInfo(
688+
sourcePath,
689+
fileVersion: "1.2.3.4",
690+
productVersion: "5.6.7-beta",
691+
fileDescription: "Demo file");
692+
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
693+
{
694+
{ sourcePath, new MockFileData("Demo text content") { FileVersionInfo = fileVersionInfo } }
695+
});
696+
697+
fileSystem.FileInfo.New(sourcePath).MoveTo(destinationPath);
698+
699+
var copiedFileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);
700+
701+
await That(copiedFileVersionInfo).IsEqualTo(fileVersionInfo);
702+
await That(copiedFileVersionInfo.FileVersion).IsEqualTo("1.2.3.4");
703+
await That(copiedFileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta");
704+
await That(copiedFileVersionInfo.FileDescription).IsEqualTo("Demo file");
705+
}
706+
707+
[Test]
708+
public async Task MockFileInfo_Replace_ShouldPreserveMockFileDataFileVersionInfo()
709+
{
710+
string sourcePath = XFS.Path(@"c:\temp\file.txt");
711+
string destinationPath = XFS.Path(@"c:\temp\file2.txt");
712+
var fileVersionInfo = new MockFileVersionInfo(
713+
sourcePath,
714+
fileVersion: "1.2.3.4",
715+
productVersion: "5.6.7-beta",
716+
fileDescription: "Demo file");
717+
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
718+
{
719+
{ sourcePath, new MockFileData("Demo text content") { FileVersionInfo = fileVersionInfo } },
720+
{ destinationPath, new MockFileData("Demo2 text content") }
721+
});
722+
723+
fileSystem.FileInfo.New(sourcePath).Replace(destinationPath, null);
724+
725+
var copiedFileVersionInfo = fileSystem.FileVersionInfo.GetVersionInfo(destinationPath);
726+
727+
await That(copiedFileVersionInfo).IsEqualTo(fileVersionInfo);
728+
await That(copiedFileVersionInfo.FileVersion).IsEqualTo("1.2.3.4");
729+
await That(copiedFileVersionInfo.ProductVersion).IsEqualTo("5.6.7-beta");
730+
await That(copiedFileVersionInfo.FileDescription).IsEqualTo("Demo file");
731+
}
732+
657733
[TestCase(@"..\..\..\c.txt")]
658734
[TestCase(@"c:\a\b\c.txt")]
659735
[TestCase(@"c:\a\c.txt")]

0 commit comments

Comments
 (0)