diff --git a/Tests/Testably.Abstractions.Testing.Tests/FileSystemInitializerExtensionsTests.cs b/Tests/Testably.Abstractions.Testing.Tests/FileSystemInitializerExtensionsTests.cs index 70859a22..24a72f98 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/FileSystemInitializerExtensionsTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/FileSystemInitializerExtensionsTests.cs @@ -3,11 +3,13 @@ using System.IO; using System.Linq; using System.Reflection; +using Testably.Abstractions.TestHelpers.Settings; using Testably.Abstractions.Testing.Initializer; namespace Testably.Abstractions.Testing.Tests; -public class FileSystemInitializerExtensionsTests +[Collection("RealFileSystemTests")] +public class FileSystemInitializerExtensionsTests(TestSettingsFixture fixture) { [Fact] public async Task Initialize_WithAFile_ShouldCreateFile() @@ -250,6 +252,7 @@ public async Task InitializeFromRealDirectory_MissingDrive_ShouldCreateDrive( string directoryName) { Skip.IfNot(Test.RunsOnWindows); + SkipIfRealFileSystemShouldBeSkipped(); string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); try @@ -282,6 +285,8 @@ public async Task InitializeFromRealDirectory_MissingDrive_ShouldCreateDrive( [Fact] public async Task InitializeFromRealDirectory_ShouldCopyFileToTargetDirectory() { + SkipIfRealFileSystemShouldBeSkipped(); + MockFileSystem fileSystem = new(); string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); try @@ -305,6 +310,8 @@ public async Task InitializeFromRealDirectory_ShouldCopyFileToTargetDirectory() public async Task InitializeFromRealDirectory_ShouldRecursivelyCopyDirectoriesToTargetDirectory() { + SkipIfRealFileSystemShouldBeSkipped(); + MockFileSystem fileSystem = new(); string tempPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); try @@ -383,4 +390,24 @@ public async Task InitializeIn_ShouldSetCurrentDirectory(string path) await That(sut.Statistics.TotalCount).IsEqualTo(0); await That(sut.Directory.GetCurrentDirectory()).IsEqualTo(expectedPath); } + + #region Helpers + + private void SkipIfRealFileSystemShouldBeSkipped() + { +#if DEBUG + if (fixture.RealFileSystemTests != TestSettingStatus.AlwaysEnabled) + { + aweXpect.Skip.Test( + $"Tests against the real file system are {fixture.RealFileSystemTests}. You can enable them by executing the corresponding tests in Testably.Abstractions.TestSettings.RealFileSystemTests."); + } +#else + if (fixture.RealFileSystemTests == TestSettingStatus.AlwaysDisabled) + { + aweXpect.Skip.Test($"Tests against the real file system are {fixture.RealFileSystemTests}. You can enable them by executing the corresponding tests in Testably.Abstractions.TestSettings.RealFileSystemTests."); + } +#endif + } + + #endregion } diff --git a/Tests/Testably.Abstractions.Testing.Tests/TestHelpers/FileSystemTestSettingsFixture.cs b/Tests/Testably.Abstractions.Testing.Tests/TestHelpers/FileSystemTestSettingsFixture.cs new file mode 100644 index 00000000..21e1e2e1 --- /dev/null +++ b/Tests/Testably.Abstractions.Testing.Tests/TestHelpers/FileSystemTestSettingsFixture.cs @@ -0,0 +1,11 @@ +using Testably.Abstractions.TestHelpers.Settings; + +namespace Testably.Abstractions.Testing.Tests.TestHelpers; + +[CollectionDefinition("RealFileSystemTests")] +public class FileSystemTestSettingsFixture : ICollectionFixture +{ + // This class has no code, and is never created. Its purpose is simply + // to be the place to apply [CollectionDefinition] and all the + // ICollectionFixture<> interfaces. +}