Skip to content

Commit 403d614

Browse files
committed
Make simulation functionality public and throw a NotSupportedException on .NET Framework
1 parent 49ed920 commit 403d614

14 files changed

+99
-27
lines changed

Diff for: Feature.Flags.props

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<IS_NET8_OR_HIGHER Condition="'$(TargetFramework)' == 'net8.0'">1</IS_NET8_OR_HIGHER>
88

99
<DefineConstants Condition="'$(TargetFramework)' == 'net48' OR '$(TargetFramework)' == 'netstandard2.0'">$(DefineConstants);NETFRAMEWORK</DefineConstants>
10+
<DefineConstants Condition="'$(IS_NET21_OR_HIGHER)' == '1'">$(DefineConstants);CAN_SIMULATE_OTHER_OS</DefineConstants>
1011
<DefineConstants Condition="'$(IS_NET21_OR_HIGHER)' == '1'">$(DefineConstants);FEATURE_FILESYSTEM_ASYNC</DefineConstants>
1112
<DefineConstants Condition="'$(IS_NET21_OR_HIGHER)' == '1'">$(DefineConstants);FEATURE_FILESYSTEM_ENUMERATION_OPTIONS</DefineConstants>
1213
<DefineConstants Condition="'$(IS_NET21_OR_HIGHER)' == '1'">$(DefineConstants);FEATURE_PATH_JOIN</DefineConstants>

Diff for: Source/Testably.Abstractions.Testing/Helpers/Execute.cs

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ internal partial class Execute
4040
/// </summary>
4141
public StringComparison StringComparisonMode { get; }
4242

