Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: avoid statistic registrations on complex initializations #505

Merged
merged 1 commit into from
Mar 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ internal FileSystemInitializer(FileSystemInitializer<TFileSystem> parent,
IDirectoryInfo subdirectory)
{
FileSystem = parent.FileSystem;
using IDisposable release = FileSystem.IgnoreStatistics();
_initializedFileSystemInfos = parent._initializedFileSystemInfos;
_basePath = FileSystem.Path.Combine(parent._basePath, subdirectory.Name);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static void InitializeEmbeddedResourcesFromAssembly(this IFileSystem file
string searchPattern = "*",
SearchOption searchOption = SearchOption.AllDirectories)
{
using IDisposable release = fileSystem.IgnoreStatistics();
EnumerationOptions enumerationOptions =
EnumerationOptionsHelper.FromSearchOption(searchOption);

Expand Down Expand Up @@ -153,6 +154,7 @@ public static IFileSystemInitializer<TFileSystem> InitializeIn<TFileSystem>(
public static IDirectoryCleaner SetCurrentDirectoryToEmptyTemporaryDirectory(
this IFileSystem fileSystem, string? prefix = null, Action<string>? logger = null)
{
using IDisposable release = fileSystem.IgnoreStatistics();
return new DirectoryCleaner(fileSystem, prefix, logger);
}

Expand All @@ -161,6 +163,7 @@ private static void InitializeFileFromEmbeddedResource(this IFileSystem fileSyst
Assembly assembly,
string embeddedResourcePath)
{
using IDisposable release = fileSystem.IgnoreStatistics();
using (Stream? embeddedResourceStream = assembly
.GetManifestResourceStream(embeddedResourcePath))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ public void InitializeBasePath_ShouldCreateDirectoryAndLogBasePath()
using IDirectoryCleaner directoryCleaner =
sut.SetCurrentDirectoryToEmptyTemporaryDirectory(logger: t => receivedLogs.Add(t));

sut.StatisticsRegistration.TotalCount.Should().Be(0);
string currentDirectory = sut.Directory.GetCurrentDirectory();
sut.Should().HaveDirectory(currentDirectory);
receivedLogs.Should().Contain(m => m.Contains($"'{currentDirectory}'"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public void With_DirectoryDescriptions_ShouldCreateDirectories(

sut.With(directories);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
foreach (DirectoryDescription directory in directories)
{
fileSystem.Should().HaveDirectory(directory.Name);
Expand All @@ -34,6 +35,7 @@ public void With_DirectoryDescriptions_WithSubdirectories_ShouldCreateDirectorie

sut.With(directoryDescription);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
foreach (DirectoryDescription directory in directories)
{
fileSystem.Should().HaveDirectory(Path.Combine(parent, directory.Name));
Expand All @@ -50,6 +52,7 @@ public void With_FileDescription_WithBytes_ShouldCreateFileContent(string name,

sut.With(description);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(name)
.Which.HasContent(bytes);
}
Expand All @@ -65,6 +68,7 @@ public void With_FileDescription_WithContent_ShouldCreateFileContent(string name

sut.With(description);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(name)
.Which.HasContent(content);
}
Expand All @@ -78,6 +82,7 @@ public void With_FileDescriptions_ShouldCreateFiles(FileDescription[] files)

sut.With(files);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
foreach (FileDescription file in files)
{
fileSystem.Should().HaveFile(file.Name);
Expand All @@ -98,6 +103,7 @@ public void With_FileDescriptions_ShouldSetIsReadOnlyFlag(bool isReadOnly, strin

sut.With(description);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(name);
fileSystem.FileInfo.New(name).IsReadOnly.Should().Be(isReadOnly);
}
Expand All @@ -113,6 +119,7 @@ public void With_FilesAndDirectories_ShouldBothBeCreated(string fileName, string

sut.With(fileDescription, directoryDescription);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(fileName);
fileSystem.Should().HaveDirectory(directoryName);
}
Expand Down Expand Up @@ -158,6 +165,7 @@ public void WithFile_HasStringContent_ShouldWriteFileContent(string path)

sut.WithFile(path).Which(f => f.HasStringContent("foo"));

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(path)
.Which.HasContent("foo");
}
Expand All @@ -173,6 +181,7 @@ public void WithFile_MissingDirectory_ShouldCreateDirectory(string directoryPath

sut.WithFile(path);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveFile(path);
fileSystem.Should().HaveDirectory(directoryPath);
}
Expand All @@ -187,6 +196,7 @@ public void WithSubdirectories_ShouldCreateAllDirectories(string[] paths)
IFileSystemInitializer<MockFileSystem> result = sut
.WithSubdirectories(paths);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
foreach (string path in paths)
{
fileSystem.Should().HaveDirectory(path);
Expand Down Expand Up @@ -236,6 +246,7 @@ public void WithSubdirectory_MultipleDirectoryLevels(string level1, string level
IFileSystemDirectoryInitializer<MockFileSystem> result = sut
.WithSubdirectory(path);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
fileSystem.Should().HaveDirectory(path);
result.FileSystem.Should().BeSameAs(fileSystem);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public void Initialize_WithAFile_ShouldCreateFile()
MockFileSystem sut = new();
sut.Initialize().WithAFile();

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.EnumerateFiles(".").Should().ContainSingle();
}

Expand All @@ -26,6 +27,7 @@ public void Initialize_WithAFile_WithExtension_ShouldCreateFileWithExtension(
MockFileSystem sut = new();
sut.Initialize().WithAFile(extension);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.EnumerateFiles(".", $"*.{extension}").Should().ContainSingle();
}

Expand All @@ -35,6 +37,7 @@ public void Initialize_WithASubdirectory_ShouldCreateDirectory()
MockFileSystem sut = new();
sut.InitializeIn("base-directory").WithASubdirectory();

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.EnumerateDirectories(".").Should().ContainSingle();
}

Expand Down Expand Up @@ -63,6 +66,7 @@ public void Initialize_WithFile_HasBytesContent_ShouldCreateFileWithGivenFileCon
.WithFile(fileName).Which(f => f
.HasBytesContent(fileContent));

sut.StatisticsRegistration.TotalCount.Should().Be(0);
byte[] result = sut.File.ReadAllBytes(fileName);

result.Should().BeEquivalentTo(fileContent);
Expand All @@ -78,6 +82,7 @@ public void Initialize_WithFile_HasStringContent_ShouldCreateFileWithGivenFileCo
.WithFile(fileName).Which(f => f
.HasStringContent(fileContent));

sut.StatisticsRegistration.TotalCount.Should().Be(0);
string result = sut.File.ReadAllText(fileName);

result.Should().Be(fileContent);
Expand All @@ -90,6 +95,7 @@ public void Initialize_WithFile_ShouldCreateFileWithGivenFileName(string fileNam
MockFileSystem sut = new();
sut.Initialize().WithFile(fileName);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.EnumerateFiles(".", fileName).Should().ContainSingle();
}

Expand All @@ -102,6 +108,7 @@ public void Initialize_WithNestedSubdirectories_ShouldCreateAllNestedDirectories
.WithSubdirectory("bar").Initialized(s => s
.WithSubdirectory("xyz")));

sut.StatisticsRegistration.TotalCount.Should().Be(0);
List<string> result = sut.Directory
.EnumerateDirectories(".", "*", SearchOption.AllDirectories).ToList();

Expand All @@ -121,6 +128,7 @@ public void Initialize_WithOptions_ShouldConsiderValueOfInitializeTempDirectory(

sut.Initialize(options => options.InitializeTempDirectory = initializeTempDirectory);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.Exists(sut.Path.GetTempPath()).Should().Be(initializeTempDirectory);
}

Expand Down Expand Up @@ -148,6 +156,7 @@ public void Initialize_WithSubdirectory_ShouldCreateDirectoryWithGivenDirectoryN
MockFileSystem sut = new();
sut.Initialize().WithSubdirectory(directoryName);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.EnumerateDirectories(".", directoryName).Should().ContainSingle();
}

Expand All @@ -160,6 +169,7 @@ public void Initialize_WithSubdirectory_ShouldExist(string directoryName)
MockFileSystem> result =
sut.Initialize().WithSubdirectory(directoryName);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
result.Directory.Should().Exist();
}

Expand All @@ -177,6 +187,7 @@ public void
Assembly.GetExecutingAssembly(),
searchPattern: "*.txt");

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
string[] result = fileSystem.Directory.GetFiles(Path.Combine(path, "TestResources"));
string[] result2 =
fileSystem.Directory.GetFiles(Path.Combine(path, "TestResources", "SubResource"));
Expand All @@ -203,6 +214,7 @@ public void
searchPattern: "*.txt",
SearchOption.TopDirectoryOnly);

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
string[] result = fileSystem.Directory.GetFiles(path);
result.Length.Should().Be(2);
result.Should().Contain(x => x.EndsWith("TestFile1.txt"));
Expand All @@ -225,6 +237,7 @@ public void
"TestResources/SubResource",
searchPattern: "*.txt");

fileSystem.StatisticsRegistration.TotalCount.Should().Be(0);
string[] result = fileSystem.Directory.GetFiles(path);
result.Length.Should().Be(1);
result.Should().Contain(x => x.EndsWith("SubResourceFile1.txt"));
Expand Down Expand Up @@ -260,10 +273,11 @@ public void InitializeIn_MissingDrive_ShouldCreateDrive(string directoryName)
public void InitializeIn_ShouldSetCurrentDirectory(string path)
{
MockFileSystem sut = new();
string expectedPath = sut.Path.GetFullPath(path);
string expectedPath = sut.Execute.Path.GetFullPath(path);

sut.InitializeIn(path);

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Directory.GetCurrentDirectory().Should().Be(expectedPath);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public void FileSystem_Initialize_ShouldNotRegisterStatistics()
.WithFile("f0").Which(f => f.HasBytesContent(Encoding.UTF8.GetBytes("bar")))
.WithAFile().Which(f => f.HasStringContent("foo"));

sut.StatisticsRegistration.TotalCount.Should().Be(0);
sut.Statistics.Directory.Methods.Should().BeEmpty();
sut.Statistics.File.Methods.Should().BeEmpty();
}
Expand Down
Loading