Skip to content

Commit 7502c74

Browse files
authored
Merge pull request #536 from sszakal/add-enumerationoptions-to-idirectory-interface-with-tests
updated IDirectory interface with tests and conditional compilation (WIP)
2 parents 4496c70 + 48e007b commit 7502c74

28 files changed

Lines changed: 312 additions & 25 deletions

System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryGetAccessControlTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace System.IO.Abstractions.TestingHelpers.Tests
99
{
1010
using XFS = MockUnixSupport;
11-
11+
#if !NETCOREAPP2_1
1212
[TestFixture]
1313
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1414
public class MockDirectoryGetAccessControlTests
@@ -67,4 +67,5 @@ public void MockDirectory_GetAccessControl_ShouldReturnAccessControlOfDirectoryD
6767
Assert.That(directorySecurity, Is.EqualTo(expectedDirectorySecurity));
6868
}
6969
}
70+
#endif
7071
}

System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryInfoAccessControlTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace System.IO.Abstractions.TestingHelpers.Tests
77
{
8+
#if !NETCOREAPP2_1
89
[TestFixture]
910
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1011
public class MockDirectoryInfoAccessControlTests
@@ -60,4 +61,5 @@ public void MockDirectoryInfo_SetAccessControl_ShouldSetAccessControlOfDirectory
6061
Assert.That(accessControl, Is.EqualTo(expectedAccessControl));
6162
}
6263
}
64+
#endif
6365
}

System.IO.Abstractions.TestingHelpers.Tests/MockDirectorySetAccessControlTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace System.IO.Abstractions.TestingHelpers.Tests
99
using Security.AccessControl;
1010
using XFS = MockUnixSupport;
1111

12+
#if !NETCOREAPP2_1
1213
[TestFixture]
1314
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1415
public class MockDirectorySetAccessControlTests
@@ -66,4 +67,5 @@ public void MockDirectory_SetAccessControl_ShouldSetAccessControlOfDirectoryData
6667
Assert.That(accessControl, Is.EqualTo(expectedAccessControl));
6768
}
6869
}
70+
#endif
6971
}

System.IO.Abstractions.TestingHelpers.Tests/MockDirectoryTests.cs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,6 +1268,30 @@ public void MockDirectory_EnumerateDirectories_WithTopDirectories_ShouldOnlyRetu
12681268
Assert.That(actualResult, Is.EquivalentTo(new[] { XFS.Path(@"C:\Folder\.foo"), XFS.Path(@"C:\Folder\foo.foo") }));
12691269
}
12701270

