Skip to content

Commit 0ae3ed8

Browse files
authored
Merge pull request #289 from pasn/xamarin-runtime-fix
Fix runtime issues on non-Windows platforms (notable example is Xamarin)
2 parents 90d6fa8 + dd1d489 commit 0ae3ed8

3 files changed

Lines changed: 21 additions & 7 deletions

File tree

TestingHelpers/MockDirectory.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, FileBase fileBa
3232

3333
public override DirectoryInfoBase CreateDirectory(string path)
3434
{
35-
return CreateDirectoryInternal(path, new DirectorySecurity());
35+
return CreateDirectoryInternal(path, null);
3636
}
3737

3838
#if NET40
@@ -61,7 +61,11 @@ private DirectoryInfoBase CreateDirectoryInternal(string path, DirectorySecurity
6161
}
6262

6363
var created = new MockDirectoryInfo(mockFileDataAccessor, path);
64-
created.SetAccessControl(directorySecurity);
64+
if (directorySecurity != null)
65+
{
66+
created.SetAccessControl(directorySecurity);
67+
}
68+
6569
return created;
6670
}
6771

TestingHelpers/MockDirectoryData.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,23 @@ namespace System.IO.Abstractions.TestingHelpers
66
public class MockDirectoryData : MockFileData
77
{
88
[NonSerialized]
9-
private DirectorySecurity accessControl = new DirectorySecurity();
9+
private DirectorySecurity accessControl;
1010

1111
public override bool IsDirectory { get { return true; } }
1212

1313
public MockDirectoryData() : base(string.Empty)
1414
{
1515
Attributes = FileAttributes.Directory;
1616
}
17-
17+
1818
public new DirectorySecurity AccessControl
1919
{
20-
get { return accessControl; }
20+
get
21+
{
22+
// DirectorySecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way.
23+
// This let's us use this class as long as we don't use AccessControl property.
24+
return accessControl ?? (accessControl = new DirectorySecurity());
25+
}
2126
set { accessControl = value; }
2227
}
2328
}

TestingHelpers/MockFileData.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public class MockFileData
6060
/// The access control of the <see cref="MockFileData"/>.
6161
/// </summary>
6262
[NonSerialized]
63-
private FileSecurity accessControl = new FileSecurity();
63+
private FileSecurity accessControl;
6464

6565
/// <summary>
6666
/// Gets a value indicating whether the <see cref="MockFileData"/> is a directory or not.
@@ -181,7 +181,12 @@ public FileAttributes Attributes
181181
/// </summary>
182182
public FileSecurity AccessControl
183183
{
184-
get { return accessControl; }
184+
get
185+
{
186+
// FileSecurity's constructor will throw PlatformNotSupportedException on non-Windows platform, so we initialize it in lazy way.
187+
// This let's us use this class as long as we don't use AccessControl property.
188+
return accessControl ?? (accessControl = new FileSecurity());
189+
}
185190
set { accessControl = value; }
186191
}
187192
}

0 commit comments

Comments
 (0)