43+
#if !CAN_SIMULATE_OTHER_OS
44+
[Obsolete("Simulating other operating systems is not supported on .NET Framework")]
45+
#endif
4346
internal Execute(MockFileSystem fileSystem, SimulationMode simulationMode)
4447
{
4548
IsLinux = simulationMode == SimulationMode.Linux;

Diff for: Source/Testably.Abstractions.Testing/MockFileSystem.cs

+26-7
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,29 @@ public MockFileSystem() : this(_ => { }) { }
9797
/// <summary>
9898
/// Initializes the <see cref="MockFileSystem" /> with the <paramref name="initializationCallback" />.
9999
/// </summary>
100-
internal MockFileSystem(Action<Initialization> initializationCallback)
100+
public MockFileSystem(Action<Initialization> initializationCallback)
101101
{
102102
Initialization initialization = new();
103103
initializationCallback(initialization);
104104

105105
SimulationMode = initialization.SimulationMode;
106+
#if CAN_SIMULATE_OTHER_OS
106107
Execute = SimulationMode == SimulationMode.Native
107108
? new Execute(this)
108109
: new Execute(this, SimulationMode);
110+
#else
111+
if (SimulationMode != SimulationMode.Native)
112+
{
113+
throw new NotSupportedException(
114+
"Simulating other operating systems is not supported on .NET Framework");
115+
}
116+
117+
Execute = new Execute(this);
118+
#endif
109119
StatisticsRegistration = new FileSystemStatistics(this);
110120
using IDisposable release = StatisticsRegistration.Ignore();
111-
RandomSystem = new MockRandomSystem(initialization.RandomProvider ?? RandomProvider.Default());
121+
RandomSystem =
122+
new MockRandomSystem(initialization.RandomProvider ?? RandomProvider.Default());
112123
TimeSystem = new MockTimeSystem(TimeProvider.Now());
113124
_pathMock = new PathMock(this);
114125
_storage = new InMemoryStorage(this);
@@ -225,7 +236,7 @@ private void InitializeFileSystem(Initialization initialization)
225236
/// <summary>
226237
/// The initialization options for the <see cref="MockFileSystem" />.
227238
/// </summary>
228-
internal class Initialization
239+
public class Initialization
229240
{
230241
/// <summary>
231242
/// The current directory.
@@ -242,10 +253,18 @@ internal class Initialization
242253
/// </summary>
243254
internal SimulationMode SimulationMode { get; private set; } = SimulationMode.Native;
244255

256+
internal Initialization()
257+
{
258+
// Avoid public constructor
259+
}
260+
245261
/// <summary>
246262
/// Specify the operating system that should be simulated.
247263
/// </summary>
248-
internal Initialization SimulatingOperatingSystem(SimulationMode simulationMode)
264+
#if !CAN_SIMULATE_OTHER_OS
265+
[Obsolete("Simulating other operating systems is not supported on .NET Framework")]
266+
#endif
267+
public Initialization SimulatingOperatingSystem(SimulationMode simulationMode)
249268
{
250269
SimulationMode = simulationMode;
251270
return this;
@@ -254,7 +273,7 @@ internal Initialization SimulatingOperatingSystem(SimulationMode simulationMode)
254273
/// <summary>
255274
/// Use the provided <paramref name="path" /> as current directory.
256275
/// </summary>
257-
internal Initialization UseCurrentDirectory(string path)
276+
public Initialization UseCurrentDirectory(string path)
258277
{
259278
CurrentDirectory = path;
260279
return this;
@@ -263,7 +282,7 @@ internal Initialization UseCurrentDirectory(string path)
263282
/// <summary>
264283
/// Use <see cref="Directory.GetCurrentDirectory()" /> as current directory.
265284
/// </summary>
266-
internal Initialization UseCurrentDirectory()
285+
public Initialization UseCurrentDirectory()
267286
{
268287
CurrentDirectory = System.IO.Directory.GetCurrentDirectory();
269288
return this;
@@ -272,7 +291,7 @@ internal Initialization UseCurrentDirectory()
272291
/// <summary>
273292
/// Use the given <paramref name="randomProvider" /> for the <see cref="RandomSystem" />.
274293
/// </summary>
275-
internal Initialization UseRandomProvider(IRandomProvider randomProvider)
294+
public Initialization UseRandomProvider(IRandomProvider randomProvider)
276295
{
277296
RandomProvider = randomProvider;
278297
return this;

Diff for: Source/Testably.Abstractions.Testing/SimulationMode.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Runtime.InteropServices;
1+
using System;
2+
using System.Runtime.InteropServices;
23

34
namespace Testably.Abstractions.Testing;
45

Diff for: Source/Testably.Abstractions.Testing/Testably.Abstractions.Testing.csproj

-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
2222
<_Parameter1>Testably.Abstractions.Testing.Tests</_Parameter1>
2323
</AssemblyAttribute>
24-
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
25-
<_Parameter1>Testably.Abstractions.Tests</_Parameter1>
26-
</AssemblyAttribute>
2724
</ItemGroup>
2825

2926
<ItemGroup>

Diff for: Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions.Testing_net6.0.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[assembly: System.CLSCompliant(true)]
22
[assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Testably/Testably.Abstractions.git")]
33
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Testing.Tests")]
4-
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Tests")]
54
[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")]
65
namespace Testably.Abstractions.Testing.FileSystem
76
{
@@ -94,6 +93,7 @@ namespace Testably.Abstractions.Testing
9493
public sealed class MockFileSystem : System.IO.Abstractions.IFileSystem
9594
{
9695
public MockFileSystem() { }
96+
public MockFileSystem(System.Action<Testably.Abstractions.Testing.MockFileSystem.Initialization> initializationCallback) { }
9797
public System.IO.Abstractions.IDirectory Directory { get; }
9898
public System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }
9999
public System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }
@@ -112,6 +112,13 @@ namespace Testably.Abstractions.Testing
112112
public Testably.Abstractions.Testing.MockFileSystem WithAccessControlStrategy(Testably.Abstractions.Testing.FileSystem.IAccessControlStrategy accessControlStrategy) { }
113113
public Testably.Abstractions.Testing.MockFileSystem WithDrive(string? drive, System.Action<Testably.Abstractions.Testing.Storage.IStorageDrive>? driveCallback = null) { }
114114
public Testably.Abstractions.Testing.MockFileSystem WithSafeFileHandleStrategy(Testably.Abstractions.Testing.FileSystem.ISafeFileHandleStrategy safeFileHandleStrategy) { }
115+
public class Initialization
116+
{
117+
public Testably.Abstractions.Testing.MockFileSystem.Initialization SimulatingOperatingSystem(Testably.Abstractions.Testing.SimulationMode simulationMode) { }
118+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory() { }
119+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory(string path) { }
120+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseRandomProvider(Testably.Abstractions.Testing.RandomSystem.IRandomProvider randomProvider) { }
121+
}
115122
}
116123
public static class MockFileSystemExtensions
117124
{

Diff for: Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions.Testing_net7.0.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[assembly: System.CLSCompliant(true)]
22
[assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Testably/Testably.Abstractions.git")]
33
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Testing.Tests")]
4-
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Tests")]
54
[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v7.0", FrameworkDisplayName=".NET 7.0")]
65
namespace Testably.Abstractions.Testing.FileSystem
76
{
@@ -94,6 +93,7 @@ namespace Testably.Abstractions.Testing
9493
public sealed class MockFileSystem : System.IO.Abstractions.IFileSystem
9594
{
9695
public MockFileSystem() { }
96+
public MockFileSystem(System.Action<Testably.Abstractions.Testing.MockFileSystem.Initialization> initializationCallback) { }
9797
public System.IO.Abstractions.IDirectory Directory { get; }
9898
public System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }
9999
public System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }
@@ -112,6 +112,13 @@ namespace Testably.Abstractions.Testing
112112
public Testably.Abstractions.Testing.MockFileSystem WithAccessControlStrategy(Testably.Abstractions.Testing.FileSystem.IAccessControlStrategy accessControlStrategy) { }
113113
public Testably.Abstractions.Testing.MockFileSystem WithDrive(string? drive, System.Action<Testably.Abstractions.Testing.Storage.IStorageDrive>? driveCallback = null) { }
114114
public Testably.Abstractions.Testing.MockFileSystem WithSafeFileHandleStrategy(Testably.Abstractions.Testing.FileSystem.ISafeFileHandleStrategy safeFileHandleStrategy) { }
115+
public class Initialization
116+
{
117+
public Testably.Abstractions.Testing.MockFileSystem.Initialization SimulatingOperatingSystem(Testably.Abstractions.Testing.SimulationMode simulationMode) { }
118+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory() { }
119+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory(string path) { }
120+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseRandomProvider(Testably.Abstractions.Testing.RandomSystem.IRandomProvider randomProvider) { }
121+
}
115122
}
116123
public static class MockFileSystemExtensions
117124
{

Diff for: Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions.Testing_net8.0.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[assembly: System.CLSCompliant(true)]
22
[assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Testably/Testably.Abstractions.git")]
33
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Testing.Tests")]
4-
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Tests")]
54
[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v8.0", FrameworkDisplayName=".NET 8.0")]
65
namespace Testably.Abstractions.Testing.FileSystem
76
{
@@ -94,6 +93,7 @@ namespace Testably.Abstractions.Testing
9493
public sealed class MockFileSystem : System.IO.Abstractions.IFileSystem
9594
{
9695
public MockFileSystem() { }
96+
public MockFileSystem(System.Action<Testably.Abstractions.Testing.MockFileSystem.Initialization> initializationCallback) { }
9797
public System.IO.Abstractions.IDirectory Directory { get; }
9898
public System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }
9999
public System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }
@@ -112,6 +112,13 @@ namespace Testably.Abstractions.Testing
112112
public Testably.Abstractions.Testing.MockFileSystem WithAccessControlStrategy(Testably.Abstractions.Testing.FileSystem.IAccessControlStrategy accessControlStrategy) { }
113113
public Testably.Abstractions.Testing.MockFileSystem WithDrive(string? drive, System.Action<Testably.Abstractions.Testing.Storage.IStorageDrive>? driveCallback = null) { }
114114
public Testably.Abstractions.Testing.MockFileSystem WithSafeFileHandleStrategy(Testably.Abstractions.Testing.FileSystem.ISafeFileHandleStrategy safeFileHandleStrategy) { }
115+
public class Initialization
116+
{
117+
public Testably.Abstractions.Testing.MockFileSystem.Initialization SimulatingOperatingSystem(Testably.Abstractions.Testing.SimulationMode simulationMode) { }
118+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory() { }
119+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory(string path) { }
120+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseRandomProvider(Testably.Abstractions.Testing.RandomSystem.IRandomProvider randomProvider) { }
121+
}
115122
}
116123
public static class MockFileSystemExtensions
117124
{

Diff for: Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions.Testing_netstandard2.0.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[assembly: System.CLSCompliant(true)]
22
[assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Testably/Testably.Abstractions.git")]
33
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Testing.Tests")]
4-
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Tests")]
54
[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")]
65
namespace Testably.Abstractions.Testing.FileSystem
76
{
@@ -92,6 +91,7 @@ namespace Testably.Abstractions.Testing
9291
public sealed class MockFileSystem : System.IO.Abstractions.IFileSystem
9392
{
9493
public MockFileSystem() { }
94+
public MockFileSystem(System.Action<Testably.Abstractions.Testing.MockFileSystem.Initialization> initializationCallback) { }
9595
public System.IO.Abstractions.IDirectory Directory { get; }
9696
public System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }
9797
public System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }
@@ -110,6 +110,14 @@ namespace Testably.Abstractions.Testing
110110
public Testably.Abstractions.Testing.MockFileSystem WithAccessControlStrategy(Testably.Abstractions.Testing.FileSystem.IAccessControlStrategy accessControlStrategy) { }
111111
public Testably.Abstractions.Testing.MockFileSystem WithDrive(string? drive, System.Action<Testably.Abstractions.Testing.Storage.IStorageDrive>? driveCallback = null) { }
112112
public Testably.Abstractions.Testing.MockFileSystem WithSafeFileHandleStrategy(Testably.Abstractions.Testing.FileSystem.ISafeFileHandleStrategy safeFileHandleStrategy) { }
113+
public class Initialization
114+
{
115+
[System.Obsolete("Simulating other operating systems is not supported on .NET Framework")]
116+
public Testably.Abstractions.Testing.MockFileSystem.Initialization SimulatingOperatingSystem(Testably.Abstractions.Testing.SimulationMode simulationMode) { }
117+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory() { }
118+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory(string path) { }
119+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseRandomProvider(Testably.Abstractions.Testing.RandomSystem.IRandomProvider randomProvider) { }
120+
}
113121
}
114122
public static class MockFileSystemExtensions
115123
{

Diff for: Tests/Api/Testably.Abstractions.Api.Tests/Expected/Testably.Abstractions.Testing_netstandard2.1.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[assembly: System.CLSCompliant(true)]
22
[assembly: System.Reflection.AssemblyMetadata("RepositoryUrl", "https://github.com/Testably/Testably.Abstractions.git")]
33
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Testing.Tests")]
4-
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Testably.Abstractions.Tests")]
54
[assembly: System.Runtime.Versioning.TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName=".NET Standard 2.1")]
65
namespace Testably.Abstractions.Testing.FileSystem
76
{
@@ -92,6 +91,7 @@ namespace Testably.Abstractions.Testing
9291
public sealed class MockFileSystem : System.IO.Abstractions.IFileSystem
9392
{
9493
public MockFileSystem() { }
94+
public MockFileSystem(System.Action<Testably.Abstractions.Testing.MockFileSystem.Initialization> initializationCallback) { }
9595
public System.IO.Abstractions.IDirectory Directory { get; }
9696
public System.IO.Abstractions.IDirectoryInfoFactory DirectoryInfo { get; }
9797
public System.IO.Abstractions.IDriveInfoFactory DriveInfo { get; }
@@ -110,6 +110,13 @@ namespace Testably.Abstractions.Testing
110110
public Testably.Abstractions.Testing.MockFileSystem WithAccessControlStrategy(Testably.Abstractions.Testing.FileSystem.IAccessControlStrategy accessControlStrategy) { }
111111
public Testably.Abstractions.Testing.MockFileSystem WithDrive(string? drive, System.Action<Testably.Abstractions.Testing.Storage.IStorageDrive>? driveCallback = null) { }
112112
public Testably.Abstractions.Testing.MockFileSystem WithSafeFileHandleStrategy(Testably.Abstractions.Testing.FileSystem.ISafeFileHandleStrategy safeFileHandleStrategy) { }
113+
public class Initialization
114+
{
115+
public Testably.Abstractions.Testing.MockFileSystem.Initialization SimulatingOperatingSystem(Testably.Abstractions.Testing.SimulationMode simulationMode) { }
116+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory() { }
117+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseCurrentDirectory(string path) { }
118+
public Testably.Abstractions.Testing.MockFileSystem.Initialization UseRandomProvider(Testably.Abstractions.Testing.RandomSystem.IRandomProvider randomProvider) { }
119+
}
113120
}
114121
public static class MockFileSystemExtensions
115122
{

Diff for: Tests/Helpers/Testably.Abstractions.Tests.SourceGenerator/ClassGenerators/FileSystemClassGenerator.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,6 @@ public override void SkipIfLongRunningTestsShouldBeSkipped()
259259

260260
private bool IncludeSimulatedTests(ClassModel @class)
261261
{
262-
return @class.Namespace
263-
.StartsWith("Testably.Abstractions.Tests.FileSystem", StringComparison.Ordinal);
262+
return true;
264263
}
265264
}

Diff for: Tests/Testably.Abstractions.Testing.Tests/FileSystem/PathMockTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ public sealed class PathMockTests
66
{
77
[Theory]
88
[InlineAutoData(SimulationMode.Native)]
9+
#if !NETFRAMEWORK
910
[InlineAutoData(SimulationMode.Linux)]
1011
[InlineAutoData(SimulationMode.MacOS)]
1112
[InlineAutoData(SimulationMode.Windows)]
13+
#endif
1214
public void GetTempFileName_WithCollisions_ShouldThrowIOException(
1315
SimulationMode simulationMode, int fixedRandomValue)
1416
{

Diff for: Tests/Testably.Abstractions.Testing.Tests/MockFileSystemInitializationTests.cs

+6-9
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@ namespace Testably.Abstractions.Testing.Tests;
99

1010
public class MockFileSystemInitializationTests
1111
{
12+
#if !NETFRAMEWORK
1213
[SkippableFact]
1314
public void MockFileSystem_WhenSimulatingLinux_ShouldBeLinux()
1415
{
15-
Skip.IfNot(Test.RunsOnLinux,
16-
"TODO: Enable again, once the Path implementation is sufficiently complete!");
17-
1816
MockFileSystem sut = new(o => o
1917
.SimulatingOperatingSystem(SimulationMode.Linux));
2018

@@ -23,13 +21,12 @@ public void MockFileSystem_WhenSimulatingLinux_ShouldBeLinux()
2321
sut.Execute.IsWindows.Should().BeFalse();
2422
sut.Execute.IsNetFramework.Should().BeFalse();
2523
}
24+
#endif
2625

26+
#if !NETFRAMEWORK
2727
[SkippableFact]
2828
public void MockFileSystem_WhenSimulatingMacOS_ShouldBeMac()
2929
{
30-
Skip.IfNot(Test.RunsOnMac,
31-
"TODO: Enable again, once the Path implementation is sufficiently complete!");
32-
3330
MockFileSystem sut = new(o => o
3431
.SimulatingOperatingSystem(SimulationMode.MacOS));
3532

@@ -38,13 +35,12 @@ public void MockFileSystem_WhenSimulatingMacOS_ShouldBeMac()
3835
sut.Execute.IsWindows.Should().BeFalse();
3936
sut.Execute.IsNetFramework.Should().BeFalse();
4037
}
38+
#endif
4139

40+
#if !NETFRAMEWORK
4241
[SkippableFact]
4342
public void MockFileSystem_WhenSimulatingWindows_ShouldBeWindows()
4443
{
45-
Skip.IfNot(Test.RunsOnWindows,
46-
"TODO: Enable again, once the Path implementation is sufficiently complete!");
47-
4844
MockFileSystem sut = new(o => o
4945
.SimulatingOperatingSystem(SimulationMode.Windows));
5046

@@ -53,6 +49,7 @@ public void MockFileSystem_WhenSimulatingWindows_ShouldBeWindows()
5349
sut.Execute.IsWindows.Should().BeTrue();
5450
sut.Execute.IsNetFramework.Should().BeFalse();
5551
}
52+
#endif
5653

5754
[Fact]
5855
public void MockFileSystem_WithCurrentDirectory_ShouldInitializeCurrentDirectory()

Diff for: Tests/Testably.Abstractions.Testing.Tests/MockFileSystemTests.cs

+17
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,23 @@ public void FileSystemMock_ShouldBeInitializedWithADefaultDrive()
9292
drive.VolumeLabel.Should().NotBeNullOrEmpty();
9393
}
9494

95+
#if NETFRAMEWORK
96+
[SkippableTheory]
97+
[InlineData(SimulationMode.Linux)]
98+
[InlineData(SimulationMode.MacOS)]
99+
[InlineData(SimulationMode.Windows)]
100+
public void FileSystemMock_ShouldNotSupportSimulatingOtherOperatingSystemsOnNetFramework(
101+
SimulationMode simulationMode)
102+
{
103+
Exception? exception = Record.Exception(() =>
104+
{
105+
MockFileSystem sut = new(i => i.SimulatingOperatingSystem(simulationMode));
106+
});
107+
108+
exception.Should().BeOfType<NotSupportedException>();
109+
}
110+
#endif
111+
95112
[SkippableTheory]
96113
[InlineData("A:\\")]
97114
[InlineData("G:\\")]

0 commit comments

Comments
 (0)