1271+
#if NETCOREAPP2_1
1272+
[Test]
1273+
public void MockDirectory_EnumerateDirectories_WithEnumerationOptionsTopDirectories_ShouldOnlyReturnTopDirectories()
1274+
{
1275+
// Arrange
1276+
var fileSystem = new MockFileSystem();
1277+
fileSystem.AddDirectory(XFS.Path(@"C:\Folder\.foo\"));
1278+
fileSystem.AddDirectory(XFS.Path(@"C:\Folder\foo"));
1279+
fileSystem.AddDirectory(XFS.Path(@"C:\Folder\foo.foo"));
1280+
fileSystem.AddDirectory(XFS.Path(@"C:\Folder\.foo\.foo"));
1281+
fileSystem.AddFile(XFS.Path(@"C:\Folder\.foo\bar"), new MockFileData(string.Empty));
1282+
1283+
var enumerationOptions = new EnumerationOptions
1284+
{
1285+
RecurseSubdirectories = false
1286+
};
1287+
1288+
// Act
1289+
var actualResult = fileSystem.Directory.EnumerateDirectories(XFS.Path(@"c:\Folder\"), "*.foo", enumerationOptions);
1290+
1291+
// Assert
1292+
Assert.That(actualResult, Is.EquivalentTo(new[] { XFS.Path(@"C:\Folder\.foo"), XFS.Path(@"C:\Folder\foo.foo") }));
1293+
}
1294+
#endif
12711295
[Test]
12721296
public void MockDirectory_EnumerateDirectories_WithAllDirectories_ShouldReturnsAllMatchingSubFolders()
12731297
{
@@ -1656,6 +1680,38 @@ public void MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatter
16561680
Assert.That(result, Is.EquivalentTo(expected));
16571681
}
16581682

1683+
#if NETCOREAPP2_1
1684+
[Test]
1685+
public void MockDirectory_EnumerateFiles_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories()
1686+
{
1687+
// Arrange
1688+
var fileSystem = SetupFileSystem();
1689+
IEnumerable<string> expected = new[]
1690+
{
1691+
XFS.Path(@"c:\a\a.txt"),
1692+
XFS.Path(@"c:\a\b.gif"),
1693+
XFS.Path(@"c:\a\c.txt"),
1694+
XFS.Path(@"c:\a\d"),
1695+
XFS.Path(@"c:\a\a\a.txt"),
1696+
XFS.Path(@"c:\a\a\b.txt"),
1697+
XFS.Path(@"c:\a\a\c.gif"),
1698+
XFS.Path(@"c:\a\a\d")
1699+
};
1700+
1701+
var enumerationOptions = new EnumerationOptions
1702+
{
1703+
RecurseSubdirectories = true
1704+
};
1705+
1706+
// Act
1707+
var result = fileSystem.Directory.EnumerateFiles(XFS.Path(@"c:\a"), "*", enumerationOptions);
1708+
1709+
// Assert
1710+
Assert.That(result, Is.EquivalentTo(expected));
1711+
}
1712+
1713+
#endif
1714+
16591715
[Test]
16601716
public void MockDirectory_EnumerateFiles_ShouldFilterByExtensionBasedSearchPattern()
16611717
{
@@ -1770,6 +1826,39 @@ public void MockDirectory_EnumerateFileSystemEntries_ShouldFilterByExtensionBase
17701826
Assert.That(result, Is.EquivalentTo(expected));
17711827
}
17721828

1829+
#if NETCOREAPP2_1
1830+
[Test]
1831+
public void MockDirectory_EnumerateFileSystemEntries_ShouldReturnAllFilesBelowPathWhenPatternIsWildcardAndEnumerationOptionsIsAllDirectories()
1832+
{
1833+
// Arrange
1834+
var fileSystem = SetupFileSystem();
1835+
IEnumerable<string> expected = new[]
1836+
{
1837+
XFS.Path(@"c:\a\a.txt"),
1838+
XFS.Path(@"c:\a\b.gif"),
1839+
XFS.Path(@"c:\a\c.txt"),
1840+
XFS.Path(@"c:\a\d"),
1841+
XFS.Path(@"c:\a\a\a.txt"),
1842+
XFS.Path(@"c:\a\a\b.txt"),
1843+
XFS.Path(@"c:\a\a\c.gif"),
1844+
XFS.Path(@"c:\a\a\d"),
1845+
XFS.Path(@"c:\a\a")
1846+
};
1847+
1848+
var enumerationOptions = new EnumerationOptions
1849+
{
1850+
RecurseSubdirectories = true
1851+
};
1852+
1853+
// Act
1854+
var result = fileSystem.Directory.EnumerateFileSystemEntries(XFS.Path(@"c:\a"), "*", enumerationOptions);
1855+
1856+
// Assert
1857+
Assert.That(result, Is.EquivalentTo(expected));
1858+
}
1859+
#endif
1860+
1861+
#if !NETCOREAPP2_1
17731862
[Test]
17741863
public void MockDirectory_GetAccessControl_ShouldThrowExceptionOnDirectoryNotFound()
17751864
{
@@ -1794,6 +1883,7 @@ public void MockDirectory_GetAccessControl_ShouldReturnNewDirectorySecurity()
17941883
// Assert
17951884
Assert.That(result, Is.Not.Null);
17961885
}
1886+
#endif
17971887

17981888
[Test]
17991889
public void MockDirectory_SetCreationTime_ShouldNotThrowWithoutTrailingBackslash()

System.IO.Abstractions.TestingHelpers.Tests/MockFileGetAccessControlTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace System.IO.Abstractions.TestingHelpers.Tests
99
{
1010
using XFS = MockUnixSupport;
11-
11+
#if !NETCOREAPP2_1
1212
[TestFixture]
1313
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1414
public class MockFileGetAccessControlTests
@@ -67,4 +67,5 @@ public void MockFile_GetAccessControl_ShouldReturnAccessControlOfFileData()
6767
Assert.That(fileSecurity, Is.EqualTo(expectedFileSecurity));
6868
}
6969
}
70+
#endif
7071
}

System.IO.Abstractions.TestingHelpers.Tests/MockFileInfoAccessControlTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace System.IO.Abstractions.TestingHelpers.Tests
77
{
8+
#if !NETCOREAPP2_1
89
[TestFixture]
910
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1011
public class MockFileInfoAccessControlTests
@@ -60,4 +61,5 @@ public void MockFile_SetAccessControl_ShouldSetAccessControlOfFileData()
6061
Assert.That(accessControl, Is.EqualTo(expectedAccessControl));
6162
}
6263
}
64+
#endif
6365
}

