diff --git a/TestingHelpers/MockDirectory.cs b/TestingHelpers/MockDirectory.cs index fd088dcb3..3e972750c 100644 --- a/TestingHelpers/MockDirectory.cs +++ b/TestingHelpers/MockDirectory.cs @@ -32,7 +32,7 @@ public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, FileBase fileBa public override DirectoryInfoBase CreateDirectory(string path) { - return CreateDirectoryInternal(path, new DirectorySecurity()); + return CreateDirectoryInternal(path, null); } #if NET40 @@ -61,7 +61,11 @@ private DirectoryInfoBase CreateDirectoryInternal(string path, DirectorySecurity } var created = new MockDirectoryInfo(mockFileDataAccessor, path); - created.SetAccessControl(directorySecurity); + if (directorySecurity != null) + { + created.SetAccessControl(directorySecurity); + } + return created; } diff --git a/TestingHelpers/MockDirectoryData.cs b/TestingHelpers/MockDirectoryData.cs index 65cf59700..5c7e441ac 100644 --- a/TestingHelpers/MockDirectoryData.cs +++ b/TestingHelpers/MockDirectoryData.cs @@ -6,7 +6,7 @@ namespace System.IO.Abstractions.TestingHelpers public class MockDirectoryData : MockFileData { [NonSerialized] - private DirectorySecurity accessControl = new DirectorySecurity(); + private DirectorySecurity accessControl; public override bool IsDirectory { get { return true; } } @@ -14,10 +14,15 @@ public MockDirectoryData() : base(string.Empty) { Attributes = FileAttributes.Directory; } - + public new DirectorySecurity AccessControl { - get { return accessControl; } + get + { + // DirectorySecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way. + // This let's us use this class as long as we don't use AccessControl property. + return accessControl ?? (accessControl = new DirectorySecurity()); + } set { accessControl = value; } } } diff --git a/TestingHelpers/MockFileData.cs b/TestingHelpers/MockFileData.cs index 0d9945bc4..16209551f 100644 --- a/TestingHelpers/MockFileData.cs +++ b/TestingHelpers/MockFileData.cs @@ -60,7 +60,7 @@ public class MockFileData /// The access control of the . /// [NonSerialized] - private FileSecurity accessControl = new FileSecurity(); + private FileSecurity accessControl; /// /// Gets a value indicating whether the is a directory or not. @@ -181,7 +181,12 @@ public FileAttributes Attributes /// public FileSecurity AccessControl { - get { return accessControl; } + get + { + // FileSecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way. + // This let's us use this class as long as we don't use AccessControl property. + return accessControl ?? (accessControl = new FileSecurity()); + } set { accessControl = value; } } }