diff --git a/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs b/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs index 96096a95d..93314ff0f 100644 --- a/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs +++ b/src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs @@ -12,7 +12,7 @@ public class MockFileInfo : FileInfoBase private readonly string originalPath; private MockFileData cachedMockFileData; private MockFile mockFile; - private bool refreshOnNextRead; + private bool refreshOnNextRead = true; /// public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path) : base(mockFileSystem?.FileSystem) @@ -21,7 +21,6 @@ public MockFileInfo(IMockFileDataAccessor mockFileSystem, string path) : base(mo this.originalPath = path ?? throw new ArgumentNullException(nameof(path)); this.path = mockFileSystem.Path.GetFullPath(path); this.mockFile = new MockFile(mockFileSystem); - Refresh(); } /// diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs index 2c413ef57..e1d969bc8 100644 --- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs +++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoTests.cs @@ -794,18 +794,21 @@ public void MockFileInfo_Replace_ShouldThrowIfDestinationFileDoesNotExist() } [Test] - public void MockFileInfo_Exists_ShouldReturnCachedData() + public void MockFileInfo_Exists_LazyLoadsData() { // Arrange var fileSystem = new MockFileSystem(); var path1 = XFS.Path(@"c:\temp\file1.txt"); var fileInfo = fileSystem.FileInfo.FromFileName(path1); + var cachedFileInfo = fileSystem.FileInfo.FromFileName(path1); + _ = cachedFileInfo.Exists; // this forces a lazyload of the data. // Act fileSystem.AddFile(path1, new MockFileData("1")); // Assert - Assert.IsFalse(fileInfo.Exists); + Assert.IsTrue(fileInfo.Exists); + Assert.IsFalse(cachedFileInfo.Exists, "Cached MockFileInfo should still return the cached value"); } [Test] @@ -815,6 +818,7 @@ public void MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh() var fileSystem = new MockFileSystem(); var path1 = XFS.Path(@"c:\temp\file1.txt"); var fileInfo = fileSystem.FileInfo.FromFileName(path1); + fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load // Act fileSystem.AddFile(path1, new MockFileData("1")); @@ -827,9 +831,11 @@ public void MockFileInfo_Exists_ShouldUpdateCachedDataOnRefresh() [Test] public void MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists() { + // Arrange IFileSystem fileSystem = new MockFileSystem(); var path = XFS.Path(@"c:\temp\file1.txt"); IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path); + fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load // Act fileInfo.Create().Dispose(); @@ -842,9 +848,11 @@ public void MockFileInfo_Create_ShouldUpdateCachedDataAndReturnTrueForExists() [Test] public void MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists() { + // Arrange IFileSystem fileSystem = new MockFileSystem(); var path = XFS.Path(@"c:\temp\file1.txt"); IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path); + fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load // Act fileInfo.CreateText().Dispose(); @@ -856,9 +864,11 @@ public void MockFileInfo_CreateText_ShouldUpdateCachedDataAndReturnTrueForExists [Test] public void MockFileInfo_Delete_ShouldUpdateCachedDataAndReturnFalseForExists() { + // Arrange var fileSystem = new MockFileSystem(); var path = XFS.Path(@"c:\temp\file1.txt"); IFileInfo fileInfo = fileSystem.FileInfo.FromFileName(path); + fileInfo.Refresh(); // circumvent the lazy loading in Exists on first access by forcing a load // Act fileInfo.Delete(); diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs index ac9216651..15f144075 100644 --- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs +++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs @@ -230,6 +230,21 @@ public void MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch_Furthe Assert.Contains(XFS.Path(@"C:\LOUD\SUBLOUD\new\SUBDirectory"), fileSystem.AllDirectories.ToList()); } + [Test] + public void MockFileSystem_FileInfoExists_ShouldBeTrueIfAFileWasAddedBeforeMockFileDataWasLazyLoaded() + { + // Arrange + var fileSystem = new MockFileSystem(); + var path1 = XFS.Path(@"c:\temp\file1.txt"); + var fileInfo = fileSystem.FileInfo.FromFileName(path1); + + // Act + fileSystem.AddFile(path1, new MockFileData("1")); + + // Assert + Assert.IsTrue(fileInfo.Exists); + } + [Test] public void MockFileSystem_AddFileFromEmbeddedResource_ShouldAddTheFile() {