System.IO.Abstractions.TestingHelpers.Tests/MockFileSetAccessControlTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace System.IO.Abstractions.TestingHelpers.Tests
77
{
8+
#if !NETCOREAPP2_1
89
[TestFixture]
910
[WindowsOnly(WindowsSpecifics.AccessControlLists)]
1011
public class MockFileSetAccessControlTests
@@ -63,4 +64,5 @@ public void MockFile_SetAccessControl_ShouldSetAccessControlOfFileData()
6364
Assert.That(accessControl, Is.EqualTo(expectedAccessControl));
6465
}
6566
}
67+
#endif
6668
}

System.IO.Abstractions.TestingHelpers.Tests/System.IO.Abstractions.TestingHelpers.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netcoreapp2.0</TargetFrameworks>
3+
<TargetFrameworks>netcoreapp2.0;netcoreapp2.1</TargetFrameworks>
44
<TargetFrameworks Condition="!$([MSBuild]::IsOsUnixLike())">$(TargetFrameworks);net40</TargetFrameworks>
55
<Version>0.0.0.1</Version>
66
<Description>The unit tests for our pre-built mocks</Description>

System.IO.Abstractions.TestingHelpers/MockDirectory.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ public MockDirectory(IMockFileDataAccessor mockFileDataAccessor, string currentD
2727

2828
public override IDirectoryInfo CreateDirectory(string path)
2929
{
30+
#if !NETCOREAPP2_1
3031
return CreateDirectoryInternal(path, null);
32+
#else
33+
return CreateDirectoryInternal(path);
34+
#endif
3135
}
3236

3337
#if NET40
@@ -37,7 +41,11 @@ public override IDirectoryInfo CreateDirectory(string path, DirectorySecurity di
3741
}
3842
#endif
3943

44+
#if !NETCOREAPP2_1
4045
private IDirectoryInfo CreateDirectoryInternal(string path, DirectorySecurity directorySecurity)
46+
#else
47+
private IDirectoryInfo CreateDirectoryInternal(string path)
48+
#endif
4149
{
4250
if (path == null)
4351
{
@@ -62,10 +70,12 @@ private IDirectoryInfo CreateDirectoryInternal(string path, DirectorySecurity di
6270

6371
var created = new MockDirectoryInfo(mockFileDataAccessor, path);
6472

73+
#if !NETCOREAPP2_1
6574
if (directorySecurity != null)
6675
{
6776
created.SetAccessControl(directorySecurity);
6877
}
78+
#endif
6979

7080
return created;
7181
}
@@ -122,6 +132,7 @@ public override bool Exists(string path)
122132
}
123133
}
124134

135+
#if !NETCOREAPP2_1
125136
public override DirectorySecurity GetAccessControl(string path)
126137
{
127138
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
@@ -141,6 +152,7 @@ public override DirectorySecurity GetAccessControl(string path, AccessControlSec
141152
return GetAccessControl(path);
142153
}
143154

155+
#endif
144156
public override DateTime GetCreationTime(string path)
145157
{
146158
return mockFileDataAccessor.File.GetCreationTime(path);
@@ -422,6 +434,7 @@ public override void Move(string sourceDirName, string destDirName)
422434
mockFileDataAccessor.MoveDirectory(fullSourcePath, fullDestPath);
423435
}
424436

437+
#if !NETCOREAPP2_1
425438
public override void SetAccessControl(string path, DirectorySecurity directorySecurity)
426439
{
427440
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
@@ -435,6 +448,7 @@ public override void SetAccessControl(string path, DirectorySecurity directorySe
435448
var directoryData = (MockDirectoryData)mockFileDataAccessor.GetFile(path);
436449
directoryData.AccessControl = directorySecurity;
437450
}
451+
#endif
438452

439453
public override void SetCreationTime(string path, DateTime creationTime)
440454
{
@@ -494,6 +508,18 @@ public override IEnumerable<string> EnumerateDirectories(string path, string sea
494508
.Where(p => !mockFileDataAccessor.StringOperations.Equals(p, path));
495509
}
496510

511+
#if NETSTANDARD2_1 || NETCOREAPP2_1
512+
public override IEnumerable<string> EnumerateDirectories(string path, string searchPattern, EnumerationOptions enumerationOptions)
513+
{
514+
var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
515+
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
516+
path = path.TrimSlashes();
517+
path = mockFileDataAccessor.Path.GetFullPath(path);
518+
return GetFilesInternal(mockFileDataAccessor.AllDirectories, path, searchPattern, searchOption)
519+
.Where(p => !mockFileDataAccessor.StringOperations.Equals(p, path));
520+
}
521+
#endif
522+
497523
public override IEnumerable<string> EnumerateFiles(string path)
498524
{
499525
return GetFiles(path);
@@ -509,6 +535,14 @@ public override IEnumerable<string> EnumerateFiles(string path, string searchPat
509535
return GetFiles(path, searchPattern, searchOption);
510536
}
511537

538+
#if NETSTANDARD2_1 || NETCOREAPP2_1
539+
public override IEnumerable<string> EnumerateFiles(string path, string searchPattern, EnumerationOptions enumerationOptions)
540+
{
541+
var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
542+
return GetFiles(path, searchPattern, searchOption);
543+
}
544+
#endif
545+
512546
public override IEnumerable<string> EnumerateFileSystemEntries(string path)
513547
{
514548
var fileSystemEntries = new List<string>(GetFiles(path));
@@ -530,6 +564,16 @@ public override IEnumerable<string> EnumerateFileSystemEntries(string path, stri
530564
return fileSystemEntries;
531565
}
532566

567+
#if NETSTANDARD2_1 || NETCOREAPP2_1
568+
public override IEnumerable<string> EnumerateFileSystemEntries(string path, string searchPattern, EnumerationOptions enumerationOptions)
569+
{
570+
var searchOption = enumerationOptions.RecurseSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
571+
var fileSystemEntries = new List<string>(GetFiles(path, searchPattern, searchOption));
572+
fileSystemEntries.AddRange(GetDirectories(path, searchPattern, searchOption));
573+
return fileSystemEntries;
574+
}
575+
#endif
576+
533577
private string EnsureAbsolutePath(string path)
534578
{
535579
return Path.IsPathRooted(path)

System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ namespace System.IO.Abstractions.TestingHelpers
55
[Serializable]
66
public class MockDirectoryData : MockFileData
77
{
8+
9+
#if !NETCOREAPP2_1
810
[NonSerialized]
911
private DirectorySecurity accessControl;
12+
#endif
1013

1114
public override bool IsDirectory { get { return true; } }
1215

@@ -15,6 +18,7 @@ public MockDirectoryData() : base(string.Empty)
1518
Attributes = FileAttributes.Directory;
1619
}
1720

21+
#if !NETCOREAPP2_1
1822
public new DirectorySecurity AccessControl
1923
{
2024
get
@@ -25,5 +29,6 @@ public MockDirectoryData() : base(string.Empty)
2529
}
2630
set { accessControl = value; }
2731
}
32+
#endif
2833
}
2934
}

0 commit comments

Comments
 (0)